Aislar ambientes de desarrollo con Vagrant

Si desarrollas en un solo tipo de ‘stack’ de desarrollo lo más común es instalar este stack en tu máquina principal y desarrollar directamente en el sistema operativo de tu preferencia.

En mi caso uso Mac OS y para desarrollar sitios web simples con el ‘stack’ tipo XAMP simplemente activaba apache y php que vienen preinstalados e instalaba mysql copiando los binarios descargados desde la página web.

Nada mal para la mayoría de sitios que habá desarrollado hasta ahora, pero los problemas comienzan a darse cuando ya no solo desarrollas en un solo lenguaje en el lado del servidor.

En los últimos años he comenzado a desarrollar en ruby on rails así que esto complica un poco el panorama de mantener todo dentro del mismo sistema operativo pero hay herramientas que fueron creadas para ayudarte en esto, como rvm o rbenv.

El problema real comienza cuando necesitas duplicar un bug que solo sucede en producción con versiones específicas del software base instalado, para lo cual necesitas mantener instaladas diferentes versiones de php, ruby, mysql, tener también redis, realizar pruebas de nuevos lenguajes como nodejs tener diferentes servidores web como nginx o lighttpd.

También es un problema tener varios clientes, cada uno con un stack diferente de despliegue, cada uno con versiones diferentes de compiladores, interpretes, etc.

Buscando la mejor manera de manejar este problema encontré un software que me ha ayudado mucho, su nombre es Vagrant.

La solución que propone este software es mantener un proyecto completamente independiente de otros proyectos a través de máquinas virtuales, para lo cual depende de VirtualBox y facilita la construcción de estás máquinas automatizando las instalaciones con puppet o chef.

Estuve probando este sistema en los últimos proyectos y me ha encantado, aparte de vagrant que ayuda en la gestión de las máquinas virtuales, el que más se luce es chef, la idea es que puedes tener toda una ‘receta’ para instalar todo el software necesario para que se ejecute tu aplicación sobre el sistema operativo que ejecutas en producción, si lo usas desde el primer momento del proyecto crear tu sistema de producción es tan fácil como ejecutar un comando.

En un post siguiente les contaré un poco más como se configura vagrant y como se crea una receta básica con chef.