Your SlideShare is downloading. ×
Vagrant: virtualizando entornos de desarrollo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Vagrant: virtualizando entornos de desarrollo

2,188
views

Published on

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,188
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
28
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. VAGRANTVIRTUALIZANDO ENTORNOS DE DESARROLLO Daniel Vigueras daniel@scalia.es @danielvigueras
  • 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. 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. SOLUCIÓN¡ Usar máquinas virtuales para cada entorno de desarrollo ! Vagrant: virtualizando entornos de desarrollo / Daniel Vigueras / @danielvigueras
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×