Vagrant – As vantagens da virtualização em ambiente local

Olá pessoal.

Quando conheci a ferramenta, achei realmente engraçado seu nome, uma ferramenta de Vagabundo. Seu nome vem da facilidade em que se cria ambientes diversos de forma rápida e prática.

Para facilitar, todos os exemplos foram colocados nesse repositório, cada branch, representa seu tipo de provisionamento.

A proposta é poder criar e configurar ambientes de desenvolvimento leves, reprodutíveis e portáteis.

Mudando sua forma de trabalhar

O download do Vagrant pode ser feito em seu site https://www.vagrantup.com/ e possui versões para Mac, Windows e Linux. Afinal não importa o seu sistema operacional, o que importa é que seu ambiente, é o mais próximo possível do ambiente de produção/homologação.

Configurar

A configuração é a mais simples possível, com apenas um arquivo “Vagrantfile“, você descreve o tipo de máquina, a URL da imagem, e os softwares que serão instalados em seu ambiente, e as maneiras que deseja ter acesso a essa máquina criando redes internas e externas. Além das configurações de IP, hostname, e tudo que envolve um ambiente de aplicações web.

Ambientes iguais.

Essa ferramenta acaba com as desculpas de: “Funciona na minha máquina”, pois o ambiente pode ser atualizado com frequência, e distribuído para toda a equipe.

Nosso primeiro ambiente com Puppet

Vamos iniciar a criação de ambientes, usando duas ferramentas: Puppet e Chef. Ambas ferramentas oferecem receitas prontas de configurações iniciais para o start do seu projeto, e tanto o PuPHPet como o Chef, possuem ótimas integrações com o Vagrant, tornando todo o trabalho de escolher uma imagem, e configurar a partir dela, para depois distribuir, seja poupado.

Então em alguns minutos, eu prometo para você que teremos uma máquina virtual utilizando

  • CentOs
  • NGINX
  • PHP-FPM
  • MySQL
  • MongoDB
  • xDebug
  • MailCatcher

Faça o Download do PuPHPet já gerado por mim ou gere o seu no site PuPHPet.

Coloque na pasta do seu projeto, no meu caso “~/projects/app”, (altere dentro do seu Vagrantfile caso o caminho do seu projeto seja diferente) e execute no terminal:

Após isso, aguarde a primeira execução do seu vagrant, enquanto ele faz o download da imagem, configura pela primeira vez seu ambiente com as configurações especificadas no arquivo “puphpet/config.yaml”.

Alguns itens importantes do seu ambiente

Abrindo o arquivo “puphpet/config.yaml” você irá encontrar algumas informações importantes sobre seu ambiente:

Memoria (1GB)

CPU’s

Rede Privada

MySQL

MongoDB

Provisionamento Puppet

Agora basta versionar a pasta puphpet e o arquivo VagrantFile e distribua junto ao projeto para todos. Os requisitos mínimos para a sua equipe iniciar será VirtualBox e Vagrant instalados localmente (Mac, Windows ou Linux).

Observação

Eu prefiro a utilização o Chef, que veremos mais abaixo, na minha opinião é consideravelmente mais organizado e rápido, além de integrações maiores com ChefServer & AWS(OpsWorks).

Acessando o ambiente

Para acessar seu ambiente, execute:

Após a primeira inicialização, será automaticamente gerada uma chave privada no diretório puphpet/files/dot/ssh/id_rsa.key.

Esta chave é gerada após seu primeiro start do ambiente.

Custom files

O PuPHPet permite que você, altere alguns arquivos do seu ambiente, e as variaveis do próprio sistema operacional, por parte dos Dotfiles.

Você pode colocar arquivos personalizados para seu ambiente, como por exemplo (.bash_aliases, .vimrc, .gitconfig, etc), na pasta puphpet/files/dot/.

Durante o lançamento do ambiente vagrant up, os mesmos serão automaticamente copiados para o seu ambiente. Pode começar brincando com o .bash_aliases 🙂

Eu sempre deixo alguns atalhos para facilitar o gerenciamento do ambiente:

Scripts Personalizados

