Entornos de desarrollo
portables,
reproducibles y ligeros
@borjacampina
Operaciones IT y Desarrollo
de producto
http://i2factory.com/
spin-off uhu/us
¿Qué opciones
tenemos para preparar
el entorno de
desarrollo?
#1
Instalación en
máquina local
“ensucias” tu máquina
interferencia con software habitual
diferentes librerías para diferentes
proyectos
no se puede portar (no fácilmente)
características diferentes del entorno de
producción
inconvenientes
Si además eres parte de un equipo...
...puede que haya incidencias
debido a usar...
Diferentes SSOO
Diferentes versiones de apps/pkgs/deps
Diferentes configuraciones
#2
Crear máquina
virtual (en local)
mantienes máquina (host) limpia
entornos de proyectos separados
snapshots y portabilidad
ventajas
instalación manual (o casi:
bitnami, seeding, unattended..)
VM snapshots o exportaciones de
VM ocupan BASTANTE
inconvenientes
#3
Servidor /
máquina remota
entorno independiente de tu
máquina
puede tener mismas
características que el entorno
de producción
ventajas
soltar pa$$ta (aunque hay entornos
gratuitos y otros cada vez más
asequibles: digitalocean, linode...
pay-per-use)
necesidad de acceso a internet
push code / changes to server
inconvenientes
Ventajas: mismo entorno para el equipo
Inconvenientes: mismo entorno para el equipo
Si además eres parte de un equipo...
Pero no toques, ¿por qué tocas?
resumiendo...
Crear un
entorno
de forma
manual es
un pu**
co****
tedioso
las cosas no funcionan...
la documentación a veces es
Incompleta o incorrecta...
y si además el entorno se estropea
pasado un tiempo...
free** & opensource
https://github.com/mitchellh/vagrant
primera release v.0.1.0
marzo 2010
h"ps://github.com/mitchellh/vagrant/wiki/Available-­‐Vagrant-­‐Plugins	
  
herramienta que nos permite
crear y configurar de forma ligera
(con código, en texto plano)
entornos de desarrollo
reproducibles y portables
CLI (ruby) que permite
configurar y administrar
herramientas de
virtualización
(por defecto virtualbox)
Virtualbox	
  (provider	
  por	
  defecto**)	
  
h"ps://www.virtualbox.org/wiki/Downloads	
  
	
  
Vagrant	
  (necesita	
  ruby)	
  
h"p://downloads.vagrantup.com/	
  
	
  
(también	
  como	
  gema:	
  gem	
  install	
  vagrant	
  –no-­‐ri	
  –
no-­‐rdoc)	
  
instalación
Soporta muchos proveedores on-premise
e IaaS/Proveedores cloud
docker-­‐provider	
  
vagrant-­‐aws	
  
vagrant-­‐cloudstack	
  
vagrant-­‐digitalocean	
  
vagrant-­‐hp	
  
vagrant-­‐joyent	
  
vagrant-­‐kvm	
  
vagrant-­‐libvirt	
  
vagrant-­‐lxc	
  
vagrant-­‐managed-­‐servers	
  
vagrant-­‐openstack	
  
vagrant-­‐parallels	
  
vagrant-­‐proxmox	
  
vagrant-­‐rackspace	
  
vagrant-­‐soHlayer	
  
vagrant-­‐vsphere	
  (no	
  oficial)	
  	
  
...	
  	
  	
  
	
  
