Sie sind auf Seite 1von 16

Vagrant CookBook (PT-BR)

Um Guia Prtico
Erika Heidi
Esse livro est venda em http://leanpub.com/vagrantcookbook-ptbr
Essa verso foi publicada em 2014-07-07
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
2014 Erika Heidi
Tweet Sobre Esse Livro!
Por favor ajude Erika Heidi a divulgar esse livro no Twitter!
A hashtag sugerida para esse livro #vagrantcookbook.
Descubra o que as outras pessoas esto falando sobre esse livro clicando nesse link para buscar a
hashtag no Twitter:
https://twitter.com/search?q=#vagrantcookbook
Contedo
Prefcio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
O que esperar desse livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
O que esperamos de voc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Primeiros Passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Como o Vagrant funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Requerimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Atualizando o Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Vagrant - Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Seu primeiro Vagrant Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Prefcio
Eu lembro claramente a primeira vez que ouvi falar sobre o Vagrant. Incio de 2013, minha segunda
visita aos meetups do grupo de usurios AmsterdamPHP. A palestra era da amiga Michelle Sanver
(a.k.a. Geekie), sobre Open Source. Ela mostrou como era fcil se envolver e contribuir com projetos
Open Source, apenas clonando um repositrio e rodando o misterioso comando vagrant up.
Comecei a usar o Vagrant no dia seguinte.
Alguns meses depois, e no antes de enfrentar uma resistncia considervel dos meus colegas de
trabalho e do lder da equipe (eles estavam usando servidores remotos para testar as aplicaes
- upload via FTP para cada modificao), eu consegui introduzir o Vagrant na empresa em que
estava trabalhando em Amsterdam. Apesar de ter sofrido um pouco para criar o provisionamento
usando Puppet, considerando que o projeto era complexo e eu ainda no tinha quase nenhuma
experincia no assunto, essa foi uma excelente oportunidade para aprender mais sobre o Vagrant e
seus provisioners.
Depois de sair da empresa e voltar a trabalhar com meus projetos pessoais, comecei a submeter
palestras para conferncias PHP, e naturalmente Vagrant estava no topo da minha lista de assuntos
interessantes para falar sobre. Na mesma poca, conheci o LeanPub e a excelente plataforma que
eles construram para auto-publicao (self-publishing) - preciso dizer que eu realmente amo todo
tipo de servio que promove trabalhos independentes. Tambm no nenhuma novidade o fato de
que escrever uma paixo para mim desde que eu era criana. Juntando os pontos, a idia era bvia:
eu tinha que escrever um livro sobre minhas experincias com o Vagrant.
Esse livro baseado em muitos experimentos e pesquisas, escrito por uma usuria entusistica
e realmente curiosa. Tentei juntar nesse livro tudo o que voc precisa para ter uma experincia
proveitosa com o Vagrant, de uma forma totalmente prtica.
Aprecio todo tipo de feedback construtivo que possa fazer esse livro melhor - sugestes, correes,
qualquer coisa. Sinta-se vontade para me contactar no Twitter (@erikaheidi), IRC (erikaheidi, na
Freenode) ou via e-mail (erika@erikaheidi.com)
Introduo
Quantas vezes voc j ouviu a frase funciona na minha mquina ? Aposto que voc tambm j
usou essa desculpa - sim, acontece. praticamente impossvel lembrar de tudo que voc j instalou
e de todas as configuraes que voc j mexeu em sua mquina de trabalho, ento geralmente leva
algum tempo para descobrir o que deu errado na hora em que o projeto foi compartilhado com outro
colega de trabalho, ou pior, quando o projeto foi para produo.
Tambm bastante difcil lidar com mltiplos projetos quando eles requerem ambientes de
desenvolvimento diferentes - imagine que voc est trabalhando em um projeto que usa PHP 5.4,
mas em um dado momento surge a necessidade de trabalhar em um projeto legado que usa PHP 5.3.
Se voc ainda no est familiarizado com o Vagrant, esse um bom momento para conhec-
lo melhor. Vagrant proporciona um ambiente de desenvolvimento reproduzvel e porttil usando
mquinas virtuais, tudo configurado em alguns arquivos dentro do repositrio do seu projeto -
clone o repositrio, execute vagrant up e seu projeto estar rodando em um ambiente especialmente
criado para ele, com todas as dependncias necessrias, em alguns minutos. Voc nunca ser refm
da desculpa funciona na minha mquina novamente - o ambiente exatamente o mesmo para
todos os desenvolvedores envolvidos no projeto, independente do sistema operacional rodando por
trs do Vagrant.
Vagrant para projetos privados
Com Vagrant, voc pode ter um fluxo de trabalho muito mais fcil quando trabalhando em um
time; garantir o mesmo ambiente de desenvolvimento e testes para todos os colaboradores ir evitar
muitos problemas e tornar o processo de desenvolvimento mais consistente e confivel.
Vagrant para projetos Open Source
Vagrant possibilita que mais desenvolvedores possam contribuir com o seu projeto Open Source
- ter o projeto rodando localmente na sua mquina to fcil quanto clonar um repositrio e
rodar vagrant up. No apenas setando o ambiente de desenvolvimento correto, mas tambm
automatizando processos como instalar um banco de dados, clonar repositrios, adicionar dados
no banco e at rodar testes.
http://docs.vagrantup.com/v2/
Introduo 2
Vagrant para devops / administradores de sistema
Se voc trabalha com administrao de sistemas, Vagrant a ferramenta ideal para os seus testes.
Ele suporta as ferramentas de automao mais populares do mercado - Puppet, Ansible, Chef,
dentre outras. Faa experimentos com diversos setups, construa uma infraestrutura com mltiplos
servidores e garanta que tudo est funcionando como voc esperava, localmente, antes de lidar com
servidores reais.
O que esperar desse livro
Vagrant Cookbook foi idealizado para ser um livro bastante prtico, cobrindo Vagrant desde os
requerimentos e instalao at conceitos mais avanados, como o uso de mltiplas mquinas virtuais
e criao de servidores reais em servios como Digital Ocean e Amazon AWS. Voc ter a
oportunidade de conhecer, testar e comparar os provisioners mais usados da atualidade - Puppet,
Chef e Ansible.
Esse livro tambm ir cobrir algumas dicas importantes para criar projetos Vagrant otimizados; no
final voc ter um captulo com receitas para as tarefas mais comuns de um provisionador, como
instalar pacotes, usar templates, executar comandos, dentre outras.
Vagrant Cookbook destinado a usurios iniciantes e intermedirios, tambm servindo como um
guia rpido para os provisionadores Ansible, Puppet e Chef.
O que esperamos de voc
Esse livro assume que voc um desenvolvedor com alguma experincia em linha de comando, e
voc sabe como instalar e configurar um servidor Linux - voc precisa entender o problema antes de
ser capaz de automatizar a soluo, certo? As ferramentas que iremos ver nesse livro requerem um
conhecimento bsico de programao, j que elas trabalham conceitos como variveis, condicionais
e laos.
Vagrant Cookbook um livro sobre Vagrant, para pessoas que se sentem confortveis o bastante com
programao e tambm com tarefas administrativas, como configurar um servidor Web no Linux.
Os exemplos mostrados nesse livro tero como alvo a criao de servidores PHP, apenas como uma
maneira de mostrar exemplos prticos e realistas; voc no precisa ser um desenvolvedor PHP (e
voc no precisa gostar de PHP) para aproveitar bem o contedo desse livro.
Primeiros Passos
Este captulo cobre o bsico - terminologia, instalao e uso geral do Vagrant - incluindo como
inicializar a sua primeira mquina virtual.
Como o Vagrant funciona
Vagrant controla o processo de criar uma mquina virtual baseada em suas definies, usando
ferramentas de automao como Ansible e Puppet para provisionar a customizao da mquina
virtual - instalar pacotes, obter informaes, executar tarefas etc.
Rodando um simples vagrant up, uma mquina virtual ser preparada de acordo com o que foi
definido no projeto, e em alguns minutos o seu projeto estar rodando (por exemplo, uma aplicao
Web), acessvel atravs da sua rede local. Voc pode logar na mquina usando ssh e fazer o que
quiser, ela ser exatamente igual a uma mquina de verdade.
Tambm possvel usar o Vagrant para fazer deploy de servidores em servios como AWS e Digital
Ocean. Ns falaremos sobre isso no captulo Tpicos Avanados.
Terminologia
Antes de avanarmos, importante conhecer os termos mais comuns usados com o Vagrant.
Box
Uma box (caixa) basicamente um pacote que representa um sistema operacional instalado (e
alguns pacotes bsicos), para um provedor especfico. O Vagrant ir replicar essa imagem para a
sua mquina virtual. Ao definir um projeto, voc escolhe qual box ser a base do seu ambiente de
desenvolvimento. Na primeira vez que voc rodar o Vagrant com uma box nova, ele ir fazer o
download da box e import-la para o seu sistema.
Host e Guest
A mquina / sistema operacional Host onde o Vagrant est instalado. A mquina Guest, como
voc pode deduzir, a mquina virtual inicializada pela Host.
Primeiros Passos 4
Provedores
De uma maneira geral, o provedor (provider) o software de virtualizao responsvel por criar as
mquinas virtuais que o Vagrant administra. Porm, Vagrant no trabalha apenas com mquinas
virtuais; alguns provedores especficos utilizam outros mtodos para criao do seu ambiente, como
no caso do Docker, que utiliza containers. Para simplificar as definies contidas no livro, vamos usar
o termo mquina virtual ou VM (virtual machine, termo original do ingls) para nos referirmos
ao ambiente de desenvolvimento gerado pelo provedor, independentemente do tipo de provedor
referenciado.
VirtualBox o provedor padro do Vagrant, mas voc tambm pode usar VMWare, KVM, dentre
outros. Para usar outros provedores, normalmente preciso instalar um plugin.
Plugins
Um plugin pode adicionar funcionalidades extras ao Vagrant, como suporte a outros provedores, por
exemplo.
Provisionadores
Um provisionador (provisioner) ir automatizar o processo de instalao e configurao do seu
ambiente, instalando pacotes e executando tarefas em geral. No obrigatrio usar um provisi-
onador, mas tambm no faz muito sentido usar o Vagrant sem um - voc teria que logar na
mquina e instalar o seu ambiente manualmente, da mesma maneira que fazia antigamente (ou
voc poderia simplesmente usar o VirtualBox sozinho). O Vagrant suporta vrios provisionadores
diferentes, do mais bsico Shell at ferramentas complexas de automao como Chef. Iremos falar
mais detalhadamente sobre provisionadores em breve.
Vagrantfile
O Vagrantfile o arquivo de configurao do Vagrant, que conter todas as definies da sua
mquina virtual. Normalmente ele fica localizado na raiz do seu projeto. Teremos um captulo
dedicado ao Vagrantfile e suas opes de configurao.
Diretrios Sincronizados
Os diretrios sincronizados (synced folders) so usados para compartilhar contedo entre a mquina
Host e a mquina Guest. Dessa maneira, podemos continuar usando nossa IDE favorita, na mquina
Host, para editar os arquivos da aplicao, enquanto usamos a mquina Guest apenas para rodar e
testar a aplicao. As modificaes so refletidas em tempo real porque o contedo do diretrio
compartilhado entre as mquinas. A sincronizao em tempo real tem um custo em performance,
iremos falar sobre isso em um captulo posterior.
Primeiros Passos 5
Requerimentos
Para provisionar sua mquina virtual, o Vagrant precisa de um software de virtualizao, como
VirtualBox ou VMWare. O VirtualBox o padro, por ser gratuito e open source. Iremos trabalhar
com o VirtualBox nesse livro. Voc precisar ter ambos (Vagrant e VirtualBox) instalados na sua
mquina.
Tanto o Vagrant quanto o VirtualBox esto disponveis para os principais sistemas operacionais
(Linux, OSX e Windows). Algumas funcionalidades, porm, podem no estar presentes por padro
em alguns sistemas e podem requerer a instalao de pacotes adicionais - como por exemplo o NFS
(network file system) que usado com os diretrios sincronizados - para usar essa funcionalidade
no Linux, voc precisa instalar o nfsd, que j vem instalado por padro no OSX (e no suportado
pelo Windows).
Instalao
Para iniciar, a primeira coisa que voc deve fazer instalar o Vagrant e o VirtualBox. O ideal
obter os pacotes diretamente de suas pginas oficiais, j que gerenciadores de pacotes como o apt
no Ubuntu provavelmente tero verses antigas desses softwares, o que pode levar a problemas
de incompatibilidade. Verifique a pgina de downloads do Vagrant e a pgina de downloads do
VirtualBox, seguindo as instrues de instalao para o seu sistema operacional, para ambos os
softwares.
Obtendo a verso certa do VirtualBox
recomendado que voc verifique a documentao do Vagrant para checar qual verso
do VirtualBox atualmente compatvel. Normalmente voc no ter problemas baixando
as verses mais recentes de ambos, mas em alguns casos, quando o VirtualBox lana uma
nova verso, incompatibilidades podem acontecer.
Atualizando o Vagrant
OVagrant sempre procura manter compatibilidade comsuas verses anteriores, de maneira que voc
no ter problemas ao atualizar para verses mais recentes. recomendado que voc mantenha a
sua verso do Vagrant sempre atualizada, pois os updates costumam trazer importantes correes e
novos recursos.
http://www.vagrantup.com/downloads.html
https://www.virtualbox.org/wiki/Downloads
http://docs.vagrantup.com/v2/virtualbox/index.html
Primeiros Passos 6
Verificando se a sua verso est atualizada (1.6+)
A partir da verso 1.6, voc pode verificar facilmente se a sua verso instalada a mais recente, com
o novo comando version. Basta executar:
$ vagrant version
Se a sua verso estiver atualizada, voc ver um output similar a este:
Installed Version: 1.6.1
Latest Version: 1.6.1
You're running an up-to-date version of Vagrant!
Se a sua verso instalada no for a mais recente, a sada do comando ir inform-lo qual a verso
mais atual para download:
Installed Version: 1.6.1
Latest Version: 1.6.3
To upgrade to the latest version, visit the downloads page and
download and install the latest version of Vagrant from the URL
below:
http://www.vagrantup.com/downloads.html
If you're curious what changed in the latest release, view the
CHANGELOG below:
https://github.com/mitchellh/vagrant/blob/v1.6.3/CHANGELOG.md
Vagrant - Comandos
Essa uma referncia rpida para os principais comandos do Vagrant:
Primeiros Passos 7
comando descrio uso comum
up Inicializa a mquina virtual e roda o(s)
provisionador(es)
Quando a mquina no est rodando ainda
reload Reinicia a mquina virtual Quando voc faz modificaes no
Vagrantfile
provision Roda apenas o(s) provisionador(es) Quando voc faz modificaes no
provisionamento
init Cria um novo Vagrantfile baseado em uma
box
Quando voc quer gerar um Vagrantfile
halt Desliga a mquina virtual Quando voc quer desligar a VM
destroy Destri a mquina virtual Quando voc quer comear do zero
suspend Suspende a execuo da mquina virtual Quando voc quer salvar o estado da VM
resume Retoma a execuo da mquina virtual Quando voc quer retomar a execuo de
uma mquina virtual que foi suspensa
anteriormente
ssh Faz login via SSH (no pede senha ou login) Quando voc quer fazer modificaes
manuais ou debugar
Status e Controle Global (Vagrant 1.6+)
A partir da verso 1.6, Vagrant permite que voc verifique quais ambientes foram criados e esto
ativos no momento, e voc tambm pode controlar esses ambientes diretamente a partir de qualquer
diretrio na sua mquina. Antes da verso 1.6, era bastante difcil saber quantas e quais VMs estavam
ativas em um dado momento, e para controlar um ambiente voc teria de acessar o diretrio onde o
ambiente foi criado pela primeira vez (onde o Vagrantfile daquele ambiente est localizado).
Para listar todos os ambientes Vagrant que esto ativos, use:
$ vagrant global-status
Se voc tiver um ou mais ambientes Vagrant rodando (isso inclui mquinas que foram suspensas ou
desligadas), voc ver um output similar a este:
Primeiros Passos 8
id name provider state directory
---------------------------------------------------------
037588f default virtualbox running /projects/project1
f47c729 default virtualbox poweroff /projects/project2
Como voc pode ver, o primeiro ambiente est com o status running (rodando), enquanto o
segundo ambiente est com o status poweroff (desligado).
Agora, por exemplo, se voc quiser suspender um dos ambientes, voc s precisa adicionar o id
daquele ambiente no final do comando:
$ vagrant suspend f47c729
A mesma abordagem vlida para os outros comandos do Vagrant - voc s precisa adicionar o id
do ambiente, obtido atravs do comando global-status.
Nota: uma VM que foi apenas suspensa ser listada com o estado running. Apenas
ambientes que foram realmente desligados (com vagrant halt) sero listados como
poweroff.
Ostatus e controle global funcionar apenas comambientes que foramcriados comverses
a partir da 1.6. Se voc tem um ambiente j criado (suspenso ou desligado) com verses
anteriores, voc precisar destru-lo com vagrant destroy e cri-lo novamente, para que
ele seja listado pelo global-status.
Seu primeiro Vagrant Up
Vamos inicializar nossa primeira mquina virtual usando o Vagrant. A primeira coisa que iremos
precisar de um Vagrantfile. Voc pode criar esse arquivo manualmente, mas voc tambm pode
fazer com que o Vagrant gere um Vagrantfile automaticamente para voc, baseado na box que voc
deseja usar. Para iniciarmos, vamos usar o Vagrantfile gerado automaticamente. No se preocupe
muito com isso agora, pois no prximo captulo iremos estudar o Vagrantfile e suas opes de
configurao mais comuns.
Primeiramente, crie uma pasta para comearmos nossos testes. Atravs da linha de comando, acesse
essa pasta e execute:
Vagrant 1.5+
Primeiros Passos 9
$ vagrant init hashicorp/precise64
Esse comando ir apenas criar um Vagrantfile padro, setando uma nica opo:
config.vm.box = "hashicorp/precise64"
A opo config.vm.box definir qual box seu ambiente virtual ir usar. Com as verses mais
recentes do Vagrant, a partir da 1.5, essa opo normalmente contm um identificador para uma box
hospedada na Vagrant Cloud. Vagrant Cloud umnovo recurso lanado coma verso 1.5 - umlocal
centralizado para descobrir e compartilhar boxes para o Vagrant, provendo tambm versionamento
das boxes.
Vagrant < 1.5
Para verses anteriores do Vagrant (menores que 1.5), sem suporte Vagrant Cloud, normalmente
precisamos tambm prover a URL da box que queremos usar - apenas dessa maneira o Vagrant
saber de onde fazer o download da box. Para inicializar um Vagrantfile bsico usando a mesma
box do exemplo anterior (Ubuntu 12.04 64 bits) voc deve usar:
$ vagrant init precise64 http://files.vagrantup.com/precise64.box
O comando acima criar um Vagrantfile com as seguintes opes:
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
Rodando sua nova VM
Agora que temos um Vagrantfile, hora de iniciarmos nossa mquina virtual. Na linha de comando,
no mesmo diretrio, execute:
$ vagrant up
O processo de baixar e importar a box feito automaticamente quando voc inicializa a mquina
virtual. Na primeira vez que voc roda o Vagrant com uma box nova, ela ser baixada e importada
para o seu sistema - o processo pode levar vrios minutos, dependendo da sua internet. Depois de
baixar e importar a box, a mquina ser inicializada e voc ver um output como este:
https://vagrantcloud.com
Primeiros Passos 10
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and\
install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise64'
default: URL: https://vagrantcloud.com/hashicorp/precise64
==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/hashicorp/precise64/version/2/\
provider/virtualbox.box
==> default: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbo\
x'!
==> default: Importing base box 'hashicorp/precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Setting the name of the VM: vagrant-lab_default_1394635286089_95645
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you \
see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.2.0
default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
default: /vagrant => /media/export/Projects/vagrant-lab
Ta-Da! Sua primeira mquina virtual Vagrant est rodando. Agora, faa login usando:
Primeiros Passos 11
$ vagrant ssh
Voc perceber que se trata de uma mquina Ubuntu como qualquer outra, conectada internet
(desde que a sua mquina Host esteja conectada tambm), tudo funcional. Se voc executar um
ls /vagrant, ir perceber que, por padro, o diretrio atual (onde o Vagrantfile est presente, na
mquina Host) compartilhado entre as mquinas Host e Guest, ento qualquer arquivo colocado
dentro dessa pasta estar acessvel dentro da mquina virtual, na pasta /vagrant.
No prximo captulo, veremos como customizar melhor o Vagrantfile e como iniciar com o uso
dos provisionadores, automatizando tarefas que sero executadas logo depois que a mquina
inicializada pelo Vagrant.

Das könnte Ihnen auch gefallen