SlideShare a Scribd company logo
VAGRANT 
Agilizando seu ambiente de desenvolvimento 
Minicurso
Leandro Nunes 
http://leandronunes.com 
@leandrosnunes
Pré-requisito 
$ for name in {vagrant,git,vim,vboxmanage} ; do which $name ; done
O QUE É 
NECESSÁRIO 
PARA INICIAR UM 
PROJETO?
TODOS FAZEM 
INSTALAÇÕES 
LOCAIS
VAGRANT 
FERRAMENTA PARA 
CONSTRUIR E DISTRIBUIR 
AMBIENTES DE FORMA 
SIMPLES
Mitchell Hashimoto 
@mitchellh 
• Inicio em 2010 
• Desenvolvido em Ruby 
• Release 1.6.5 
• HashiCorp 2012
O QUE É PRECISO 
PARA UTILIZAR O 
VAGRANT?
UMA MÁQUINA HOST 
Maquina para instalar o vagrant – Máquina de Desenvolvimento 
VAGRANT 
www.vagrantup.com 
PROVIDER 
Gerenciador de Máquinas Virtuais
PROVIDER 
OU OU 
DEFAULT OU 
OU
Download em: 
www.vagrantup.com 
www.virtualbox.org
GUEST 
Fonte: http://www.vcritical.com/ 
HOST
$ vBoxManage
$ mkdir mini-curso-vagrant 
$ cd mini-curso-vagrant
$ vagrant init 
vagrant init [box-name] [box-url]
VagrantFile 
VAGRANTFILE_API_VERSION = "2” 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
config.vm.box = "base” 
end
BOX 
REPRESENTA UM 
SISTEMA 
OPERACIONAL 
INSTALADO PARA 
UM PROVIDER 
ESPECÍFICO.
BOX BASE 
vagrantbox.es 
vagrantcloud.com
$ vagrant init leandrosnunes/precise64
VagrantFile 
VAGRANTFILE_API_VERSION = "2” 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
config.vm.box = ”leandrosnunes/precise64” 
end
$ vagrant box add ADDRESS 
$ vagrant box list
$ vagrant up
Minicurso de Vagrant
VM RODANDO NO 
VIRTUALBOX
Minicurso de Vagrant
$ vagrant ssh
$ vagrant halt
$ vagrant init 
$ vagrant box 
$ vagrant up 
$ vagrant ssh 
$ vagrant halt
EFETUAR TESTES DE 
NOVAS FERRAMENTAS
$ vagrant up 
$ vagrant ssh 
$ sudo apt-get update 
$ sudo apt-get –y install postgresql 
$ sudo apt-get –y install nginx 
$ sudo apt-get –y install php 
$ sudo apt-get –y uninstall php 
$ sudo apt-get –y install ruby
$ vagrant up 
$ vagrant ssh 
$ sudo apt-get update 
$ which nginx 
$ sudo apt-get –y install nginx 
$ which nginx
$ vagrant status
$ vagrant destroy
$ vagrant up
MEU IDE 
PREFERIDO SÓ 
FUNCIONA NO 
WINDOWS!
SYNCED FOLDERS 
AS MODIFICAÇÕES 
SÃO REFLETIDAS EM 
TEMPO REAL ENTRE 
AS MAQUINAS HOST E 
GUEST
$ echo "Mini Curso de Vagrant" > hello_world.txt 
$ cat hello_world.txt 
$ vagrant ssh 
$ cd /vagrant 
$ ls 
$ cat hello_world.txt
COMO ACESSAR A 
APLICAÇÃO?
NETWORK 
UMA REDE NAT É 
CRIADA POR DEFAULT. 
A REDE PRIVADA 
PERMITE ACESSO DE 
OUTROS DISPOSITIVOS 
NA MESMA REDE.
$ vagrant destroy 
$ cd ../ 
$ rm –r mini-curso-vagrant 
$ git clone git@github.com:LeandroSNunes/mini-curso- 
vagrant.git 
$ cd mini-curso-vagrant 
$ git fetch origin step1 
$ git checkout step1 
$ git commit –am “update”
VagrantFile 
config.vm.network :private_network, ip: "192.168.33.30” 
config.vm.network :forwarded_port, guest: 3000, host: 3000 
config.vm.network :forwarded_port, guest: 3306, host: 3306 
config.vm.post_up_message = ”Mini curso de vagrantn IP: 192.168.33.30"
$ vagrant up 
$ vagrant ssh 
$ sudo apt-get update 
$ sudo apt-get –y install nginx 
$ sudo service nginx start
Acessando o nginx
$ vagrant package
AMBIENTE DE 
DESENVOLVIMENTO 
IGUAL PARA TODO 
TIME
Postgresql 
Nginx 
Puma 
Assets
Nginx Postgresql Puma 
Assets
1 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
2 config.vm.box = "leandrosnunes/precise64" 
3 
4 config.vm.define :development do |dev| 
5 dev.vm.network "private_network", ip: "192.168.33.30" 
6 dev.vm.network :forwarded_port, guest: 3306, host: 3306 # mysql 
7 
8 dev.vm.post_up_message = "Dev mini curso de vagrantn IP: 192.168.33.30" 
9 end 
10 
11 config.vm.define :production do |pro| 
12 pro.vm.network "private_network", ip: "192.168.33.31" 
13 
14 pro.vm.post_up_message = "Prod mini curso de vagrantn IP: 192.168.33.31" 
15 end 
16 end
$ vagrant up 
$ vagrant up development 
$ vagrant up production 
$ vagrant ssh 
$ vagrant ssh development 
$ vagrant ssh production
$ vagrant destroy 
$ vagrant destroy development 
$ vagrant destroy production 
$ vagrant halt 
$ vagrant halt development 
$ vagrant halt production
A APLICAÇÃO PODE 
RODAR EM AMBIENTE 
SIMILAR AO DE 
PRODUÇÃO
ACABA COM A FRASE 
“FUNCIONA NA 
MINHA MÁQUINA”
1 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
2 config.vm.box = "leandrosnunes/precise64" 
3 
4 config.vm.define :development do |dev| 
5 dev.vm.network "private_network", ip: "192.168.33.30" 
6 dev.vm.network :forwarded_port, guest: 3306, host: 3306 # mysql 
7 
8 dev.vm.provider "virtualbox" do |vb| 
9 vb.customize ["modifyvm", :id, "--memory", "1024"] 
10 vb.customize ["modifyvm", :id, "--cpus", "1"] 
11 end 
12 
13 dev.vm.post_up_message = "Dev mini curso de vagrantn IP: 192.168.33.30" 
14 end 
15 
16 config.vm.define :production do |pro| 
17 pro.vm.network "private_network", ip: "192.168.33.31" 
18 
19 pro.vm.provider "virtualbox" do |vb| 
20 vb.customize ["modifyvm", :id, "--memory", "1024"] 
21 vb.customize ["modifyvm", :id, "--cpus", "2"] 
22 end 
23 
24 pro.vm.post_up_message = "Prod mini curso de vagrantn IP: 192.168.33.31" 
25 end 
26 end
TAREFAS 
MANUAIS NÃO 
PERMITEM 
QUALIDADE
PROVISIONER 
ANSIBLE CHEF PUPPET SHELL
development 
1 dev.vm.provision :puppet do |puppet| 
2 puppet.module_path = "modules" 
3 puppet.manifest_file = "development.pp" 
4 puppet.options = "--verbose --debug" 
5 end 
production 
1 pro.vm.provision :puppet do |puppet| 
2 puppet.module_path = "modules" 
3 puppet.manifest_file = "production.pp" 
4 end
$ vagrant up development 
$ vagrant up production
$ vagrant provision
$ vagrant reload --provision
GERÊNCIA DE 
CONFIGURAÇÃO
INCENTIVO PARA 
PRÁTICAS DO 
MOVIMENTO DEVOPS
PARTICIPAR DE 
PROJETOS COM 
PECULIARIDADES 
DIFERENTES
SIMPLICIDADE PARA 
CONTRIBUIR PARA 
PROJETOS OPEN 
SOURCE
PLUGIN 
FUNCIONALIDADES 
EXTRAS, COMO 
SUPORTE A OUTROS 
PROVIDERS
$ vagrant install plugin vagrant-vbguest 
$ vagrant install vagrant-librarian-puppet
VagrantFile 
config.vm.synced_folder ".", "/vagrant", type: "nfs"
Minicurso de Vagrant
VAGRANT OPEN SOURCE 
Github: https://github.com/mitchellh/vagrant 
IRC: #vagrant 
Google Groups: vagrant-up
VAGRANT DOCS 
http://docs.vagrantup.com/v2/
?

More Related Content

Minicurso de Vagrant