Vagrant es una herramienta que permite crear entornos de desarrollo virtualizados ayudándonos a automatizar esas tareas relacionadas con la gestión de la máquina con las que tenemos que lidiar en el día a día.

En Acceseo acostumbramos a trabajar en varios proyectos simultáneamente, cada uno con sus requisitos y necesidades. Mientras un proyecto necesita Elasticsearch para funcionar otro requiere Redis, otro lanzar scripts en Python o una versión determinada de PHP.

A grandes rasgos tenemos dos formas de afrontar la situación:

  • Trabajar directamente sobre hardware en nuestro sistema operativo preferido y crear proyectos instalando sus dependencias que a la larga crean una maraña increíble de directorios, ficheros, proyectos, configuraciones, bases de datos y servicios funcionando.
  • Virtualizar pequeños entornos para cada proyecto de manera que sean independientes unos de otros.

 

web-design-1080730_640

Vagrant es la herramienta que nos va a ayudar a generar y gestionar estos entornos virtuales independientes. Fundamentalmente es una interfaz que nos ayuda a gestionar entornos virtualizados y por ello para utilizarlo necesitamos tener un provider instalado que será el que realmente virtualice. En nuestro caso trabajaremos con VirtualBox, por tanto debemos instalar VirtualBox y Vagrant (la instalación es trivial y no la cubriremos en este artículo).

Una vez instalado todo empezar a usar vagrant es tan sencillo como ejecutar:

https://gist.github.com/anonymous/c037f0c4833d84ee858cbe4bc27c3577

Al lanzar estos 2 comandos se generará en el directorio un fichero Vagrantfile que contiene la configuración de la máquina y se pondrá en marcha la máquina virtual. El proceso es sencillo, cuando lanzamos vagrant init se genera el fichero Vagrantfile donde podemos configurar los recursos asignados a la máquina, la imagen en la que se basa la máquina (llamadas boxes, existe un directorio oficial de boxes aunque también podemos empaquetar las nuestras propias, por ejemplo para que toda la empresa disponga de la misma máquina sobre la que trabajar), las conexiones o las carpetas compartidas. Luego vagrant up crea la máquina si no existe y la pone en funcionamiento.

Si por el contrario disponemos de un fichero Vagrantfile en el directorio, no será necesario ejecutar el comando vagrant init. El siguiente ejemplo de Vagrantfile nos valdría para generar una máquina con Ubuntu 15.10, 512 MB de memoria RAM y 1 CPU.

https://gist.github.com/anonymous/75b57e0c34a8b6b53988957745c6bd93

De momento no es más que una máquina a la que podemos hacer ssh mediante el comando vagrant ssh pero no disponemos de un servidor real. Para automatizar la ejecución de tareas al crear la máquina podemos usar los provisioners, Vagrant nos permite copiar ficheros, lanzar scripts o utilizar herramientas como Puppet, Ansible, etc.

Vamos a instalar apache en nuestra máquina para poder disponer de un servidor web, para ello añadiremos la siguiente configuración en Vagrantfile:

https://gist.github.com/anonymous/9bd60abecb0c935ee6e8bef79d1d2739

Y a continuación crearemos el fichero bootstrap.sh con el siguiente contenido:

https://gist.github.com/anonymous/24bc0283db0f263ebe0ab09e173dbc13

Con esta configuración la primera vez que arranquemos la máquina (o cuando mediante las opciones forcemos su ejecución) se instalará apache, pero seguirá sin ser accesible desde fuera de la máquina virtual.

Vamos a configurar las conexiones de nuestra máquina virtual para que podamos acceder a apache desde nuestro navegador.

Vagrant nos permite asignar distintos tipos de configuración, las más sencilla es el port forwarding, podemos redirigir el puerto 80 de la máquina virtual al 4080 de nuestra máquina.

https://gist.github.com/anonymous/3881386b2d1922d402c9c65d60efaee4

Con eso bastará para que apache sea accesible en nuestro sistema operativo desde localhost:4080.

Por último, si vamos a trabajar con los ficheros del servidor necesitaremos editarlos de una manera cómoda, para ello Vagrant nos permite configurar también las carpetas compartidas entre nuestro sistema operativo y la máquina virtual. Podemos añadir la siguiente línea y dispondremos de la carpeta www en el directorio donde se encuentra el fichero Vagrantfile con los contenidos del servidor web.

https://gist.github.com/anonymous/1db220f9a873a39e74dbc542cca5f11a

Con esta configuración nuestro flujo de trabajo sería el siguiente:

  • Creamos la configuración y scripts necesarios.
  • Ejecutamos vagrant up.
  • Ya podemos empezar a modificar los ficheros de www en nuestro sistema operativo y ver los cambios en nuestro navegador utilizando la dirección localhost:4080
  • Ejecutamos vagrant halt para detener la máquina

Vagrant es una herramienta sencilla y versátil, en esta pequeña introducción hemos realizado una configuración mínima sin entrar en detalle en las distintas opciones que nos ofrece cada configuración, pero con estos simples pasos podemos crear nuestro entorno reproducible en unos minutos y tener cada proyecto independizado con distinto software instalado en su servidor y distintas configuraciones.

Nosotros usamos como base una carpeta en la que tenemos tanto Vagrantfile, como bash_aliases y un shellscript para instalar y configurar el software con el que trabajamos habitualmente que afinamos dependiendo del proyecto. Cuando llega un nuevo proyecto solo hay que copiar la carpeta o clonarla si está en un repositorio, ajustar el script y hacer vagrant up para tener en muy pocos minutos un entorno hecho a medida para el proyecto que no interfiere con ningún otro.

He leído y estoy conforme con la Política de Privacidad.