DEV Community

Cover image for Vagrant Descomplicado: Um Guia Prático
Lorenzo Uriel
Lorenzo Uriel

Posted on

Vagrant Descomplicado: Um Guia Prático

A minha ideia é te ensinar a usar as principais funcionalidades do Vagrant em apenas um artigo, de forma simplificada e rápida. Você vai aprender o que é, para que serve, quais as suas funcionalidades e vai subir uma VM comigo no decorrer do artigo!

Tópicos

  1. Introdução
  2. Instalando o Ambiente
  3. Iniciando com uma Box
  4. Gerenciando uma Box
  5. Criando uma BOX

Introdução

O que é IaC?

IaC, ou Infraestrutura como Código, é uma abordagem na qual a infraestrutura de TI é gerenciada e provisionada usando código, em vez de configurações manuais. Sendo assim, facilita a automação e gestão ágil dos ambientes, chega de "na minha máquina funciona".

O que é um Hypervisor?

Um hypervisor é um software ou firmware que permite a execução de máquinas virtuais (VMs) em um único hardware físico. Ele age como uma camada de virtualização entre o hardware físico do computador e os sistemas operacionais convidados, permitindo que vários sistemas operacionais compartilhem o mesmo hardware simultaneamente. Nós iremos utilizar VirtualBox para subir as nossas VMs com o Vagrant.

O que é uma VM (Virtual Machine)?

É um software que simula um ambiente de computador físico e permite a execução de sistemas operacionais e aplicativos como se estivessem em hardware físico real.

O que é o Vagrant?

É uma ferramenta de linha de comando utilizada para agilizar todo o WorkFlow de uma VM, também, controlar todo o LifeCycle da VM. Nós manipulamos um Hypervisor por meio de comandos Vagrant, ele traduz os comandos enviados para os comandos do Hypervisor utilizado. O Vagrant abstrai detalhes específicos do hypervisor, proporcionando uma abordagem consistente e portátil para configuração de ambientes. O uso de arquivos de configuração (Vagrantfiles) permite uma configuração fácil e rápida de ambientes.

Imagina que você subiu um ambiente de Dev com tudo, quer adicionar esse ambiente em um outro servidor ou enviar para uma pessoa? Compartilhe o VagrantFile.

Instalando o Ambiente

Você precisa apenas fazer o download e instalar. Depois, podemos avançar para os próximos tópicos.

Iniciando com uma Box

Uma Box é basicamente o sistema operacional que você vai virtualizar. Ou seja, uma Box é uma VM empacotada em um arquivo chamado Box. O Vagrant tem uma comunidade onde as pessoas compartilham as suas Boxes, chamada Vagrant Cloud. Mas você também pode criar uma Box própria.

Imagine que no seu ambiente você utiliza o SQL Server, Power BI e outras ferramentas. Com o Vagrant, você poderia baixar uma Box com apenas o sistema operacional Windows, instalar o que você precisa e, depois, fechar uma Box sua. Assim, você iria compartilhar uma Box pronta para os ambientes ou compartilhar com a comunidade!

Comandos:

Vamos imaginar que você quer baixar o Box do windows no seu servidor

vagrant box add gusztavvargadr/windows-server-2019-standard
Enter fullscreen mode Exit fullscreen mode

Baixou algumas Boxes? Vamos lista-las

vagrant box list
Enter fullscreen mode Exit fullscreen mode

Listar opções de comando do vagrant box (Você pode usar o -h para todos os comandos)

vagrant box -h (Geral)

vagrant box list -h  (Específico)
Enter fullscreen mode Exit fullscreen mode

Quer verificar se existe alguma Box desatualizada no seu servidor?

vagrant box outdated (No próprio diretório)

vagrant box outdated -- global (Vai verificar todas que tenho no servidor)
Enter fullscreen mode Exit fullscreen mode

Quer remover a que está desatualizada?

vagrant box prune (Vai remover todas as desatualizadas)
Enter fullscreen mode Exit fullscreen mode

Ou... atualizar as mesmas sem danificar?

vagrant box update
Enter fullscreen mode Exit fullscreen mode

Caso você queira remover apenas uma Box específica.

vagrant box remove vm/name
Enter fullscreen mode Exit fullscreen mode

Esses são os comandos principais para você utilizar e baixar uma Box, vou deixar o meu cmd como exemplo:

Image description

Gerenciando uma Box

O VagrantFile é a magia do Vagrant, do que adianta ter uma VM se você não consegue manipular a mesma? Bom, isso acabou...

