Minicurso de Vagrant

Preview:

DESCRIPTION

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

Citation preview

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 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: 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/

?