Vagrant: o que é, onde vive e o que come? Aqui no blog da 4Linux!
A tecnologia nunca foi algo provisório ou estacionário, a todo momento vemos mudanças e essas são sempre acompanhadas de desafios. Estar antenado com atualizações e lançamentos é uma tarefa árdua, pois sabemos que ambiente de TI sempre há implantações, manutenções e situações críticas.
Aqui na 4linux lidamos com múltiplas tecnologias e arquiteturas, e a cada cliente implantado um desafio é proposto para entender a dinâmica de processos e recursos. É um fato que nossa consultoria se destaca pela agilidade e confiança em suas entregas e isso reflete no preparo de nós construtores quando recebemos um projeto.
A preparação para um novo projeto consiste em criar laboratórios que simulem o ambiente do cliente e com isso trabalhar em cima das particularidades e dificuldades que podem ocorrer durante a execução.
E para criar esses laboratórios usamos uma ferramenta OpenSource chamada Vagrant. Mas, o que é o Vagrant?
Definição da Ferramenta Vagrant
Vagrant é uma ferramenta de código aberto que promove a criação e gerenciamento de ambientes de desenvolvimento virtualizados. Assim, ela permite que desenvolvedores configurem ambientes consistentes e escaláveis, independente de sistemas operacionais.
Com o Vagrant, é possível criar e provisionar máquinas virtuais de maneira rápida e fácil, garantindo que todos os membros da equipe tenham ambientes de desenvolvimento idênticos ou ambientes exclusivos que possuem dependências para testes de suas aplicações.
A principal vantagem do Vagrant é ser “portátil” pois sua execução independe de um local específico e poder criar ambientes isolados, eliminando problemas de inconsistência entre configurações de desenvolvimento e ambientes de produção. Utiliza configurações declarativas e scripts de provisionamento para automatizar a instalação e configuração de softwares em seus ambientes virtuais.
O Vagrant necessita de alguns componentes externos para realizar esta criação de ambientes, estes componentes são tecnologias de virtualização que são frequentemente utilizadas em conjunto, como VirtualBox, VMware, e outros provedores de máquinas virtuais. Essa abordagem facilita a criação de ambientes de desenvolvimento padronizados, colaboração eficiente e a rápida configuração de máquinas virtuais para testes e desenvolvimento.
Link para Documentação oficial aqui
Como utilizar o Vagrant?
Para começar a usar o Vagrant é importante realizar a instalação da ferramenta em seu sistema operacional.
O manual para instalação de acordo com sua distribuição pode ser conferido neste link.
Para nosso exemplo utilizaremos a distribuição Debian.
Abra seu terminal e digite os comandos abaixo:
2 | $ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list |
3 | $ sudo apt update && sudo apt install vagrant vagrant |
Virtualizador
O Vagrant por si só não faz a mágica acontecer, ele precisa de um virtualizador que auxiliará na criação do nosso ambiente. O virtualizador escolhido para nosso projeto será o VirtualBox na versão 6.1.
Neste artigo não iremos abordar a instalação do virtualizador, porém você pode conferir a instalação acessando este link e selecione seu sistema operacional. Algumas distribuições linux já possuem o repositório do VirtualBox em sua base de conhecimento, assim você pode utilizar o seu gerenciador de pacote para instalação bastando apenas procurar pelo nome do pacote e realizar o comando com o nome correto.
Agora vamos criar um diretório para iniciarmos nosso primeiro projeto:
O Vagrant possui diversas ferramentas que nos ajudam no gerenciamento e criação de nossas máquinas virtuais. Pelo terminal nós conseguimos visualizar essas ferramentas digitando o comando e em seguida a flag de ajuda, exemplo: `vagrant –help`
02 | Usage: vagrant [options] & lt ; command & gt ; [& lt ;args& gt ;] |
03 | - v , --version Print the version and exit . |
04 | -h, --help Print this help. |
06 | box manages boxes: installation, removal, etc. |
07 | cloud manages everything related to Vagrant Cloud |
08 | destroy stops and deletes all traces of the vagrant machine |
09 | global-status outputs status Vagrant environments for this user |
10 | halt stops the vagrant machine |
11 | help shows the help for a subcommand |
12 | init initializes a new Vagrant environment by creating a Vagrantfile |
14 | package packages a running vagrant environment into a box |
15 | plugin manages plugins: install , uninstall, update, etc. |
16 | port displays information about guest port mappings |
17 | powershell connects to machine via powershell remoting |
18 | provision provisions the vagrant machine |
19 | push deploys code in this environment to a configured destination |
20 | rdp connects to machine via RDP |
21 | reload restarts vagrant machine, loads new Vagrantfile configuration |
22 | resume resume a suspended vagrant machine |
23 | snapshot manages snapshots: saving, restoring, etc. |
24 | ssh connects to machine via SSH |
25 | ssh -config outputs OpenSSH valid configuration to connect to the machine |
26 | status outputs status of the vagrant machine |
27 | suspend suspends the machine |
28 | up starts and provisions the vagrant environment |
29 | upload upload to machine via communicator |
30 | validate validates the Vagrantfile |
31 | version prints current and latest Vagrant version |
32 | winrm executes commands on a machine via WinRM |
33 | winrm-config outputs WinRM configuration to connect to the machine |
35 | For help on any individual command run `vagrant COMMAND -h` |
37 | Additional subcommands are available, but are either more advanced |
38 | or not commonly used. To see all subcommands, run the command |
39 | `vagrant list-commands`. |
Uma dessas ferramentas para criação é o vagrant init.
que realiza a criação do nosso primeiro script para criação do ambiente. Junto dele é possível informar também qual box será usada para criar a máquina virtual.
O Vagrant trabalha o conceito de `Box` as imagens de sistemas operacionais que serão a base de máquinas virtuais, para saber quais boxes estão disponíveis basta acessar o site https://app.vagrantup.com/boxes/search e procurar pelo sistema operacional desejado. Nesta busca você pode personalizar filtrando os resultados pelo provider que será usado na virtualização, arquitetura e pelo rate de downloads por box.
Atenção: É muito importante ter o cuidado com a escolha da box, pois há diversas imagens disponíveis por usuários e também por empresas, caso a imagem não seja escolhida de uma fonte confiável seu ambiente pode correr grande perigo pois não há certezas do que foi alterado dentro do sistema operacional e se há scripts maliciosos, portanto sempre escolha imagens oficiais.
Para utilizar uma box é necessário informar o hospedeiro e a versão que será utilizada, neste cenário usaremos a box `ubuntu/bionic64`.
Em seu terminal digite:
1 | $ vagrant init ubuntu/bionic64 |
Este comando criará um arquivo chamado VagrantFile. Este é o arquivo responsável por provisionar nosso ambiente, vamos entendê-lo?
09 | Vagrant.configure( "2" ) do |config| |
18 | config.vm.box= "ubuntu/bionic64" |
O arquivo criado vem com várias linhas comentadas, estas linhas possuem o carácter # e o intuito delas é explicar o potencial das configurações e informais quais módulos são mais usados para configurar sua máquina virtual.
Para iniciar seu novo ambiente basta digitar o comando vagrant up. Este comando irá realizar o download da imagem da box e subir seu máquina virtual com todas as configurações padrão, como quantidade de memória, CPU, endereço de rede e automatização.
01 | Bringing machine 'default' up with 'virtualbox' provider... |
02 | ==> default: Box 'ubuntu/bionic64' could not be found. Attempting to find and install ... |
03 | default:BoxProvider:virtualbox |
04 | default:BoxVersion: >=0 |
05 | ==> default: Loading metadata for box 'ubuntu/bionic64' |
07 | ==> default: Adding box 'ubuntu/bionic64' (v20230607.0.0) for provider: virtualbox |
09 | default:Downloadredirectedtohost:cloud-images.ubuntu.com |
10 | ==> default: Successfully added box 'ubuntu/bionic64' (v20230607.0.0) for 'virtualbox' ! |
11 | ==> default: Importing base box 'ubuntu/bionic64' ... |
12 | ==> default: Matching MAC address for NAT networking... |
13 | ==> default: Checking if box 'ubuntu/bionic64' version '20230607.0.0' is up to date ... |
14 | ==> default: Setting the name of the VM: projeto-vagrant_default_1707935425355_35873 |
15 | ==> default: Clearing any previously set network interfaces... |
16 | ==> default: Preparing network interfaces based on configuration... |
18 | ==> default: Forwarding ports... |
19 | default:22 (guest) => 2222 (host) (adapter1) |
20 | ==> default: Running 'pre-boot' VM customizations... |
21 | ==> default: Booting VM... |
22 | ==> default: Waiting for machine to boot. This may take a few minutes... |
23 | default:SSHaddress:127.0.0.1:2222 |
24 | default:SSHusername:vagrant |
25 | default:SSHauthmethod:privatekey |
26 | default:Warning:Remoteconnectiondisconnect.Retrying... |
27 | default:Warning:Connectionreset.Retrying... |
29 | default:Vagrantinsecurekeydetected.Vagrantwillautomaticallyreplace |
30 | default:thiswithanewlygeneratedkeypairforbettersecurity. |
32 | default:Insertinggeneratedpublickeywithinguest... |
33 | default:Removinginsecurekeyfromtheguestifit's present... |
34 | default: Key inserted! Disconnecting and reconnecting using new SSH key... |
35 | ==> default: Machine booted and ready! |
36 | ==> default: Checking for guest additions in VM... |
37 | default: The guest additions on this VM do not match the installed version of |
38 | default: VirtualBox! In most cases this is fine, but in rare cases it can |
39 | default: prevent things such as shared folders from working properly. If you see |
40 | default: shared folder errors, please make sure the guest additions within the |
41 | default: virtual machine match the version of VirtualBox you have installed on |
42 | default: your host and reload your VM. |
44 | default: Guest Additions Version: 5.2.42 |
45 | default: VirtualBox Version: 6.1 |
46 | ==> default: Mounting shared folders... |
47 | default: /vagrant => /home/bayek/projeto-vagrant |
Ao final do processo podemos verificar se nossa máquina virtual está pronta digitando o comando de status vagrant status.
4 | default running (virtualbox) |
6 | The VM is running. To stop this VM, you can run `vagrant halt` to |
7 | shut it down forcefully, or you can run `vagrant suspend` to simply |
8 | suspend the virtual machine. In either case , to restart it again, |
9 | simply run `vagrant up`. |
E pronto, temos nossa primeira máquina virtual provisionada com Vagrant! Aproveite e utilize este conhecimento como base e aprofunde na criação de máquinas virtuais. Divirta-se!
Ah! este é o primeiro posta de uma pequena série que farei sobre criação de um laboratório para estudos sobre LPIC, Docker, Docker Swarm, Observabilidade dentre tantos, fiquem ligados!