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:


Posts relacionados


10 respostas para “Vagrant - Máquinas virtuais automatizadas para desenvolvimento”

  1. […] último post, eu falei um pouco sobre o Vagrant,  que é uma ferramenta que permite criar e distribuir máquinas virtuais voltadas […]

  2. Avatar de Paulo A. Costa
    Paulo A. Costa

    Muito bom! Não conhecia esta ferramenta. Será que é possível a configuração mais detalhada da máquina virtual, como por exemplo: regras de firewall, configurações do apache, etc.?

  3. Avatar de Karson Adam
    Karson Adam

    essa é a fermenta mais simples que já user para revolver o problema de ambiente de desenvolvimento

  4. […] Usar o Vagrant para criar uma máquina virtual já com PHP e Composer instalados usando o Vagrantfile que eu […]

  5. […] Caso você não queira instalar o Git em seu computador, pode utilizar o Vagrant em conjunto com o Vagrantfile que eu criei para criar uma máquina virtual já com o git instalado. […]

  6. […] de configuração em mãos, basta um simples comando (que por curiosidade, é similar ao usado pelo Vagrant) na mesma pasta no qual o arquivo está localizado para que o Docker Compose comece a trabalhar: Em […]

  7. […] Caso você não queira instalar o NodeJS no seu computador, pode utilizar o Vagrant em conjunto com o Vagrantfile que eu criei para criar uma máquina virtual já com o NodeJS e o git […]

  8. […] o Dokku em seu próprio computador, digamos, para ver como funciona, também é possível usar o Vagrant - que apresentei em outro post - para rodá-lo. Apenas esteja ciente de que dessa forma os seus projetos NÃO serão publicados na […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.