http://www.vagrantup.com/vmware
Soporte oficial, licencia 79usd
vagrant init
Wait... boxes?
Son “máquinas esqueleto/base”, preconfiguradas
(usuarios root/vagrant, ruby, puppet...)
Cuando ejecutamos
vagrant box add [box-name] [box-url/box-path] 	
Indicamos a vagrant que descargue (si especificamos url) o
copie (si especificamos un path) en nuestro directorio local
.vagrant.d/boxes dicha máquina y le asigne el alias “box-name”
	
  
Wait... boxes?
¿De dónde obtenemos más máquinas?
http://www.vagrantbox.es/
http://cloud-images.ubuntu.com/vagrant/
¿Y si queremos hacernos una?
Comando: vagrant package
https://github.com/jedi4ever/veewee
vagrant box add precise32 http://files.vagrantup.com/precise32.box
vagrant init precise32
(Vagrantfile)
vagrant up
vagrant destroy –f
vagrant ssh
Sólo tenemos una máquina básica
Para configurar e instalar software de forma desatendida vagrant nos
ofrece los siguientes métodos de aprovisionamiento:
•  Puppet http://puppetlabs.com/ (https://puphpet.com )
•  Chef http://www.opscode.com/chef/ (http://rove.io/ )
•  Ansible http://www.ansibleworks.com/
• Shell
(Más
https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins)
¿Cuándo se ejecuta?
En el primer vagrant up (para evitarlo: --no-provision)
En una máquina corriendo: vagrant provision
vagrant cloud (>= 1.5)
¿Quién usa vagrant?
“Tuen&-­‐in-­‐a-­‐box.	
  Es	
  lo	
  que	
  usan	
  los	
  desarrolladores	
  para	
  trabajar	
  y	
  es	
  un	
  perfil	
  de	
  VM	
  que	
  
ejecuta	
  un	
  perfil	
  de	
  puppet	
  que	
  provisiona	
  una	
  infraestructura	
  completa	
  para	
  que	
  un	
  	
  
desarrollador	
  tenga	
  un	
  "mini	
  Tuen&"	
  en	
  local.	
  Con	
  todo	
  el	
  development	
  environment	
  
necesario.	
  
	
  	
  
Usando	
  Vagrant,	
  el	
  desarrollador	
  es	
  libre	
  de	
  hacer	
  lo	
  que	
  le	
  de	
  la	
  gana	
  en	
  su	
  propio	
  host	
  y	
  	
  
podrá	
  destruir	
  la	
  VM	
  y	
  levantarla	
  con	
  un	
  solo	
  comando	
  cada	
  vez	
  que	
  quiera,	
  y	
  por	
  supuesto,	
  	
  
consumir	
  los	
  recursos	
  que	
  quiera	
  sin	
  afectar	
  a	
  nadie.”	
  -­‐	
  Victor	
  García	
  (Tuen&	
  DevOps	
  
Engineer)	
  	
  
	
  
h"ps://drupal.org/project/vdd	
  	
  	
  	
  	
  

