vagrant: virtualizando entornos de desarrollo

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

Upload: scalia

Post on 19-Jun-2015

2.247 views

Category:

Technology


3 download

TRANSCRIPT

Page 2: Vagrant: virtualizando entornos de desarrollo

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

ESCENARIO 1Desarrollador 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

Page 3: Vagrant: virtualizando entornos de desarrollo

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

Page 4: Vagrant: virtualizando entornos de desarrollo

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

¡ Usar máquinas virtuales para cada entorno de desarrollo !

SOLUCIÓN

Page 5: Vagrant: virtualizando entornos de desarrollo

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

Page 6: Vagrant: virtualizando entornos de desarrollo

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

Page 7: Vagrant: virtualizando entornos de desarrollo

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

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)

Page 8: Vagrant: virtualizando entornos de desarrollo

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

Page 9: Vagrant: virtualizando entornos de desarrollo

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  initA  `Vagrantfile`  has  been  placed  in  this  directory.  You  are  nowready  to  `vagrant  up`  your  first  virtual  environment!  Please  readthe  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

Page 10: Vagrant: virtualizando entornos de desarrollo

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

INICIO RÁPIDO (III)Accediendo por SSH

$  vagrant  sshLinux  lucid32  2.6.32-­‐38-­‐generic  #83-­‐Ubuntu  SMP  Wed  Jan  4  11:13:04  UTC  2012  i686  GNU/LinuxUbuntu  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.2vagrant@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:Linkvagrant@lucid32:~$  ping  -­‐c  1  www.google.esPING  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  0msrtt  min/avg/max/mdev  =  85.038/85.038/85.038/0.000  ms

Page 11: Vagrant: virtualizando entornos de desarrollo

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  destroyAre  you  sure  you  want  to  destroy  the  'default'  VM?  [Y/N]  Y[default]  Destroying  VM  and  associated  drives...

Page 12: Vagrant: virtualizando entornos de desarrollo

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

Page 13: Vagrant: virtualizando entornos de desarrollo

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

Page 14: Vagrant: virtualizando entornos de desarrollo

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

Page 15: Vagrant: virtualizando entornos de desarrollo

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"    endend

Page 16: Vagrant: virtualizando entornos de desarrollo

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

Page 17: Vagrant: virtualizando entornos de desarrollo

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

Page 18: Vagrant: virtualizando entornos de desarrollo

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