O VagrantFIle é o local em que adicionaremos/modificaremos todas as configurações necessárias para subir a nossa VM. Você pode configurar opções de rede, hardware e até mesmo Shell Scripts para automatizar instalações.

Criando um VagrantFile

Essa é a etapa que interessa, é aqui que vamos iniciar a primeira etapa com o Vagrant.

Comandos:

Para criar um VagrantFile, utilize o comando no seu repositório:

vagrant init vm/name
Enter fullscreen mode Exit fullscreen mode

Ele vai verificar se a Box já foi instalada (Instalamos com o vagrant box add) Se ela não estiver sido instalada, ele irá instalar.

Image description

Esse é um exemplo do VagrantFile criado (Ele vem cheio de comentários, eu removi e deixei só o que importa nesse primeiro momento):

Vagrant.configure("2") do |config|
  config.vm.box = "peru/windows-server-2019-standard-x64-eval" # Box utilizada 
  config.vm.provider "virtualbox" do |vb| # Hypervisor utilizado 
      vb.memory = "1024" # Memória disponibilizada
      vb.cpus = 10  # Configuração de CPUs
      vb.name = "Article Test 01" # Nome da VM no Hypervisor
  end
end
Enter fullscreen mode Exit fullscreen mode

Pronta para subir a mesma? Só rodar o seguinte comando no diretório:

vagrant up
Enter fullscreen mode Exit fullscreen mode

E aguardar...

Image description

Mas em poucos instantes, sua VM está no ar!

Image description

Comandos para Manipular uma VM

Vou listar alguns dos comandos principais que você precisa saber para manipular a sua VM no ar.

Comandos:

Verificar o Status da VM

vagrant status
Enter fullscreen mode Exit fullscreen mode

Desligar a VM

vagrant halt
Enter fullscreen mode Exit fullscreen mode

Subir a VM (Se existir - Liga/Se não - Cria)

vagrant up
Enter fullscreen mode Exit fullscreen mode

Suspende a VM

vagrant suspend
Enter fullscreen mode Exit fullscreen mode

Reiniciar a VM

vagrant reload
Enter fullscreen mode Exit fullscreen mode

Destruir ou Remover a VM

vagrant destroy (y/n?)
Enter fullscreen mode Exit fullscreen mode

Configurando Redes, Hostname e Liberando Porta na VM

Para configurar as redes, nós temos duas opções: NAT ou BRIDGE.

  • NAT - É uma tecnologia usada para compartilhar uma conexão de internet com vários dispositivos em uma rede local. O roteador recebe um endereço IP público da internet e atribui um endereço privado a cada dispositivo na rede local. Assim, o roteador traduz os endereços IPs privados para os público, permitindo que dispositivos na rede acessem a internet.

  • BRIDGE - É uma tecnologia utilizada para conectar duas ou mais redes locais em uma única rede. Uma ponte (Bridge) é um dispositivo que conecta duas redes e permite que os dispositivos em uma rede se conectem aos dispositivos de outra rede, como se estivessem na mesma rede.

No meu exemplo, eu vou escolher o NAT.

Exemplos:
Conexão NAT - DHCP.

Vagrant.configure("2") do |config| 
  config.vm.network "private_network", type: "dhcp" 

  config.vm.box = "peru/windows-server-2019-standard-x64-eval" # Box utilizada

end
Enter fullscreen mode Exit fullscreen mode

Conexão NAT - IP Fixo

Vagrant.configure("2") do |config| 
    config.vm.network "private_network", ip: "192.168.25.10" 

    config.vm.box = "peru/windows-server-2019-standard-x64-eval" # Box utilizada
end
Enter fullscreen mode Exit fullscreen mode

Após definirmos o tipo da rede, podemos fornecer um exemplo de porta.

Suponha que a máquina virtual (VM) que você está iniciando seja responsável por um servidor SQL, e que seja necessário estabelecer uma conexão com o SQL Server. Para realizar isso, é necessário liberar a porta associada ao SQL Server - por padrão é a 1433.

Vagrant.configure("2") do |config| 
  config.vm.network "forwarded_port", guest: 1433, host: 1433

  config.vm.box = "peru/windows-server-2019-standard-x64-eval" # Box utilizada 
end
Enter fullscreen mode Exit fullscreen mode
  • guest: 1433: Especifica que a porta no ambiente da máquina virtual (o "convidado") é a 1433.

  • host: 1433: Indica que a porta no ambiente do host (a máquina física que está executando a VM) é também 1433.