Entornos de desarrollo portables, reproducibles y ligeros

  • 1.
  • 2.
    @borjacampina Operaciones IT yDesarrollo de producto http://i2factory.com/ spin-off uhu/us
  • 3.
    ¿Qué opciones tenemos parapreparar el entorno de desarrollo?
  • 4.
  • 5.
    “ensucias” tu máquina interferenciacon software habitual diferentes librerías para diferentes proyectos no se puede portar (no fácilmente) características diferentes del entorno de producción inconvenientes
  • 7.
    Si además eresparte de un equipo...
  • 8.
    ...puede que hayaincidencias debido a usar... Diferentes SSOO Diferentes versiones de apps/pkgs/deps Diferentes configuraciones
  • 9.
  • 10.
    mantienes máquina (host)limpia entornos de proyectos separados snapshots y portabilidad ventajas
  • 11.
    instalación manual (ocasi: bitnami, seeding, unattended..) VM snapshots o exportaciones de VM ocupan BASTANTE inconvenientes
  • 12.
  • 13.
    entorno independiente detu máquina puede tener mismas características que el entorno de producción ventajas
  • 14.
    soltar pa$$ta (aunquehay entornos gratuitos y otros cada vez más asequibles: digitalocean, linode... pay-per-use) necesidad de acceso a internet push code / changes to server inconvenientes
  • 15.
    Ventajas: mismo entornopara el equipo Inconvenientes: mismo entorno para el equipo Si además eres parte de un equipo...
  • 16.
    Pero no toques,¿por qué tocas?
  • 17.
  • 18.
    Crear un entorno de forma manuales un pu** co**** tedioso
  • 19.
    las cosas nofuncionan...
  • 20.
    la documentación aveces es Incompleta o incorrecta...
  • 21.
    y si ademásel entorno se estropea pasado un tiempo...
  • 23.
    free** & opensource https://github.com/mitchellh/vagrant primerarelease v.0.1.0 marzo 2010 h"ps://github.com/mitchellh/vagrant/wiki/Available-­‐Vagrant-­‐Plugins   herramienta que nos permite crear y configurar de forma ligera (con código, en texto plano) entornos de desarrollo reproducibles y portables
  • 24.
    CLI (ruby) quepermite configurar y administrar herramientas de virtualización (por defecto virtualbox)
  • 25.
    Virtualbox  (provider  por  defecto**)   h"ps://www.virtualbox.org/wiki/Downloads     Vagrant  (necesita  ruby)   h"p://downloads.vagrantup.com/     (también  como  gema:  gem  install  vagrant  –no-­‐ri  – no-­‐rdoc)   instalación
  • 26.
    Soporta muchos proveedoreson-premise e IaaS/Proveedores cloud docker-­‐provider   vagrant-­‐aws   vagrant-­‐cloudstack   vagrant-­‐digitalocean   vagrant-­‐hp   vagrant-­‐joyent   vagrant-­‐kvm   vagrant-­‐libvirt   vagrant-­‐lxc   vagrant-­‐managed-­‐servers   vagrant-­‐openstack   vagrant-­‐parallels   vagrant-­‐proxmox   vagrant-­‐rackspace   vagrant-­‐soHlayer   vagrant-­‐vsphere  (no  oficial)     ...         http://www.vagrantup.com/vmware Soporte oficial, licencia 79usd
  • 27.
  • 28.
    Wait... boxes? Son “máquinasesqueleto/base”, preconfiguradas (usuarios root/vagrant, ruby, puppet...) Cuando ejecutamos vagrant box add [box-name] [box-url/box-path] Indicamos a vagrant que descargue (si especificamos url) o copie (si especificamos un path) en nuestro directorio local .vagrant.d/boxes dicha máquina y le asigne el alias “box-name”  
  • 29.
    Wait... boxes? ¿De dóndeobtenemos más máquinas? http://www.vagrantbox.es/ http://cloud-images.ubuntu.com/vagrant/ ¿Y si queremos hacernos una? Comando: vagrant package https://github.com/jedi4ever/veewee
  • 30.
    vagrant box addprecise32 http://files.vagrantup.com/precise32.box vagrant init precise32 (Vagrantfile) vagrant up vagrant destroy –f vagrant ssh
  • 31.
    Sólo tenemos unamáquina básica Para configurar e instalar software de forma desatendida vagrant nos ofrece los siguientes métodos de aprovisionamiento: •  Puppet http://puppetlabs.com/ (https://puphpet.com ) •  Chef http://www.opscode.com/chef/ (http://rove.io/ ) •  Ansible http://www.ansibleworks.com/ • Shell (Más https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins) ¿Cuándo se ejecuta? En el primer vagrant up (para evitarlo: --no-provision) En una máquina corriendo: vagrant provision
  • 32.
  • 33.
    ¿Quién usa vagrant? “Tuen&-­‐in-­‐a-­‐box.  Es  lo  que  usan  los  desarrolladores  para  trabajar  y  es  un  perfil  de  VM  que   ejecuta  un  perfil  de  puppet  que  provisiona  una  infraestructura  completa  para  que  un     desarrollador  tenga  un  "mini  Tuen&"  en  local.  Con  todo  el  development  environment   necesario.       Usando  Vagrant,  el  desarrollador  es  libre  de  hacer  lo  que  le  de  la  gana  en  su  propio  host  y     podrá  destruir  la  VM  y  levantarla  con  un  solo  comando  cada  vez  que  quiera,  y  por  supuesto,     consumir  los  recursos  que  quiera  sin  afectar  a  nadie.”  -­‐  Victor  García  (Tuen&  DevOps   Engineer)       h"ps://drupal.org/project/vdd