VAGRANTVIRTUALIZANDO ENTORNOS     DE DESARROLLO                  Daniel Vigueras                  daniel@scalia.es        ...
ESCENARIO 1Desarrollador de varios proyectos con diferentes entornos conflictivosentre sí  Ruby 1.8         PHP 5.2        ...
ESCENARIO 2Equipo de desarrollo con diferentes sistemas operativosXAMP, WAMP, MAMP, LAMP, Apache, Nginx...Instalar librerí...
SOLUCIÓN¡ Usar máquinas virtuales para cada entorno de desarrollo !                        Vagrant: virtualizando entornos...
PROBLEMAS¿Qué entorno de virtualización elijo?   ¿VMWare? ¿VirtualBox? ¿KVM? ¿Xen?¿Cómo creo una máquina virtual?Me da per...
SOLUCIÓN: VAGRANTCrear, iniciar, detener y eliminar VMs de manera sencillaEscrito en rubyOpen source ( http://github.com/m...
OBTENER VAGRANTDescargar e instalar Oracle VM VirtualBox de http://www.virtualbox.org (Última versión 4.2)Descargar e inst...
INICIO RÁPIDO (I)Añadir una primera imagen como base $	  vagrant	  box	  add	  base	  http://files.vagrantup.com/lucid32.b...
INICIO RÁPIDO (II)Resultado de ejecución $	  vagrant	  box	  add	  base	  http://files.vagrantup.com/lucid32.box [vagrant]...
INICIO RÁPIDO (III)Accediendo por SSH $	  vagrant	  ssh Linux	  lucid32	  2.6.32-­‐38-­‐generic	  #83-­‐Ubuntu	  SMP	  Wed...
INICIO RÁPIDO (IV)Suspender, despertar, detener y destruir la VM $	  vagrant	  suspend [default]	  Saving	  VM	  state	  a...
CONFIGURACIÓNElementos importantes del fichero VagrantfileVagrant::Config.run	  do	  |config|	  	  #	  Alias	  local	  de	  ...
AUTOMATIZACIÓN (I)Una VM vacía no nos sirve de muchoPara empezar un proyecto necesitamos ciertas herramientasA mitad del p...
AUTOMATIZACIÓN (II)Declarativo                                     Imperativo (ruby)Clases y módulos                      ...
EJEMPLO CON PUPPET (I)Vagrant::Config.run	  do	  |config|	  	  #	  Alias	  local	  de	  la	  VM	  base	  	  config.vm.box	...
EJEMPLO CON PUPPET (II)Contenido de puppet/ejemplo.pp exec	  {"apt-­‐get-­‐update":"apt-­‐get-­‐update": 	  	  	  	  creat...
EJEMPLO CON PUPPET (III)Agregando soporte a MySQL $mysql	  =	  ["mysql-­‐server",	  "mysql-­‐client"] package	  {	  $mysql...
RESUMENVagrant es una herramienta muy potenteRéplica en desarrollo del entorno de producciónSi aún no la usas estás perdie...
Upcoming SlideShare
Loading in …5
×

Vagrant: virtualizando entornos de desarrollo

2,793 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,793
On SlideShare
0
From Embeds
0
Number of Embeds
380
Actions
Shares
0
Downloads
31
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Vagrant: virtualizando entornos de desarrollo

  1. 1. VAGRANTVIRTUALIZANDO ENTORNOS DE DESARROLLO Daniel Vigueras daniel@scalia.es @danielvigueras
  2. 2. ESCENARIO 1Desarrollador de varios proyectos con diferentes entornos conflictivosentre sí Ruby 1.8 PHP 5.2 Ruby 1.9 PHP 5.3 Rails 1.2 CodeIgniter Rails 3.2 Vevui MySQL 4.1 MySQL 5.0 MySQL 5.5 MongoDB 2.2 Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  3. 3. ESCENARIO 2Equipo de desarrollo con diferentes sistemas operativosXAMP, WAMP, MAMP, LAMP, Apache, Nginx...Instalar librerías y servicios (Memcached, Redis, MongoDB, Sphinx...) Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  4. 4. SOLUCIÓN¡ Usar máquinas virtuales para cada entorno de desarrollo ! Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  5. 5. 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 nosoculte los detalles Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  6. 6. SOLUCIÓN: VAGRANTCrear, iniciar, detener y eliminar VMs de manera sencillaEscrito en rubyOpen source ( http://github.com/mitchellh/vagrant )Actualmente sólo es capaz de controlar Oracle VM VirtualBoxEn el futuro soportará cualquier entorno mediante pluginsEstá siendo usado por varias empresas importantes « ¡¡ En mi ordenador funciona !! » Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  7. 7. OBTENER VAGRANTDescargar 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) Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  8. 8. INICIO RÁPIDO (I)Añadir una primera imagen como base $  vagrant  box  add  base  http://files.vagrantup.com/lucid32.boxCrear fichero de configuración inicial ( Vagrantfile ) $  vagrant  initIniciar máquina virtual $  vagrant  up Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  9. 9. 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  its  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 Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  10. 10. 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 Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  11. 11. 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... Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  12. 12. CONFIGURACIÓNElementos importantes del fichero VagrantfileVagrant::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 Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  13. 13. AUTOMATIZACIÓN (I)Una VM vacía no nos sirve de muchoPara empezar un proyecto necesitamos ciertas herramientasA mitad del proyecto es muy probable que necesitemos másEs necesario automatizar la instalación y configuración de software Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  14. 14. AUTOMATIZACIÓN (II)Declarativo Imperativo (ruby)Clases y módulos RecetasMaduro (2005) Más reciente (2009)Extendido Menos extendido Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  15. 15. 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"    endend Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  16. 16. 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"] } Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  17. 17. 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], } Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  18. 18. RESUMENVagrant es una herramienta muy potenteRéplica en desarrollo del entorno de producciónSi aún no la usas estás perdiendo tiempo y dinero... Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras

×