Front-End Ops: Vagrant

Translate to english

Descubra as vantagens de virtualizar seu ambiente de desenvolvimento

Por definição, a ferramenta é:

Vagrant é uma ferramenta para construir ambientes de desenvolvimento. Com um fluxo de trabalho simples e com foco na automação, o Vagrant reduz o tempo de configuração de seu ambiente de desenvolvimento.

De maneira bem resumida, é exatamente isso. Em 2010, o desenvolvedor Mitchell Hashimoto deu início ao projeto open source que, de uma maneira bem simplificada na explicação, faz com que você rode um sistema operacional dentro de outro. Método conhecido por virtualização.

Mas você deve estar se perguntar: "ora bolas, por que vou usar Vagrant e não VirtualBox? Ou Parallels? Ou qualquer outro software de virtualização?". A resposta é: você vai.

O Vagrant funciona como um comando headless para a ferramenta de virtualização. Ao invés de abrir o aplicativo e configurar utilizando uma interface, você faz tudo através de uma interace de linha de comando (CLI[1]).

Começando com o Vagrant

Tudo que será explicado neste tutorial foi feito utilizando o OS X, com o VirtualBox como ferramenta de virtualização. Mas você pode encontrar mais detalhes e outros meios de fazer isso diretamente na documentação do site do projeto.

Baixe o que for necessário

Em primeiro lugar, você deve fazer o download do Virtualbox, que é de distribuição gratuita. Em seguida, baixe o Vagrant. Instale nessa mesma ordem. ATENÇÃO: verifique antes a compatibilidade entre a versão do Vagrant e do VirtualBox na área chamada "VIRTUALBOX" da Documentação do Vagrant.

Depois de baixar os aplicativos, baixe também a distribuição de seu sistema operacional de preferência. Para meus ambientes locais, costumo utilizar o Ubuntu Precise 64 bits. Você pode encontrar várias boxes gratuitas e, muitas até, com várias aplicações já instaladas, na seguinte URL: www.vagrantbox.es.

Para adicionar uma box, basta executar o seguinte comando:

$ vagrant box add {nome-da-box} {url}

Ou seja

Caso queira adicionar ao seu VirtualBox o Ubuntu Precise 64, basta executar os seguintes comandos:

$ vagrant box add precise64 http://files.vagrantup.com/precise64.box

Logo após disso ser feito, você precisa de um arquivo de configuração. Você tem duas opções:

  1. Rodar o comando vagrant init dentro da pasta do projeto que deseja criar seu ambiente.
  2. Ter um arquivo Vagrantfile na pasta do projeto que deseja criar seu ambiente. Você pode criar o seu padrão e reutilizar em vários projetos.

O meu arquivo Vagrantfile padrão, é o abaixo. E irei explicar linha a linha:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "nome-do-box"
  config.vm.box_url = "caminho/para/seu/arquivo.box"
  config.vm.synced_folder "nome-do-projeto", "/var/www/nome-do-projeto"
  config.vm.network "private_network", ip: "10.0.1.7"
  config.vm.network "forwarded_port", guest: 80, host: 0707
end

Ou seja

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.vm.synced_folder "imasters-feops", "/var/www/imasters-feops"
  config.vm.network "private_network", ip: "10.0.1.7"
  config.vm.network "forwarded_port", guest: 80, host: 0707
end
Linha a linha, a explicação das funções:

Linha 1: Definindo qual a versão da API estamos utilizando.

Linha 3: Início do bloco de configuração da máquina virtual.

Linha 4: Nome do box a ser criado.

Linha 5: Caminho do box a ser baixado (pode ser uma URL ou caminho interno do computador, caso o arquivo .box já exista).

Linha 6: Pasta local e da máquina virtual a serem sincronizadas. Tudo que você alterar em sua pasta local será automagicamente replicado para o caminho que especificou na máquina virtual. E este é um diferencial para os programadores front-end :)

Linha 7: Endereço de IP da rede privada.

Linha 8: Caso sua máquina virtual tenha que ser acessível em uma rede, o melhor caminho que encontrei é mapear uma porta local de seu IP para uma porta do IP de rede da máquina virtual. Assim, se seu IP na rede é 192.168.0.1, quando for acessado: 192.168.0.1:0707 ele irá redirecionar o acesso para 10.0.1.7:80, partindo a requisição da sua própria máquina.

Linha 9: Final do bloco de configuração da máquina virtual.

Fiz tudo, e agora?

Agora vamos, finalmente, rodar seu ambiente de desenvolvimento.

Para isso, dentro da pasta onde esta seu arquivo Vagrantfile, basta executar o seguinte comando:

$ vagrant up

Pronto. Você vai ver aquela tela que, quem não trabalha com computadores olha e fala: CARAMBA, QUE HACKER!

Agora é só desfrutar das vantagens, como por exemplo o acesso fácil e rápido via SSH.

SSH

Para acessar o terminal de sua máquina virtual, o primeiro passo é: esqueça o VirtualBox. Você tem tudo em suas mãos pelo terminal.

$ vagrant ssh

Pronto. Você está dentro de seu ambiente de desenvolvimento novo em folha. Atualize o sistema e instale seu ambiente do jeito que você precisa. Com Apache, nginx, ruby, python, nodejs, não importa. Você tem uma máquina nova, limpa pronta para usar.

No meu ponto de vista, essa é a vantagem. Se você está trabalhando em um projeto que usa ruby na versão 1.9.3, e começou outro projeto que já utiliza a versão 2.1.0 e não quer que elas se interfiram (sem usar rvm ou outros gerenciadores de versão), além de ter outro projeto em NodeJS, basta ter uma VM para cada ambiente, o que vai deixar seu computador ileso de conflitos.

Mas lembre-se: você está instalando um sistema operacional pra cada ambiente de desenvolvimento, o que demanda memória e espaço em disco. Use com sabedoria. Como disse a tia do Bátema:

"Com grandes poderes, grandes responsabilidades".

(OK, eu sei que foi o tio do Peter Park ;D)


[1] CLI: Command-Line Interface