VAGRANT Agilizando seu ambiente de desenvolvimento Minicurso
VAGRANT
Agilizando seu ambiente de desenvolvimento
Minicurso
@leandrosnunes
Leandro Nunes http://leandronunes.com
$ for name in {vagrant,git,vim,vboxmanage} ; do which $name ; done
Pré-requisito
O QUE É NECESSÁRIO PARA INICIAR UM PROJETO?
TODOS FAZEM INSTALAÇÕES LOCAIS
FERRAMENTA PARA CONSTRUIR E DISTRIBUIR AMBIENTES DE FORMA SIMPLES
VAGRANT
Mitchell Hashimoto @mitchellh
• Inicio em 2010 • Desenvolvido em Ruby • Release 1.6.5 • HashiCorp 2012
O QUE É PRECISO PARA UTILIZAR O VAGRANT?
PROVIDER Gerenciador de Máquinas Virtuais
UMA MÁQUINA HOST Maquina para instalar o vagrant – Máquina de Desenvolvimento
VAGRANT www.vagrantup.com
PROVIDER
OU OU
DEFAULT OU
OU
Download em:
www.vagrantup.com www.virtualbox.org
Fonte: http://www.vcritical.com/
GUEST
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_API_VERSION = "2” Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = ”leandrosnunes/precise64”end
VagrantFile
$ 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
$ 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!
AS MODIFICAÇÕES SÃO REFLETIDAS EM TEMPO REAL ENTRE AS MAQUINAS HOST E GUEST
SYNCED FOLDERS
$ 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?
UMA REDE NAT É CRIADA POR DEFAULT. A REDE PRIVADA PERMITE ACESSO DE OUTROS DISPOSITIVOS NA MESMA REDE.
NETWORK
$ vagrant destroy $ cd ../ $ rm –r mini-curso-vagrant $ git clone [email protected]: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: 3000config.vm.network :forwarded_port, guest: 3306, host: 3306config.vm.post_up_message = ”Mini curso de vagrant\n 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
Postgresql Nginx 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 vagrant\n IP: 192.168.33.30" 9 end10 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 vagrant\n IP: 192.168.33.31"15 end16 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 end12 13 dev.vm.post_up_message = "Dev mini curso de vagrant\n IP: 192.168.33.30"14 end15 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 end23 24 pro.vm.post_up_message = "Prod mini curso de vagrant\n IP: 192.168.33.31"25 end26 end
TAREFAS MANUAIS NÃO PERMITEM QUALIDADE
ANSIBLE CHEF PUPPET SHELL
PROVISIONER
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
FUNCIONALIDADES EXTRAS, COMO SUPORTE A OUTROS PROVIDERS
PLUGIN
$ 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/
?