Aumente a produtividade de seu time com o Vagrant

Vagrant Logo

O que é e por que usar o Vagrant ?

O Vagrant provê um ambiente portável, reproduzível e de fácil configuração feito sobre as tecnologias de alta no mercado. Com ele é possível manter um fluxo de trabalho consistente para maximizar a produtividade e a flexibilidade da sua equipe. Para conseguir essa façanha, o Vagrant trabalha com os gigantes da virtualização, como, por exemplo, VirtualBox, VMware, AWS ou qualquer outro provedor. Além disso, ferramentas de provisionamento padrões da indústria, tais como shell scripts, Chef, ou Puppet, podem ser usadas para instalar e configurar a máquina automaticamente.

Se você é um desenvolvedor, o Vagrant vai isolar as dependências e suas configurações em um ambiente consistente, único e descartável. Outros membros de seu time podem criar seus ambientes com a mesma configuração, assim, se você está trabalhando no Linux, Mac OS X, ou Windows, todos os membros do time vão estar rodando o código no mesmo ambiente, com as mesmas dependências, tudo configurado do mesmo jeito.

Se você trabalha com infraestrutura, o Vagrant disponibiliza para você um ambiente descartável e consistente para testar scripts. Você pode testar, por exemplo, coisas como shell scripts, Chef cookbooks, módulos do Puppet, e muito mais. Com a mesma configuração você pode testar tais scripts em clouds remotos como AWS e RackSpace.

Instalando

Para nosso tutorial iremos utilizar o Vagrant com o VirtualBox, mas não se esqueça que ele pode ser usado com muitos outros provedores.

1 - Baixe e instale o VirtualBox.

2 - Baixe e instale o Vagrant para a sua plataforma.

O instalador irá automaticamente adicionar o Vagrant em suas variáveis de ambiente. Após a instalação, tente rodar o comando vagrant no terminal, caso não consiga, tente relogar seu sistema operacional (acontece algumas vezes com o Windows).

Configurando e Iniciando

Crie e acesse um diretório onde estará sua aplicação:

$ mkdir vagrant_primeiro_projeto
$ cd vagrant_primeiro_projeto

Inicie um novo projeto vagrant:

$ vagrant init

Este comando irá criar um arquivo com o nome Vagrantfile em seu diretório atual, é nele que serão realizadas todas as configurações do vagrant.

Vagrant file created

Boxes

Em vez de ter que criar do zero, o Vagrant usa uma imagem base para clonar rapidamente uma máquina virtual. Essas imagens base são chamadas no Vagrant de Boxes. O primeiro passo após a criação do Vagrantfile é a definição de qual imagem seu ambiente vai usar.

Para o nosso tutorial, iremos utilizar um box chamado hashicorp/precise32. Você pode utilizar outro box procurando no catalogo da Atlas HashiCorp's.

Para adicionar o box hashicorp/precise32, rode o seguinte comando e aguarde até que o box seja baixado:

$ vagrant box add hashicorp/precise32

Agora precisamos definir nas configurações do Vagrant qual box iremos utilizar. Para isso, abra o arquivo Vagrantfile com seu editor de texto preferido e procure pela seguinte linha:

config.vm.box = "base"

Substitua por:

config.vm.box = "hashicorp/precise32"

Para iniciar a VM rode o seguinte comando:

$ vagrant up

Para desligar utilize:

$ vagrant halt

Para recarregar (reboot) utilize:

$ vagrant reload

Para suspender utilize:

$ vagrant suspend

Para restaurar uma VM que foi suspensa utilize:

$ vagrant resume

Para verificar o status de uma VM utilize:

$ vagrant status

Para destruir uma VM utilize:

$ vagrant destroy

Para ver mais comandos utilize:

$ vagrant help

Irei abordar alguns outros comandos importantes no decorrer do tutorial.

Iniciando e acessando por SSH

Para iniciar seu ambiente, rode o seguinte comando:

$ vagrant up

(Caso tenha algum problema ao rodar em um Mac, utilize o comando $ sudo chmod o-w /Applications)

Aguarde até que o processo seja finalizado e após isso, você verá uma mensagem parecida com a seguinte:

