vagrant-300x82

Desde hace años, nos hemos acostumbrado a entornos *AMP (lamp, wamp, mamp, xampp), que no son más que una serie de herramientas que en general nos proveen de Apache + PHP + Mysql, entre otras cosas. Para hacer pruebas de nuestras aplicaciones son de gran ayuda, sin embargo hoy en día nuestros desarrollos muchas veces van más allá de estas 3 tecnologías; tenemos elementos como nginx, varnish, memcached, redis, postgresql, node.js, y mucho más, que son elementos para los cuales nuestro servidor *AMP se nos ha quedado corto.

¿Qué pasa cuando trabajas en equipo y quieres que todos tus desarrolladores tengan un entorno de desarrollo específico, o simplemente quieres replicar por completo tu servidor de producción para garantizar el correcto funcionamiento de tu aplicación?. Y es que tu servidor probablemente no esté en Windows, ni en MacOSX, o como en mi caso, sobre Centos (y mi OS para desarrollo esta basado en Ubuntu) y hay cosas que simplemente son distintas, y se vuelve cada día más necesario acabar con eso de “En mi computador funciona”. Hoy en día no hay escusas para eso.

Para todo esto y mucho más tenemos Vagrant, contenedores de máquinas virtuales, que de manera muy amigable pueden ser diseñadas para crear nuestros entornos personalizados o aprovechar algunos ya existentes.

Vagrant es un proyecto de código abierto, cuya meta es la generación de ambientes virtuales de desarrollo de manera práctica, rápida, eficiente, portátil y sobre todas las cosas, fáciles de modificar y distribuir, permitiendo basarnos en entornos de virtualización como VirtualBox, VMWare, y AWS, pudiendo extenderse a otros proveedores.

El centro de toda BOX (Máquina virtual de Vagrant), es un VagrantFile, es cual es un archivo que describe la configuración de la máquina, este archivo contiene todos los parámetros de configuración de nuestra máquina virtual, incluso las configuraciones de red y puertos.

¿Cómo Instalarlo?

VirtualBox

Como ya hemos dicho, Vagrant se aprovecha de los métodos de virtualización de algunos proveedores, para efectos de este tutorial, trabajaremos con virutalbox, por su universalidad y fácil instalación, así que lo primero que debes hacer es instalar VirtualBox, para lo cual te recomendamos entres en el portal oficial de VirtualBox y revises el método de instalación más adecuado a tu Sistema Operativo, aunque esto tiende a ser una instalación muy sencilla.

Vagrant

Solo debemos entrar aquí y descargar el paquete adecuado a nuestro sistema operativo, y seguir los pasos básicos de una instalación típica de cualquier software.

¿Cómo usarlo?

Lo primero que debemos hacer es descargarnos alguna box, adecuada a nuestras necesidades, existen boxes que ya vienen con gran cantidad de paquetes instalados, existen otras que vienen solo con el Sistema Operativo en su forma más básica, esperando a que nosotros instalemos en ésta todo lo que deseamos instalar, en nuestro caso usaremos una instalación básica.

Para conseguir boxes, hay gran cantidad de sitios por toda la web, sin embargo, recomiendo visitar http://vagrantcloud.com/, tienen gran variedad y mejor soporte.

Con esto en mente, solo debemos escribir:

vagrant init nfq/wheezy

Esto generará un archivo llamado VagrantFile, el cual contiene toda la información necesaria para gestionar nuestro nuevo box,

Solo nos resta iniciar nuestro box, ejecutando

vagrant up

Este comando intentará buscar en nuestro listado de boxes descargadas en nuestro equipo la imagen indicada en el comando vagrant init, y en caso de no encontrarla, irá hasta vagrantcloud y buscará descargarla.

Algunos otros comandos que debemos aprender son:

  • Vagrant ssh: Debido a que este tipo de implementación no ofrece interfaz gráfica, para acceder a la instancia como tal debemos entrar en ella vía SSH.
  • Vagrant suspend: Si no queremos trabajar con el ambiente en un tiempo nos permite suspenderlo.
  • Vagrant resume: Lo cual nos permitirá levantarla en cuestión de pocos segundos cuando la queramos volver a usar luego de una suspensión.
  • Vagrant halt: Podremos apagar nuestra implementación.
  • Vagrant destroy: Destruye la máquina virtual, pero deja la base disponible para nuevos proyectos, tampoco destruye el archivo VagrantFile.

Configuración

Vagrant es como el póker, “se aprende en 5 minutos, y se perfecciona en toda una vida“, básicamente debemos iniciar con 2 ó 3 configuraciones básicas, y tendremos un entorno de desarrollo muy profesional en solo unos pocos minutos, y realmente no necesitaremos saber absolutamente nada de Linux para esto.

Recordemos que tenemos un archivo llamado Vagrantfile, este contiene todas las configuraciones de nuestro entorno, para comenzar comenzar solo editaremos 3 ítem, 2 de la red y otro de lo que se llama “aprovisionamiento”..

El primer ítem es FORWARDED PORTS, esta configuración nos permite mapear por un puerto de un valor a otro, así evitar colisiones. Ejemplo:

config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3306, host: 33060

Estas líneas específicamente nos mapearán el puerto 80, tradicionalmente usado por nuestro apache al 8080, y el 3306, usado por mysql a 33060, esto útil si en nuestro equipo esos puertos están ocupados por alguna otra aplicación.

Y PROVISIONING, la habilidad de poder almacenar en un script las configuraciones  que consideremos necesarias, luego de la primera ejecución de nuestra máquina virtual..

config.vm.provision :shell, :path => "bootstrap.sh"

En este caso, hemos llamado a script bootstrap.sh y tiene el siguiente código:

 #!/usr/bin/env bash
DBPASSWD=1234
apt-get install -y debconf-utils
apt-get install -y apache2
echo "mysql-server mysql-server/root_password password $DBPASSWD" | debconf-set-selections
echo "mysql-server mysql-server/root_password_again password $DBPASSWD" | debconf-set-selections
apt-get install -y mysql-server
apt-get install -y php5 libapache2-mod-php5
sed -e '/bind-address/ s/^#*/# /' -i /etc/mysql/my.cnf
service apache2 restart
rm -rf /var/www
ln -fs /Vagrant /var/www

Con este código básico tendremos un entorno Apache + Mysql + Php muy básico, pero funcional, y todo lo que esté en la carpeta donde estamos alojando nuestros archivos Vagrant, será lo que veremos al ingresar desde nuestro navegador favorito:
http://127.0.0.1:8080.
Luego de esto, solo nos resta ejecutar por primera vez nuestra VM, y esperar mientras el entorno se establece y estamos listos para crear cosas realmente interesantes.