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

Vagrant

Betabeers
September 20, 2012
220

 Vagrant

@danielvigueras

Betabeers

September 20, 2012
Tweet

Transcript

  1. VAGRANT
    VIRTUALIZANDO ENTORNOS
    DE DESARROLLO
    Daniel Vigueras
    [email protected]
    @danielvigueras

    View Slide

  2. 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

    View Slide

  3. 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

    View Slide

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

    View Slide

  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 ?

    View Slide

  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 ?

    View Slide

  7. 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

    View Slide

  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

    View Slide

  9. 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 !! »

    View Slide

  10. 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)

    View Slide

  11. Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
    INICIO RÁPIDO (I)

    View Slide

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

    View Slide

  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

    View Slide

  14. 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 )

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 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
    [email protected]:~$  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
    [email protected]:~$  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

    View Slide

  20. 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...

    View Slide

  21. 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

    View Slide

  22. 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

    View Slide

  23. 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

    View Slide

  24. 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

    View Slide

  25. 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

    View Slide

  26. 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"]
    }

    View Slide

  27. 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],
    }

    View Slide

  28. 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

    View Slide

  29. 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

    View Slide