Vagrant Rodando

Para acessar sua máquina via SSH, rode o seguinte comando:

$ vagrant ssh

Com esse comando você estará dentro de uma sessão SSH com a sua máquina Vagrant, interaja com ela da maneira que bem entender.

Vagrant SSH

Pastas sincronizadas

Muitas pessoas não são fãs de usar editores de texto baseados no terminal (exemplo: vim). Por isso, não se preocupe, você não precisa usar se não quiser. O Vagrant possui o recurso de pastas sincronizadas, com esse recurso ele irá sincronizar automaticamente os arquivos com a sua máquina de origem (host). Por padrão, o Vagrant sincroniza o diretório do seu projeto (aquele onde está o arquivo Vagrantfile) com o /vagrant dentro de sua máquina virtual.

Experimente criar um arquivo dentro de sua máquina vagrant:

vagrant@precise32:~$ touch /vagrant/arquivoteste
vagrant@precise32:~$ exit
$ ls
arquivotest Vagrantfile

Arquivo Criado

Como não iremos utilizar esse arquivo, podemos apagá-lo.

Provisionamento

Agora que você tem uma máquina virtual rodando uma cópia do Ubuntu, podemos editar arquivos em sua máquina local e sincroniza-los em sua máquina virtual. Vamos avançar um pouco, por exemplo, instalando um servidor web. Você poderia simplesmente acessar a máquina virtual via SSH e instalar o servidor web, mas se fizer isso, cada pessoa que você passar o seu Vagrant tambémterá que fazer o mesmo. Para evitar esse problema, o Vagrant disponibiliza um recurso chamado provisionamento automatizado, com esse recurso ele irá instalar os softwares que você quiser ao rodar o comando vagrant up pela primeira vez.

Você pode criar, por exemplo, um provisionador com shell script que instale o MySQL, Apache, etc…
Seguindo o exemplo da documentação oficial, iremos criar um script que instala o Apache em nossa máquina virtual. Para isso, crie um arquivo com o nome bootstrap.sh em sua máquina local e adicione o seguinte conteúdo:

#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
rm -rf /var/www
ln -fs /vagrant /var/www
fi

Agora abra o arquivo Vagrantfile e adicione a seguinte linha ao final do arquivo, antes do end:

config.vm.provision :shell, path: "bootstrap.sh”

O arquivo deverá ficar parecido com o seguinte:

Vagrantfile

A linha que acabamos de adicionar informa ao Vagrant para usar um provisionador de shell ao iniciar a máquina virtual. Para testarmos, rode o seguinte comando:

$ vagrant up (ou $ vagrant reload --provision se a sua máquina já estiver rodando).

Você vai ver no terminal uma saída parecida com a seguinte:

Provision Output

Adicionando a flag —provision na instrução do comando vagrant reload fará com que o Vagrant rode os provisionadores (o usual é rodar apenas no primeiro $ vagrant up).

Configurações de Rede

Se você seguiu todos os passos corretamente até agora, neste momento você tem um servidor web rodando dentro de sua máquina virtual Vagrant. Porém ainda não conseguimos acessar páginas servidas por este servidor web por fora da máquina virtual e, para ajustar, iremos configurar o recurso de port forwarding. Com ele, será possível configurar uma porta comum de acesso entre a máquina guest (VM do Vagrant) e a máquina host.

Abra o arquivo Vagrantfile e procure pela linha:

# config.vm.network "forwarded_port", guest: 80, host: 8080

Remova o # da linha para "descomentar" e salve o arquivo. Se sua máquina já estiver funcionando, rode o comando $ vagrant reload, caso a máquina ainda não esteja iniciada rode $ vagrant up.

Conclusão

Neste ponto, você já deve ter uma máquina virtual Vagrant funcionando com um servidor web acessível por sua máquina host. Como deve ter notado, a configuração do Vagrant é bem simples e possibilita a criação de ambientes bem rapidamente aumentando a produtividade do time.

Referências

https://docs.vagrantup.com/v2/

Um agradecimento a Raquel, Renan e Ramon por terem revisado o artigo :)