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 
Gere...
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”...
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 = ”leand...
$ vagrant box add ADDRESS 
$ vagrant box list
$ vagrant up
VM RODANDO NO 
VIRTUALBOX
$ 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 ...
$ 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_w...
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...
VagrantFile 
config.vm.network :private_network, ip: "192.168.33.30” 
config.vm.network :forwarded_port, guest: 3000, host...
$ 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.defi...
$ vagrant up 
$ vagrant up development 
$ vagrant up production 
$ vagrant ssh 
$ vagrant ssh development 
$ vagrant ssh p...
$ vagrant destroy 
$ vagrant destroy development 
$ vagrant destroy production 
$ vagrant halt 
$ vagrant halt development...
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.defi...
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 = "developme...
$ 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"
VAGRANT OPEN SOURCE 
Github: https://github.com/mitchellh/vagrant 
IRC: #vagrant 
Google Groups: vagrant-up
VAGRANT DOCS 
http://docs.vagrantup.com/v2/
?
Minicurso de Vagrant
Minicurso de Vagrant
Minicurso de Vagrant
Próximos SlideShares
Carregando em…5
×

Minicurso de Vagrant

679 visualizações

Publicada em

Minicurso de Vagrant ministrado na 4ª Semana de Ciência da Computação e Tecnologia da Informação (SCTI 2014) - Campos - RJ - Link dos arquivos: https://github.com/LeandroSNunes/mini-curso-vagrant

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
679
No SlideShare
0
A partir de incorporações
0
Número de incorporações
48
Ações
Compartilhamentos
0
Downloads
24
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Minicurso de Vagrant

  1. 1. VAGRANT Agilizando seu ambiente de desenvolvimento Minicurso
  2. 2. Leandro Nunes http://leandronunes.com @leandrosnunes
  3. 3. Pré-requisito $ for name in {vagrant,git,vim,vboxmanage} ; do which $name ; done
  4. 4. O QUE É NECESSÁRIO PARA INICIAR UM PROJETO?
  5. 5. TODOS FAZEM INSTALAÇÕES LOCAIS
  6. 6. VAGRANT FERRAMENTA PARA CONSTRUIR E DISTRIBUIR AMBIENTES DE FORMA SIMPLES
  7. 7. Mitchell Hashimoto @mitchellh • Inicio em 2010 • Desenvolvido em Ruby • Release 1.6.5 • HashiCorp 2012
  8. 8. O QUE É PRECISO PARA UTILIZAR O VAGRANT?
  9. 9. UMA MÁQUINA HOST Maquina para instalar o vagrant – Máquina de Desenvolvimento VAGRANT www.vagrantup.com PROVIDER Gerenciador de Máquinas Virtuais
  10. 10. PROVIDER OU OU DEFAULT OU OU
  11. 11. Download em: www.vagrantup.com www.virtualbox.org
  12. 12. GUEST Fonte: http://www.vcritical.com/ HOST
  13. 13. $ vBoxManage
  14. 14. $ mkdir mini-curso-vagrant $ cd mini-curso-vagrant
  15. 15. $ vagrant init vagrant init [box-name] [box-url]
  16. 16. VagrantFile VAGRANTFILE_API_VERSION = "2” Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "base” end
  17. 17. BOX REPRESENTA UM SISTEMA OPERACIONAL INSTALADO PARA UM PROVIDER ESPECÍFICO.
  18. 18. BOX BASE vagrantbox.es vagrantcloud.com
  19. 19. $ vagrant init leandrosnunes/precise64
  20. 20. VagrantFile VAGRANTFILE_API_VERSION = "2” Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = ”leandrosnunes/precise64” end
  21. 21. $ vagrant box add ADDRESS $ vagrant box list
  22. 22. $ vagrant up
  23. 23. VM RODANDO NO VIRTUALBOX
  24. 24. $ vagrant ssh
  25. 25. $ vagrant halt
  26. 26. $ vagrant init $ vagrant box $ vagrant up $ vagrant ssh $ vagrant halt
  27. 27. EFETUAR TESTES DE NOVAS FERRAMENTAS
  28. 28. $ 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
  29. 29. $ vagrant up $ vagrant ssh $ sudo apt-get update $ which nginx $ sudo apt-get –y install nginx $ which nginx
  30. 30. $ vagrant status
  31. 31. $ vagrant destroy
  32. 32. $ vagrant up
  33. 33. MEU IDE PREFERIDO SÓ FUNCIONA NO WINDOWS!
  34. 34. SYNCED FOLDERS AS MODIFICAÇÕES SÃO REFLETIDAS EM TEMPO REAL ENTRE AS MAQUINAS HOST E GUEST
  35. 35. $ echo "Mini Curso de Vagrant" > hello_world.txt $ cat hello_world.txt $ vagrant ssh $ cd /vagrant $ ls $ cat hello_world.txt
  36. 36. COMO ACESSAR A APLICAÇÃO?
  37. 37. NETWORK UMA REDE NAT É CRIADA POR DEFAULT. A REDE PRIVADA PERMITE ACESSO DE OUTROS DISPOSITIVOS NA MESMA REDE.
  38. 38. $ 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”
  39. 39. 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"
  40. 40. $ vagrant up $ vagrant ssh $ sudo apt-get update $ sudo apt-get –y install nginx $ sudo service nginx start
  41. 41. Acessando o nginx
  42. 42. $ vagrant package
  43. 43. AMBIENTE DE DESENVOLVIMENTO IGUAL PARA TODO TIME
  44. 44. Postgresql Nginx Puma Assets
  45. 45. Nginx Postgresql Puma Assets
  46. 46. 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
  47. 47. $ vagrant up $ vagrant up development $ vagrant up production $ vagrant ssh $ vagrant ssh development $ vagrant ssh production
  48. 48. $ vagrant destroy $ vagrant destroy development $ vagrant destroy production $ vagrant halt $ vagrant halt development $ vagrant halt production
  49. 49. A APLICAÇÃO PODE RODAR EM AMBIENTE SIMILAR AO DE PRODUÇÃO
  50. 50. ACABA COM A FRASE “FUNCIONA NA MINHA MÁQUINA”
  51. 51. 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
  52. 52. TAREFAS MANUAIS NÃO PERMITEM QUALIDADE
  53. 53. PROVISIONER ANSIBLE CHEF PUPPET SHELL
  54. 54. 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
  55. 55. $ vagrant up development $ vagrant up production
  56. 56. $ vagrant provision
  57. 57. $ vagrant reload --provision
  58. 58. GERÊNCIA DE CONFIGURAÇÃO
  59. 59. INCENTIVO PARA PRÁTICAS DO MOVIMENTO DEVOPS
  60. 60. PARTICIPAR DE PROJETOS COM PECULIARIDADES DIFERENTES
  61. 61. SIMPLICIDADE PARA CONTRIBUIR PARA PROJETOS OPEN SOURCE
  62. 62. PLUGIN FUNCIONALIDADES EXTRAS, COMO SUPORTE A OUTROS PROVIDERS
  63. 63. $ vagrant install plugin vagrant-vbguest $ vagrant install vagrant-librarian-puppet
  64. 64. VagrantFile config.vm.synced_folder ".", "/vagrant", type: "nfs"
  65. 65. VAGRANT OPEN SOURCE Github: https://github.com/mitchellh/vagrant IRC: #vagrant Google Groups: vagrant-up
  66. 66. VAGRANT DOCS http://docs.vagrantup.com/v2/
  67. 67. ?

×