Vagrant nos permite crear y configurar entornos de desarrollo portables, reproducibles y livianos.

¿Qué quiere decir esto?

Imaginemos que estamos haciendo un desarrollo en python y django para lo cual necesitamos instalar PostgreSQL, Redis, nginx, etc. Ahora supongamos que necesitamos replicar el entorno de desarrollo en otro equipo o en otro sistema operativo, tendriamos que volver a instalar todo lo necesario una y otra vez cada vez que se necesite, y si tuviesemos que replicar el entorno en windows el trabajo se tornaria mas complicado.

Vagrant soluciona esto de una manera sencilla, simplemente creamos una maquina virtual donde instalamos todo lo necesario Vagrant empaqueta esta maquina virtual de modo que se pueda utilizar con cualquier sistema operativo y de este modo tenemos un entorno de desarrollo facil de transportar.

Ahora, ¿Como usamos vagrant?

Instalar Vagrant

Primero debemos descargar vagrant de su página oficial luego procedemos a instalarlo, de acuerdo a nuestro sistema operativo el instalador variara ligeramente.

Instalar VirtualBox

Vagrant maneja los entornos de desarrollo en maquinas virtuales para lo cual hace uso de VirtualBox descargamos el instalador desde su página oficial y procedemos a instalarlo.

Crear un entorno de desarrollo

Nos situamos en la carpeta que contenga nuestro proyecto y ejecutamos vagrant init ubuntu/trusty32 con lo cual se creará un archivo VagrantFile el cual estará configurado para usar ubuntu 14.04 de 32 bits como sistema operativo base, una vez hecho esto ejecutamos vagrant up con esto vagrant empezará a descargar, en caso no exista ya, una imagen con ubuntu como sistema operativo base.

Podemos elegir el sistema operativo de nuestra preferencia desde vagrantcloud.com

Ahora si ejecutamos vagrant status nos mostrará un mensaje donde nos indica que la máquina virtual esta corriendo. Ahora podemos acceder via ssh a nuestra maquina virtual ejecutando vagrant ssh

Una vez dentro de nuestra máquina virtual estaremos logeados por defecto con el usuario vagrant el cual tiene provilegios de root para que podamos instalar lo que necesitemos.

Sincronizar el código de nuestro proyecto con la máquina virtual

Con todo instalado procedemos a ejecutar el código de nuestro proyecto, dentro de la máquina virtual existe un directorio /vagrant/ en el cual encontramos todos los archivos de la carpeta donde se encuentre el archivo Vagrantfile de este modo podemos modificar los archivos de nuestro proyecto desde fuera de la maquina virtual sin ningun problema.

Forward de puertos

Supongamos que tenemos corriendo nuestra aplicación dentro de la máquina virtual en el puerto 80, para poder acceder a la aplicación por ejemplo desde http://localhost:8080 debemos configurar el forward de puertos, para esto descomentamos una linea de nuestro archivo Vagrantfile

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

Con esto le decimos a Vagrant que haga la configuración necesaria en la maquina virtual para que cuando accedamos desde el equipo real a http://localhost:8080 la petición vaya al puerto 80 de la máquina virtual.

Empaquetar el entorno de desarrollo

Una vez configurado e instalado todo lo necesario en nuestra maquina virtual podemos empaquetarla para usarla en otro equipo o sistema operativo, para esto ejecutamos vagrant package con esto se creará un archivo llamado package.box el cual es el empaquetado de nuestra máquina virtual y con el que podemos reporoducir el entorno de desarrollo facilmente.

Para usar nuestra maquina virtual empaquetada desde la otra maquina huesped tenemos que ejecutar los siguientes comandos

vagrant box add my-box package.box

Con esto agregamos nuestro box para poder crear maquinas virtuales en base a nuestra imagen my-box, cuando queramos crear una nueva maquina virtual en base a esta imagen simplemente ejecutamos

vagrant init my-box