Vagrant – Máquinas virtuais automatizadas para desenvolvimento

Logotipo do VagrantQuando você começa a trabalhar com programação, é a principio normal que sua máquina fique um pouco bagunçada. Bibliotecas pra cá, interpretadores pra lá, compiladores ali, e assim vai. Depois de algum tempo, você até se encontra de forma que consegue usar tudo o que você mesmo colocou e dessa forma consegue fazer o que quer, ou seja, programar. O problema é quando você precisa efetivamente replicar este mesmo ambiente em outras máquinas, como a máquina dos seus colegas de trabalho,  por exemplo, ou quando você por algum motivo perde todos os dados da máquina (como quando o HD resolve pifar, o que costuma acontecer com certa frequência, pelo que vejo). É aí que a situação complica, e por causa disso hoje vou falar um pouco sobre o Vagrant e inclusive apresentar um breve tutorial sobre como usá-lo da maneira devida.

O Vagrant é, em poucas palavras, uma ferramenta para criar e distribuir ambientes de desenvolvimento. Com esse propósito, sua real utilidade se mostra mais clara: Facilitar o trabalho do desenvolvedor no teste de suas aplicações, permitindo simular um ambiente mais fiel ao que será usado efetivamente em produção, além de permitir o compartilhamento deste ambiente com outros desenvolvedores. Tudo isso é feito com o uso de uma máquina virtual, que isola todo um hardware virtual a partir da sua máquina física real, além de permitir uso de sistema operacional e softwares próprios, por exemplo.

No caso do Vagrant, a plataforma de máquina virtual mais usada é o Virtualbox, que, desenvolvido pela Oracle, é multi-plataforma e pode rodar uma grande quantidade de sistemas operacionais facilmente, além de permitir limitar a quantidade de memória RAM, CPU e disco livremente, por exemplo.  No caso, é o Vagrant que, a partir de alguns poucos comandos (ou exatamente 1 comando, no caso de máquinas virtuais já configuradas), inicia, provisiona e configura o Virtualbox para que você possa usar a máquina virtual do jeito que bem preferir.

Um programador PHP, por exemplo, pode configurar a máquina para instalar o PHP, Apache e MySQL da mesma forma que este o faria em um servidor real. E, ainda: usando o mesmo sistema operacional do servidor real. Mas…qual a diferença entre usar o Virtualbox diretamente e o Vagrant, nesse caso? Bom, usando o Vagrant, o desenvolvedor consegue facilmente fazer configurações como redirecionamento de portas (importante para um programador que trabalha com web), sincronizar pastas entre a sua máquina física real e a máquina virtual de desenvolvimento e provisionar a máquina virtual automaticamente de acordo com a sua vontade. Tudo isso usando apenas alguns poucos arquivos de configuração e sem precisar repetir procedimentos frequentemente. No fim, o Vagrant se destaca pela facilidade de distribuição e manutenção das máquinas virtuais, garantindo assim um ambiente de desenvolvimento eficiente e fácil de replicar.

Abaixo, segue um breve tutorial para iniciar os trabalhos com o Vagrant: (este tutorial seja feito no Linux, mas se você tiver conhecimentos avançados em Windows também é possível fazê-lo no Windows)

1) Primeiro, instale o Virtualbox, que é necessário para que o Vagrant possa criar máquinas virtuais.
2) Depois, baixe e instale o Vagrant.
3) Agora, numa pasta vazia, execute o comando “vagrant init ubuntu/trusty64“. O resultado deve ser similar a esse:

Com isso, o Vagrantfile será criado, e portanto a configuração básica da máquina virtual está disponível. O conteúdo do Vagrantfile criado está disponível abaixo:

4) Agora, experimente apagar o # do inicio das linhas 25, 67, 68, 69 e 70. O arquivo deverá ficar assim:

5) Alterado o arquivo, salve-o e experimente rodar o comando “vagrant up” na pasta onde o arquivo está localizado. O resultado deverá ser algo do tipo:

Note que o download da máquina virtual inicial demora um bocado, pois o Vagrant precisa baixar uma imagem com todo o Ubuntu Trusty já configuradinho e tal. Mas, depois que esse download é feito, a importação é bem rápida e depois o Vagrant assume e instala o pacote apache2, correspondente ao servidor web Apache, automagicamente após o boot da máquina virtual.

Não custa lembrar, claro, que esse download da imagem é feito apenas uma vez por imagem. Portanto, se você desligar a máquina (usando vagrant halt) e iniciar ela novamente (usando vagrant up), somente o boot vai ser realizado (o Vagrant é esperto e não re-executa os comandos de instalação do Apache pois sabe que a máquina já tinha sido criada e portanto esses comandos já foram executados anteriormente na máquina).

No fim, eu ainda acesso o IP da máquina diretamente (conforme configurado no Vagrantfile, na linha 25) via CURL para que este exiba na tela o HTML da página de bem vindo do Apache. Já nas linhas 67 a 70, estão os comandos de instalação do Apache no Ubuntu.

Um ponto importante, também, é que qualquer pessoa que tiver tal Vagrantfile e executar o vagrant up na pasta onde o arquivo se encontra terminará com uma máquina virtual que, se não é igual, é muito similar (as vezes pode acontecer do Apache acabar sendo atualizado nos repositórios do Ubuntu, por exemplo) à que foi criada na sua máquina, permitindo assim a distribuição de ambientes de forma muito facilmente (e sem a necessidade de transferir centenas de megabytes por aí).

6) Por último, vamos acessar a máquina via SSH usando o comando “vagrant ssh” e, com acesso ao sistema de arquivos interno da máquina virtual, modificar a página de bem vindo do Apache para um simples “Olá Mundo”. Segue a gravação:

Com isso, acho que já dá para entender bem razoavelmente o funcionamento do Vagrant e sua praticidade tanto na criação de ambientes de desenvolvimento, quanto na sua distribuição e facilidade de uso. Faltou, apenas, mostrar como funciona o sistema de compartilhamento de pastas no Vagrant, de forma que fosse possível alterar uma pasta ou arquivo no host (ou seja, na sua máquina, física) e ter essa pasta ou arquivo alterado também na máquina virtual. Só resolvi não apresentar essa parte aqui pois, dependendo das configurações do seu sistema operacional e do método escolhido, pode ser necessário a instalação de algumas dependências extras, o que iriam tornar o tutorial complexo demais para um primeiro momento. =)

Bom, espero que tenham gostado do post, do Vagrant e do tutorial como um todo (fazia tempo que eu não descrevia algo assim, passo-a-passo). Quem quiser pesquisar mais sobre a ferramenta, visite a documentação do Vagrant, que lá tem tudo explicadinho detalhadamente. =)

Por fim, segue os links da ferramenta:

Gostou do conteúdo desse post? Apoie o blog contribuindo a partir de R$1/mês através da nossa página no Apoia.se! Isso me ajudará a manter o blog no ar, além de trazer mais coisas legais para vocês! Obrigado desde já! 😀