Você também pode executar o seu próprio código de personalização do ambiente, adicionando os mesmos na pasta /puphpet/exec-always (executa toda vez), e /puphpet/exec-once (apenas uma vez. Assim como as pastas de inicialização sempre e de apenas uma vez.

Vale lembrar que os arquivos são executados em ordem alfabética, tome cuidado.

Após saber isso tudo, edite o arquivo de hosts do seu computador, e adicione:

192.168.10.10 app.dev

Após salvar, abra o endereço: http://app.dev e veja o seu ambiente prontinho 🙂

Dica: Observe sempre se ao subir o seu ambiente, todos os serviços estão rodando OK, basta acessar sua maquina usando vagrant ssh, e depois: /etc/init.d/servico status e verificar se o serviço está rodando ou não.

Shell, o bom e velho

O Vagrant permite a execução do provisionamento atráves de shell script, o que é também bastante simples. Nesse modelo de configuração do Vagrant, iremos dessa vez configurar uma imagem simples Ubuntu 12.04 LTS 32-bit.

Iniciado nosso ambiente

Após essa execução, o vagrant irá fazer o download da imagem na url https://vagrantcloud.com/hashicorp/precise32/version/1/provider/virtualbox.box e importar ao seu VirtualBox.

Vagrantfile

Após isso, iremos editar o arquivo Vagrantfile e adicionar o nosso provisionamento via Shell, acrescente esse trecho após o |config|

Se o seu caso for windows, pode trocar o provision.sh por algum arquivo .bat ou .ps1.
Ou caso queira manter esse provisionamento em algum servidor, e distribuir apenas a URL, basta trocar o caminho: “tools/provision.sh” pelo endereço do provisionamento “http://url.com.br/provision.sh”

Agora, vamos criar o diretório tools e o arquivo provision.sh

Provisionamento

Agora vamos acrescentar o conteúdo do arquivo provision.sh:

Para executar essa instalação padrão dos pacotes nginx, mysql-server, php5-fpm e mongodb execute no seu prompt:

Após a execução do provisionamento, entre no seu ambiente e verifique se os serviços já estão todos rodando 🙂

Agora abra o arquivo Vagrantfile novamente, e vamos acrescentar as portas necessárias para comunicação dos serviços instalados.

Agora, basta solicitar ao vagrant para reiniciar o seu ambiente:

Agora se tudo deu certo, acesse no seu browser: http://192.168.33.100 e pronto, veja seu ambiente nginx pronto para receber sua aplicação web. Veja só:

Chef

O Vagrant possui integrações com o Vagrant Chef Solo e Chef Client, porem, nesse exemplo, um dica é gerar um arquivo inicial pelo http://rove.io que é um projeto que gera o start inicial baseado nas suas escolhas, bem prático 😀

Gere o seu pack inicial, e vamos a configuração rápida do arquivo Cheffile

Cheffile

A entrada site ‘http://community.opscode.com/api/v1’ define que usaremos as receitas fornecidas pela API do http://www.getchef.com/. e logo depois nossos livrinhos de receitas que usaremos, que é o apt, o php, o mysql, nginx mongodb e git.

Vagrantfile

Agora vamos configurar o nosso Vagrantfile:

É necessário instalar librarian-chef (Ruby), instalado.

Depois execute a instalação dos cookbooks e inicie seu ambiente

Após a conclusão do librarian-chef , basta iniciar o seu vagrant pela primeira vez, e aguardar o download da imagem do Ubuntu 12-04 fornecido no Vagrantfile:

Após isso, basta acessar seu ambiente no browser http://192.168.33.101

  • blpsilva

    Ficou maneraço, parabéns! Agora, por incrivel que pareça ainda ocorre de gente com Vagrant mimizar que “na minha máquina funciona” 🙂

  • manjarogeek

    Tutorial mto bom João! Só o descritivo do artigo q ficou diferente, vc fala q seguindo o tutorial teremos uma máquina com centOS, mas vc utiliza no tutorial o Ubuntu.
    Abs
    Bill

    • JoaoVagner

      Verdade, falha nossa! rs mas basta trocar no vagrant file, ou caso queira persistir em usar o centos, use o yum para os pacotes, as vezes os pacotes tem alguma pequena diferença de nome. Qualquer dúvida Bill, só me chamar! 😀

  • Pingback: Primeiros passos com o Puppet – Aécio Pires()

21