O Hostname é a última etapa que quero abordar neste capítulo, com ele vamos especificar um nome para a conexão em nossa rede local. Por exemplo, nós criamos a nossa rede em NAT, para conectar na máquina remotamente, precisaremos nos conectar pelo IP. O problema disso é: nosso IP não é fixo!

Quando utilizamos o hostname, isso não é necessário. Podemos nos conectar pelo hostname!

Vagrant.configure("2") do |config|   
  config.vm.box = "peru/windows-server-2019-standard-x64-eval" # Box utilizada

  config.vm.hostname = "VMEXARTICLE"

end
Enter fullscreen mode Exit fullscreen mode

Assim ficou o nosso VagrantFile após os aprendizados deste capítulo:

Vagrant.configure("2") do |config|
  config.vm.box = "peru/windows-server-2019-standard-x64-eval"

  config.vm.network "forwarded_port", guest: 1433, host: 1433 
  config.vm.network "private_network", type: "dhcp"

  config.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 10
      vb.name = "Article Test 01" # Nome da VM no Hypervisor
  end

  config.vm.hostname = "VMEXARTICLE"

end
Enter fullscreen mode Exit fullscreen mode

Você pode reiniciar a VM para aplicar as alterações. Para testar o hostname, faça um PING VMEXARTICLE.

Scripts Shell para Automatizar Tarefas

Isso sem sombra de dúvidas é o que mais amo no Vagrant, você pode rodar Scripts Shell (Ou Bash Scripts se for Linux), de forma totalmente automatizada.

Nesse exemplo eu vou liberar o Firewall da máquina, você pode fazer de duas maneiras.

Especificando o comando direto no VagrantFile

 config.vm.provision "shell", inline: <<-SHELL
    netsh advfirewall set allprofiles state off
  SHELL
Enter fullscreen mode Exit fullscreen mode

Especificando um path para o comando (Ele precisa estar no mesmo diretório do VagrantFile)

config.vm.provision "shell", path: "disable_firewall.ps1"
Enter fullscreen mode Exit fullscreen mode

Quero que você dê uma pausa aqui e pense... quantas coisas é possível fazer com essa automatização?

Caso a sua máquina tenha subido, não é necessário reiniciar para que os scripts Shell rodem. Você pode realizar o seguinte comando:

vagrant provision
Enter fullscreen mode Exit fullscreen mode

Ele vai identificar qual parte no VagrantFile possue o "config.vm.provision" e rodar todos. Segue exemplo:
Image description

VagrantFile final:

Vagrant.configure("2") do |config|
  config.vm.box = "peru/windows-server-2019-standard-x64-eval"

  config.vm.network "forwarded_port", guest: 1433, host: 14330

  config.vm.network "private_network", type: "dhcp"

  config.vm.provider "virtualbox" do |vb|
      vb.memory = "1024"
      vb.cpus = 10
      vb.name = "Article Test 01" 
  end

  config.vm.hostname = "VMEXARTICLE"

  config.vm.provision "shell", inline: <<-SHELL
    netsh advfirewall set allprofiles state off
  SHELL

end
Enter fullscreen mode Exit fullscreen mode

Simples, não? ;)

Criando uma BOX

Imagine esse cenário agora: Você instalou tudo que era necessário para o ambiente do projeto e deseja escalar o mesmo para o servidor de produção.

O que podemos fazer? Nós podemos fechar a NOSSA Box - vamos empacotar a Box em um arquivo .box

Exemplo:

Criando o arquivo .box da nossa VM

vagrant package --output article_test.box
Enter fullscreen mode Exit fullscreen mode
  • vagrant package: é o comando, você pode adicionar o -h para ver as outras opções do mesmo
  • --output: Complemento do comando para exportar a Box
  • article_test.box: Nome dado para a nossa Box Image description

Após criar o arquivo .box, você precisa adicionar ela em sua lista de Boxes. Igual fizemos no primeiro exemplo, quando puxamos a nossa VM do Vagrant Cloud. Porém, agora vamos buscar localmente!

Adicionando a nossa Box na lista de Boxes

vagrant box add --name article-test article_test.box
Enter fullscreen mode Exit fullscreen mode
  • vagrant box add: Comando para criar a Box
  • -- name article-test: Nome que você vai dar para a Box
  • article_test.box: Nome que foi dado para o arquivo .Box

Pronto! Você tem uma infra como código agora...

Se te interessou, pesquise mais sobre o assunto, o Vagrant tem muito mais a oferecer. Garanto que não vai se arrepender!


Obrigado por ler até aqui!

Fazendo o que precisa ser feito.

Top comments (0)