Por: Yassin Nurmahomed

Logo Vagrant
Configurar ambientes de desenvolvimento de software pode ser uma tarefa complexa. É necessário saber qual é o SO, pacotes, bibliotecas e outros programas necessários para a aplicação que desejamos desenvolver. Quando se trabalha em equipe esta tarefa torna-se ainda mais complicada pois cada programador está acostumado a usar o seu próprio ambiente. O tempo gasto para se configurar o ambiente de cada um ou para se acostumar ao novo ambiente poderia ser melhor aproveitado se concentrando em desenvolver aplicação.
O ideal seria ter alguma maneira de configurar ambientes automaticamente, de maneira uniforme e independente do sistema operacional e outros programas instalados.
O Vagrant é uma ferramenta que permite criar e configurar ambientes de desenvolvimento leves, portáteis e facilmente reproduzíveis. Os ambientes são configurados em uma instância de uma máquina virtual designada "box". Deste modo os ambientes de desenvolvimento tornam-se isolados no sentido que não interferem com a configuração da máquina hospedeira.
Todos os aspectos como a box, rede, acesso a máquina e pastas sincronizadas são definidos em um arquivo chamado "Vagrantfile" que pode ser comparado a um Makefile usado pelo make. O conteúdo do Vagrantfile nada mais é do que uma rotina em Ruby.
Para iniciar um novo ambiente usa-se o comando: $ vagrant init
no diretório do projeto, este comando cria um Vagrantfile padrão que deve ser editado para configurar a máquina conforme desejado.
Para inicializar o ambiente usa-se $ vagrant up
. Este comando inicia a instância da máquina virtual, configura as interfaces de rede e cria a pasta 'vagrant' na raiz do sistema de arquivos, esta pasta é sincronizada com a pasta do projeto no SO hospedeiro. Assim, sempre que houver alguma modificação nos arquivos em um dos SO (hospedeiro ou convidado), esta é refletida no outro. Deste modo pode-se, por exemplo, editar arquivos de código fonte pelo SO hospedeiro e compilar o projeto pelo SO convidado sem ter passado pelo processo de instalar um compilador, bibliotecas, etc.
Tipicamente, o acesso à máquina virtual é feito por terminal via ssh através do comando $ vagrant ssh
, mas também pode ser feito pela interface gráfica do VirtualBox.
Para encerrar uma instância usa-se $ vagrant halt
. E para destruí-la usa-se $ vagrant destroy
.
Boxes
Boxes são imagens de máquinas virtuais pré-configuradas que podem ser rapidamente clonadas. Escolher a box é o primeiro passo para configurar o ambiente. No trecho do Vagrantfile seguinte especificamos que a máquina irá usar como base a box "precise32".
Vagrant::Config.run do |config|
config.vm.box = "precise32"
# ...
end
Outras boxes podem ser instaladas atraves do comando $ vagrant box add <nome> <url>
. O site vagrantbox.es disponibiliza varias boxes que foram criadas por outras pessoas. Também é possível criar boxes
Rede
Existem diferentes maneiras de conectar as máquinas visitantes a rede da hospedeira.
A rede privada permite acessar a máquina visitante atraves de um endereço de IP que não é acessível por outros computadores na mesma rede que a hospedira.
Vagrant::Config.run do |config|
# ...
config.vm.network :hostonly, "192.168.33.10"
# ...
end
O modo de rede pública permite que a máquina visitante compartilhe a rede da hospedeira se comportando como mais uma máquina na rede.
Vagrant::Config.run do |config|
# ...
config.vm.network :bridged
# ...
end
O redirecionamento de portas permite redirecionar todo trafego de uma porta na máquina hospedeira para a máquina visitante:
Vagrant::Config.run do |config|
# ...
config.vm.forward_port 80, 8080
# ...
end
Nesta configuração a porta 8080 da máquina hospedeira é redirecionada para a porta 80 da visitante.
O Vagrant foi criado por Mitchell Hashimoto e era inicialmente um projeto no qual Mitchell trabalhava durante suas horas livres. Em 2012 foi criada a empresa HashiCorp para tratar do desenvolvimento da ferramenta, dar treino e suporte profissional.
O código fonte está hospedado no github.
Um projeto semelhante é o DOCKER. Ao contrário do Vagrant o DOCKER não usa máquinas virtuais para isolar os ambientes, a virtualização é feita através do lxc.