O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Create your very own Development Environment with Vagrant and Packer

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Create your very own Development
Environment with Vagrant and Packer
… and a little bit of Puppet
Frank Stelzer https://ww...
Créateur de
Agenda
• Motivation
• Vagrant Introduction
• Base Boxes
• Creating an own Base Box with Packer
• Demo
• Fat vs...
Créateur de
Vagrant
Puppet
Packer
Agenda
Sorry, nothing about Docker in this talk!

Vídeos do YouTube não são mais aceitos pelo SlideShare

Visualizar original no YouTube

Carregando em…3
×

Confira estes a seguir

1 de 68 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Anúncio

Semelhante a Create your very own Development Environment with Vagrant and Packer (20)

Mais recentes (20)

Anúncio

Create your very own Development Environment with Vagrant and Packer

  1. 1. Create your very own Development Environment with Vagrant and Packer … and a little bit of Puppet Frank Stelzer https://www.flickr.com/photos/eiriknewth/238681391
  2. 2. Créateur de Agenda • Motivation • Vagrant Introduction • Base Boxes • Creating an own Base Box with Packer • Demo • Fat vs. Thin Boxes • Provisioning with Puppet
  3. 3. Créateur de Vagrant Puppet Packer Agenda Sorry, nothing about Docker in this talk!
  4. 4. Créateur de Who's speaking? Frank Stelzer Software Architect at SensioLabs Deutschland GmbH @frastel
  5. 5. Créateur de Motivation http://www.flickr.com/photos/mrmoaks/8199740598/
  6. 6. Créateur de Development Environments
  7. 7. Créateur de I don't know my dev env, it's just working!
  8. 8. Créateur de Development Environments Shared Development Server XAMPP/MAMP Vagrant Golden Image some undefined VM/local system Vagrant with Provisioning
  9. 9. Créateur de Criteria for good development environments • Isolated
  10. 10. Créateur de Development Environments Shared Development Server XAMPP/MAMP Vagrant Golden Image some undefined VM/local system Vagrant with Provisioning
  11. 11. Créateur de Criteria for good development environments • Isolated • Same tools for production
  12. 12. Créateur de Development Environments XAMPP/MAMP Vagrant Golden Image some undefined VM/local system Vagrant with Provisioning
  13. 13. Créateur de Criteria for good development environments • Isolated • Same tools for production • Reproducible
  14. 14. Créateur de Development Environments Vagrant Golden Image some undefined VM/local system Vagrant with Provisioning
  15. 15. Créateur de Criteria for good development environments • Isolated • Same tools for production • Reproducible • EASY!
  16. 16. Créateur de Development Environments Golden Image Vagrant with Provisioning
  17. 17. Créateur de VAGRANT http://www.hashicorp.com/ http://www.vagrantup.com/
  18. 18. Créateur de Vagrant VirtualBox VM
 ! dev.smoov.io Vagrant Vagrantfile
 
 "name = dev.smoov.io" project $ vagrant up Base Box 21
  19. 19. Créateur de ! Vagrantfile Vagrant.configure("2") do |config| ! config.vm.box = "precise64" config.vm.network "private_network", ip: "192.168.56.10" config.vm.hostname = "dev.smoov.io" ! config.vm.provider :virtualbox do |virtualbox| virtualbox.customize ["modifyvm", :id, "--name", "dev.smoov.io"] virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] virtualbox.customize ["modifyvm", :id, "--memory", "1024"] end ! config.ssh.keep_alive = true config.ssh.forward_agent = true ! end assign provider specific configs keep this in mind!
  20. 20. Créateur de vagrant destroy is your friend!
  21. 21. Créateur de Available Base Boxes • Ubuntu Lucid 32 Bit (10.04) • Ubuntu Lucid 64 Bit (10.04) • Ubuntu Precise 32 Bit (12.04) • Ubuntu Precise 64 Bit (12.04) • https://github.com/mitchellh/vagrant/wiki/Available-Vagrant- Boxes • https://cloud-images.ubuntu.com/vagrant/ • other inofficial userland boxes: vagrantboxes.es, puphpet.com … What is in there!?
  22. 22. Créateur de Native supported base boxes are not up- to-date in the most cases PHP 5.3 nginx 0.9 Apache 1 not node compatible http://www.flickr.com/photos/yoshimov/13909857/ PPAs :(
  23. 23. Créateur de Can I haz the new things please? PHP 5.5.9 nginx 1.6 Apache 2 node! http://www.flickr.com/photos/chaosandcreations/2325239486/ PPAs not needed
  24. 24. Créateur de Can I? Pleeeease!
  25. 25. Créateur de Sure!
  26. 26. Créateur de Wait until new base boxes will be supported! http://www.flickr.com/photos/bogenfreund/556656621/
  27. 27. Créateur de Not really!
  28. 28. Créateur de Just build your own base box if you need to!
  29. 29. Créateur de … and that's now!
  30. 30. Créateur de Packer! http://www.hashicorp.com/ http://www.packer.io/
  31. 31. Créateur de Follow @mitchellh for updates!
  32. 32. Créateur de ! Base Box defined with simple JSON configuration        "builders":  [                  {                          "guest_os_type":  "Ubuntu_64",                          "iso_url":  "http://releases.ubuntu.com/14.04/ubuntu-­‐14.04-­‐server-­‐amd64.iso",                          "shutdown_command":  "echo  'vagrant'  |  sudo  -­‐S  shutdown  -­‐P  now",                          "type":  "virtualbox-­‐iso"                  }          ],          "post-­‐processors":  [                  {                          "only":  ["virtualbox-­‐iso"],                          "type":  "vagrant",                          "output":  "build/packer_ubuntu-­‐14.04_{{.Provider}}.box"
  33. 33. Créateur de Provisioning - with plain shell scripts "provisioners":  [          {  […]                    "script":  "scripts/install.sh",                  "type":  "shell"          […]  }   ] # scripts/install.sh apt-get -y update apt-get -y -q install linux-headers-$(uname -r) build-essential dkms nfs-common ! # ... install VBoxGuestAdditions, prepare Vagrant user etc. ! # install everything for Puppet3+Hiera apt-get install -y puppet
  34. 34. Créateur de Provisioning - with Puppet "provisioners":  [          {  […]                    "type":  "puppet-­‐masterless",                  "manifest_file":  "puppet/manifests/lamp.pp",                  "module_paths":  ["puppet/modules"]          […]  }   ] • Provisioning types could be mixed • Puppet has to be installed within Shell Provisioning first
  35. 35. Créateur de Resulting VM could be converted to a Vagrant box or whatever "builders":  […],   "post-­‐processors":  [          {                  "only":  ["virtualbox-­‐iso"],                  "type":  "vagrant",                  "output":  "buildpacker_ubuntu-­‐14.04_{{.Provider}}.box"          }   ]
  36. 36. Créateur de … and it comes with cool magic!
  37. 37. Créateur de "builders": [ { "boot_command": [ "<esc><esc><enter><wait>", "/install/vmlinuz noapic preseed/url=http:// {{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg <wait>", "debian-installer=en_US auto locale=en_US kbd- chooser/method=us <wait>", "hostname={{ .Name }} <wait>", "fb=false debconf/frontend=noninteractive <wait>", "keyboard-configuration/modelcode=SKIP keyboard- configuration/layout=USA keyboard-configuration/variant=USA console-setup/ask_detect=false <wait>", "initrd=/install/initrd.gz -- <enter><wait>" ],
  38. 38. Créateur de Demo: 
 Generating a Base Box for Vagrant with Packer in 3min
  39. 39. Créateur de http://youtu.be/wgt9jUyuXVI
  40. 40. Créateur de Base Box is generated! What's next?
  41. 41. Créateur de Integrate it to your Vagrant setup! vagrant  box  add  packer_ubuntu-­‐14.04_virtualbox  file://…
  42. 42. Créateur de ! Vagrantfile Vagrant.configure("2") do |config| ! config.vm.box = config.vm.network "private_network", ip: "192.168.56.10" config.vm.hostname = "dev.smoov.io" ! config.vm.provider :virtualbox do |virtualbox| virtualbox.customize ["modifyvm", :id, "--name", "dev.smoov.io"] virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] virtualbox.customize ["modifyvm", :id, "--memory", "1024"] end ! config.ssh.keep_alive = true config.ssh.forward_agent = true ! end "precise64""packer_ubuntu-14.04_virtualbox"
  43. 43. Créateur de Packer + Vagrant VirtualBox VM
 ! dev.smoov.io Vagrant Base BoxVagrantfile
 
 "name = dev.smoov.io" project $ Packer Base BoxVM 1 2 3 vagrant up
  44. 44. Créateur de What to put in Base Boxes?
  45. 45. Créateur de Everything?
  46. 46. Créateur de Fat Base Box Fat Base Box
 
 included:
 PHP 5
 MySQL
 Redis
 nginx
  47. 47. Créateur de Fat Base Box • advantages: • vagrant up -> ultrafast • no internet connection needed during VM creation • disadvantages: • out-of-date very fast • heavy maintenance needed • one fat base box for every server type (webserver, database server, search server etc.) • … or do you want PHP to be installed on a DB node?
  48. 48. Créateur de Fat vs. Slim Base Box Fat Base Box
 
 ISO
 VBoxGuestAdditions
 
 PHP 5
 MySQL
 Redis
 nginx Slim Base Box
 
 ISO
 VBoxGuestAdditions 
 + Provisioning (Puppet)
  49. 49. Créateur de Choose wisely according to your needs!
  50. 50. Créateur de … but …
  51. 51. Créateur de Slim Base Boxes should be preferred when infrastructure changes often!
  52. 52. Créateur de Usage Fat Base Box
 ! • no changes • System is well known • Golden Image way • Admins are defining the system Slim Base Box • frequent changes • System is not yet defined • Developers are defining the system
  53. 53. Créateur de Slim Base Boxes need additional provisioning after Virtual Machine has been installed!
  54. 54. Créateur de Provisioning with Puppet VM Box
 ! dev.smoov.io Vagrant Base BoxVagrantfile
 
 "name = dev.smoov.io" project $ Packer Base BoxVM 1 2 4Puppet 3 vagrant up
  55. 55. Créateur de Vagrantfile Vagrant.configure(VAGRANTFILE_API_VERSION)  do  |config|      config.vm.box  =  "packer_ubuntu-­‐14.04_virtualbox"            #  …   !    config.vm.provision  :puppet  do  |puppet|          puppet.manifest_file  =  "lamp.pp"          puppet.manifests_path  =  "puppet/manifests"          puppet.module_path  =  "puppet/modules"          puppet.options  =  ["-­‐-­‐verbose"]      end   end   our generated Base Box from Packer Provisioning with Puppet
  56. 56. Créateur de Why Puppet?
  57. 57. Créateur de Why Not?
  58. 58. Créateur de Go for Chef or Ansible if you want!
  59. 59. Créateur de Puppet <3
  60. 60. Créateur de Puppet (2) - DSL Overview Variables Conditionals Facts Modules Classes Templates Defined Types
  61. 61. Créateur de Puppet – DSL - Modules puppet/ |-- manifests | `-- lamp.pp `-- modules |-- apache2 | |-- files | | `-- staticfile.conf | |-- manifests | | |-- init.pp | | |-- mod.pp | | `-- vhost.pp | `-- templates | `-- vhost.erb |-- composer | `-- manifests | `-- init.pp puppet/ |… `-- modules |… `-- php5 `-- manifests `-- init.pp
  62. 62. Créateur de Puppet DSL - Class Definition:   class  composer(      $dir    =  '/usr/local/bin'   )  {      exec  {  'composer_install':          name        =>  'curl  -­‐s  getcomposer.org/installer  |  php',          cwd          =>  $dir,          creates  =>  '/usr/local/bin/composer.phar',          path        =>  '/usr/bin'      }      #  ...   } Usage:   class  {  'composer':      dir  =>  $composer_dir   }
  63. 63. Créateur de Puppet DSL - Defined Type Definition:   define  apache2::vhost(          $server_name      =  $name,          $priority            =  '50',          $document_root  =  '/var/www',          $index_file        =  'index.php',          $service              =  apache2:params:service   )  {      #  ...   }   Usage:   apache2::vhost  {  'dev.smoov.io':      priority            =>  20,      document_root  =>  '/var/www/smoovio/web',      index_file        =>  'app_dev.php'   }  
  64. 64. Créateur de Puppet DSL - Manifest #  manifests/dev.pp      #  ...      class  {  'apache2':  }      -­‐>      apache2::vhost  {  'dev.smoov.io':          priority            =>  20,          document_root  =>  '/var/www/smoovio/web',          index_file        =>  'app_dev.php'      }      -­‐>class  {  'php5':  }
    -­‐>class  {  'composer':  }      #  ...  
  65. 65. Créateur de Infrastructure as Code
  66. 66. Créateur de To sum up • with Vagrant you can create Virtual Machines bases on Base Boxes very easy • Packer adds the possibility to create your own Base Box for those VMs • It's up to you if you create a Fat or a Thin Base Box • After creation a Virtual Machine could be provisioned with Puppet (or place your preferred provisioning tool here)
  67. 67. Créateur de Need more Information or Help!? http://sensiolabs.de/workshops/vagrant/ packer build <your own base box>.json … now! Frank Stelzer
 @frastel

×