Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vagrant

Betabeers
September 20, 2012
230

 Vagrant

@danielvigueras

Betabeers

September 20, 2012
Tweet

Transcript

  1. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    ESCENARIO 1 Desarrollador de varios proyectos con diferentes entornos conflictivos entre sí Ruby 1.8 Rails 1.2 MySQL 4.1 PHP 5.3 Vevui MongoDB 2.2 PHP 5.2 CodeIgniter MySQL 5.0 Ruby 1.9 Rails 3.2 MySQL 5.5
  2. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    Equipo de desarrollo con diferentes sistemas operativos XAMP, WAMP, MAMP, LAMP, Apache, Nginx... Instalar librerías y servicios (Memcached, Redis, MongoDB, Sphinx...) ESCENARIO 2
  3. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    ¡ Usar máquinas virtuales para cada entorno de desarrollo ! SOLUCIÓN
  4. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    PROBLEMAS ¿Qué entorno de virtualización elijo? ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen? ¿Cómo creo una máquina virtual? Me da pereza instalar un nuevo sistema operativo... ¿Cómo comparto el entorno con otras personas? ¿Y si quiero cambiar de entorno de virtualización ?
  5. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    PROBLEMAS ¿Qué entorno de virtualización elijo? ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen? ¿Cómo creo una máquina virtual? Me da pereza instalar un nuevo sistema operativo... ¿Cómo comparto el entorno con otras personas? ¿Y si quiero cambiar de entorno de virtualización ?
  6. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    PROBLEMAS ¿Qué entorno de virtualización elijo? ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen? ¿Cómo creo una máquina virtual? Me da pereza instalar un nuevo sistema operativo... ¿Cómo comparto el entorno con otras personas? ¿Y si quiero cambiar de entorno de virtualización ? Usar herramienta independiente del entorno de virtualización que nos oculte los detalles
  7. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    Crear, iniciar, detener y eliminar VMs de manera sencilla Escrito en ruby Open source ( http://github.com/mitchellh/vagrant ) Actualmente sólo es capaz de controlar Oracle VM VirtualBox En el futuro soportará cualquier entorno mediante plugins Está siendo usado por varias empresas importantes SOLUCIÓN: VAGRANT
  8. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    Crear, iniciar, detener y eliminar VMs de manera sencilla Escrito en ruby Open source ( http://github.com/mitchellh/vagrant ) Actualmente sólo es capaz de controlar Oracle VM VirtualBox En el futuro soportará cualquier entorno mediante plugins Está siendo usado por varias empresas importantes SOLUCIÓN: VAGRANT « ¡¡ En mi ordenador funciona !! »
  9. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    OBTENER VAGRANT Descargar e instalar Oracle VM VirtualBox de http://www.virtualbox.org (Última versión 4.2) Descargar e instalar Vagrant de http://vagrantup.com (Última versión 1.0.4) Mac (DMG), Linux (DEB, RPM), Windows (MSI)
  10. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base
  11. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box
  12. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box Crear fichero de configuración inicial ( Vagrantfile )
  13. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box Crear fichero de configuración inicial ( Vagrantfile ) $  vagrant  init
  14. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base Iniciar máquina virtual $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box Crear fichero de configuración inicial ( Vagrantfile ) $  vagrant  init
  15. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (I) Añadir una primera imagen como base Iniciar máquina virtual $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box Crear fichero de configuración inicial ( Vagrantfile ) $  vagrant  init $  vagrant  up
  16. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (II) Resultado de ejecución $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.box [vagrant]  Downloading  with  Vagrant::Downloaders::HTTP... [vagrant]  Downloading  box:  http://files.vagrantup.com/lucid32.box [vagrant]  Extracting  box... [vagrant]  Verifying  box... [vagrant]  Cleaning  up  downloaded  box... $  vagrant  init A  `Vagrantfile`  has  been  placed  in  this  directory.  You  are  now ready  to  `vagrant  up`  your  first  virtual  environment!  Please  read the  comments  in  the  Vagrantfile  as  well  as  documentation  on `vagrantup.com`  for  more  information  on  using  Vagrant. $  vagrant  up [default]  VM  already  created.  Booting  if  it's  not  already  running... [default]  Clearing  any  previously  set  forwarded  ports... [default]  Forwarding  ports... [default]  -­‐-­‐  22  =>  2222  (adapter  1) [default]  Creating  shared  folders  metadata... [default]  Clearing  any  previously  set  network  interfaces... [default]  Booting  VM... [default]  Waiting  for  VM  to  boot.  This  can  take  a  few  minutes. [default]  VM  booted  and  ready  for  use! [default]  Mounting  shared  folders... [default]  -­‐-­‐  v-­‐root:  /vagrant
  17. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (III) Accediendo por SSH $  vagrant  ssh Linux  lucid32  2.6.32-­‐38-­‐generic  #83-­‐Ubuntu  SMP  Wed  Jan  4  11:13:04  UTC   2012  i686  GNU/Linux Ubuntu  10.04.4  LTS Welcome  to  Ubuntu!  *  Documentation:    https://help.ubuntu.com/ New  release  'precise'  available. Run  'do-­‐release-­‐upgrade'  to  upgrade  to  it. Welcome  to  your  Vagrant-­‐built  virtual  machine. Last  login:  Fri  Sep  14  07:26:29  2012  from  10.0.2.2 vagrant@lucid32:~$  ifconfig  eth0|grep  inet                    inet  addr:10.0.2.15    Bcast:10.0.2.255    Mask:255.255.255.0                    inet6  addr:  fe80::a00:27ff:feb5:756c/64  Scope:Link vagrant@lucid32:~$  ping  -­‐c  1  www.google.es PING  www.google.es  (173.194.34.216)  56(84)  bytes  of  data. 64  bytes  from  mad01s08-­‐in-­‐f24.1e100.net  (173.194.34.216):  icmp_seq=1   ttl=63  time=85.0  ms -­‐-­‐-­‐  www.google.es  ping  statistics  -­‐-­‐-­‐ 1  packets  transmitted,  1  received,  0%  packet  loss,  time  0ms rtt  min/avg/max/mdev  =  85.038/85.038/85.038/0.000  ms
  18. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    INICIO RÁPIDO (IV) Suspender, despertar, detener y destruir la VM $  vagrant  suspend [default]  Saving  VM  state  and  suspending  execution... $  vagrant  resume [default]  Resuming  suspended  VM... [default]  Booting  VM... [default]  Waiting  for  VM  to  boot.  This  can  take  a  few  minutes. [default]  VM  booted  and  ready  for  use! $  vagrant  halt [default]  Attempting  graceful  shutdown  of  VM... $  vagrant  destroy Are  you  sure  you  want  to  destroy  the  'default'  VM?  [Y/N]  Y [default]  Destroying  VM  and  associated  drives...
  19. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    CONFIGURACIÓN Elementos importantes del fichero Vagrantfile Vagrant::Config.run  do  |config|    #  Alias  local  de  la  VM  base    config.vm.box  =  "base"    #  URL  de  dónde  descargar  la  VM  en  caso  de  no  tenerla    config.vm.box_url  =  "http://files.vagrantup.com/lucid32.box"    #  Tipo  de  arranque  (Podría  ser  :gui)    config.vm.boot_mode  =  :headless    #  Modo  de  red  (Podría  ser  :bridged)    config.vm.network  :hostonly,  "192.168.33.10"    #  Redirigir  puerto  8000  en  host  hacia  el  puerto  80  en  VM    config.vm.forward_port  80,  8000    #  Directorio  compartido    config.vm.share_folder("v-­‐root",  "/vagrant",  ".") end
  20. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    AUTOMATIZACIÓN (I) Una VM vacía no nos sirve de mucho Para empezar un proyecto necesitamos ciertas herramientas A mitad del proyecto es muy probable que necesitemos más Es necesario automatizar la instalación y configuración de software
  21. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    AUTOMATIZACIÓN (I) Una VM vacía no nos sirve de mucho Para empezar un proyecto necesitamos ciertas herramientas A mitad del proyecto es muy probable que necesitemos más Es necesario automatizar la instalación y configuración de software
  22. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    AUTOMATIZACIÓN (II) Declarativo Clases y módulos Maduro (2005) Extendido Imperativo (ruby) Recetas Más reciente (2009) Menos extendido
  23. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    EJEMPLO CON PUPPET (I) Vagrant::Config.run  do  |config|    #  Alias  local  de  la  VM  base    config.vm.box  =  "base"    #  URL  de  dónde  descargar  la  VM  en  caso  de  no  tenerla    config.vm.box_url  =  "http://files.vagrantup.com/lucid32.box"    #  Modo  de  red  (Podría  ser  :bridged)    config.vm.network  :hostonly,  "192.168.33.10"    #  Directorio  compartido    config.vm.share_folder("v-­‐root",  "/vagrant",  ".")        #  Usar  puppet/ejemplo.pp  como  fichero  de  manifiesto  puppet    config.vm.provision  :puppet  do  |puppet|        puppet.manifests_path  =  "puppet"        puppet.manifest_file  =  "ejemplo.pp"    end end
  24. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    EJEMPLO CON PUPPET (II) Contenido de puppet/ejemplo.pp exec  {"apt-­‐get-­‐update":"apt-­‐get-­‐update":        creates  =>  "/tmp/apt-­‐get-­‐updated",        command  =>  "/usr/bin/apt-­‐get  update  &&  /usr/bin/touch  /tmp/apt-­‐ get-­‐updated" } package  {"apache2":        ensure  =>  present,        require  =>  Exec["apt-­‐get-­‐update"], } $php  =  ["php5-­‐cli",  "php5-­‐mysql",  "libapache2-­‐mod-­‐php5"] package  {  $php:        ensure  =>  present,        notify  =>  Service["apache2"],        require  =>  Exec["apt-­‐get-­‐update"] }
  25. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    EJEMPLO CON PUPPET (III) Agregando soporte a MySQL $mysql  =  ["mysql-­‐server",  "mysql-­‐client"] package  {  $mysql:        ensure  =>  present,        require  =>  Exec["apt-­‐get-­‐update"] } file  {"/etc/mysql/my.cnf":   ensure   =>  file,   owner  =>  "root",   group  =>  "root",   mode   =>  644,   source   =>  "/vagrant/puppet/files/mysql/my.cnf",   require   =>  Package[$mysql],   notify   =>  Service["mysql"], } service  {"mysql":   enable   =>  true,   ensure   =>  running,   require   =>  Package[$mysql], }
  26. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    Vagrant es una herramienta muy potente Réplica en desarrollo del entorno de producción Si aún no la usas estás perdiendo tiempo y dinero... RESUMEN
  27. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

    Vagrant es una herramienta muy potente Réplica en desarrollo del entorno de producción Si aún no la usas estás perdiendo tiempo y dinero... RESUMEN