:::: MENU ::::

Desarrollando con Vagrant

Desarrollando con Vagrant
3 votos, 4.00 media (80% puntos)

En este post os queremos enseñar como estamos planteando últimamente los entornos de desarrollo (en local) en nuestra oficina desde la llegada de Magento 2.

El problema que se nos platea y que intentamos resolver con Vagrant es que para cada proyecto necesitamos unas versiones diferentes de software a nivel de Apache / Nginx, MySQL, PHP, etc.

Hasta ahora, para trabajar en local en nuestros ordenadores, solíamos utilizar XAMPP o WAMP, con versiones mas o menos actualizadas que nos servían para todos los proyectos. Con esto hemos ido sobreviviendo varios años, pero con la llegada de Magento 2 y el salto en versiones para PHP y MySQL, se nos ha empezado a hacer muy complicado mantener este sistema.

La solución, después de probar bastantes cosas, parece que apunta al uso de Vagrant… pero ¿qué es Vagrant?

¿Qué es Vagrant?

Si buscáis un poco por diferentes foros, blogs y páginas de desarrollo, pero no habéis profundizado un poco en el tema, probablemente estaréis pensando, ¿qué demonios es este Vagrant del que todo el mundo habla tan bien?, ¿de verdad es esto tan bueno?, ¿qué me estoy perdiendo?

Pues simplificando el tema en pocas palabras y a riesgo de que alguno abandone antes de tiempo el post, Vagrant no es ni más ni menos que una forma fácil de crear máquinas virtuales en tu ordenador, con las características que tú quieras y con una serie de utilidades específicamente pensadas para el desarrollo de software.

Si habéis trabajado con Virtual Box o WMWare, Vagrant no os permitirá crear nada que no podáis crear con dichas aplicaciones (de hecho necesita de Virtual Box como forma de virtualización).

Eso sí, lo hace de una forma mucho más rápida, cómoda y cool…

¿Qué permite Vagrant?

Algunas de las ventajas que nos permite Vagrant Box son las siguientes:

VagrantFiles. Definición de la Vagrant Box.

Permite definir una Vagrant Box (máquina virrual) mediante ficheros de texto, de forma que podemos almacenar la definición de la VM en la carpeta de nuestro proyecto, e incluso en nuestro control de versiones y compartirla de ese modo con el resto del equipo de desarrollo, lo que permite que todos los desarrolladores tengan el mismo entorno.

Compartir Vagrant Boxes con otros usuarios

Podemos utilizar Vagrant Boxes creadas por otros usuarios y compartidas a través de Internet. Por ejemplo si alguien ya ha creado una Vagrant Box con versiones de Apache, MySQL y PHP adecuadas para ejecutar Magento 2, sólo tenemos que clonar esa Vagrant Box para comenzar de forma rápida.

En Internet existen numerosos sitios donde encontrar Boxes, con la mayoría de distribuciones linux y otras preparadas para el desarrollo bajo las plataformas más populares, entre otras, por supuesto Magento 1 y Magento 2.

Sincronizar carpetas de forma fácil

Permite sincronizar fácilmente el código en nuestro ordenador de trabajo (al que llamamos Host) y la Vagrant Box o máquina virtual (que llamamos Guest).

Mapear puertos de la máquina host a la máquina guest

Permite mapear puestos de nuestra maquina host a la máquina guest con una simple línea en la definición de la Vagrant Box. Olvídate de configurar redes privadas, IPs, etc.

Ejecutar múltiples máquinas virtuales simultáneamente

Permite crear múltiples máquinas virtuales desde un mismo archivo de configuración y arrancarlas y detenerlas de forma fácil y simultánea, lo que nos permite simular entornos de producción complejos con varios servidores.

Requisitos para instalar Vagrant Box. Proveedores de virtualización.

Antes de poder instalar Vagrant Box es necesario tener instalado lo que en Vagrant llamamos Proveedor de Virtualización.

Recordamos que Vagrant es un sistema que nos permite definir máquinas virtuales y aprovisionarlas con el software que queramos de forma fácil, pero no es el software de virtualización que permite que la máquina virtual se ejecute.

Para ejecutar la VM se basa en algún otro software específico para ello. Es lo que en la terminología de Vagrant se llama Proveedor de Virtualización. Vagrant soporta algunos proveedores por defecto, entre otros VirtualBox, VmWare e Hyper-V.

De todos ellos, VirtualBox es probablemente el más habitual y además es el proveedor por defecto, por lo que os recomiendo que si no tenéis preferencia, os decantéis por este proveedor.

Por lo tanto, antes de instalar Vagrant, deberéis instalar VirtualBox, y para ello podéis descargar el instalador desde https://www.virtualbox.org/wiki/Downloads

Instalar Vagrant en nuestro ordenador

Una vez elegido e instalado el proveedor de virtualización elegido, podemos pasar a la instalación de Vagrant.

Es igualmente sencillo. Únicamente tenemos que descargarlo de la página oficial (https://www.vagrantup.com/downloads.html) y ejecutar el correspondiente instalador.

El instalador no tiene opciones, así que únicamente es necesario aceptar y continuar con la instalación.

Ejemplo de Vagrant Box

Para construir nuestra máquina virtual, únicamente tenemos que iniciar un entorno de Vagrant en nuestra carpeta del proyecto y editar el archivo Vagrantfile, un archivo de texto que suele contener unas pocas líneas.

El primer paso por tanto es iniciar el entorno de Vagrant en nuestra carpeta de proyecto con el siguiente comando:

vagrant init

Con este comando Vagrant creará una carpeta .vagrant que almacenará nuestra máquina virtual (una vez la creemos) y algunos ficheros necesarios. También creará el archivo Vagrantfile, que contiene la definición de la máquina que queremos utilizar.

Inicialmente es sólo un esqueleto básico con muchos ejemplos de configuraciones que podemos realizar para nuestra Vagrant Box.

Si editamos este archivo, veremos que el contenido (una vez eliminados los comentarios) es algo así:

Vagrant.configure(2) do |config|
  config.vm.box = "base"
end

A continuación deberemos buscar una imagen para nuestra máquina virtual. Como comentábamos anteriormente, existe un repositorio oficial y público creado en https://atlas.hashicorp.com/boxes/search

(además de este repositorio, podemos encontrar otras Boxes en otros lugares, especialmente en GitHub. Os recomiendo investigar.)

Si por ejemplo queremos crear una máquina virtual Ubuntu para nuestra Vagrant Box, en el repositorio podremos encontrar fácilmente algo como esto:

Vagrant Box con Ubuntu

Con este identificador, podemos modificar nuestro Vagrantfile para que quede como sigue:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
end

Una vez guardado el archivo y sin salir de la carpeta del proyecto donde está guardado, simplemente tendremos que ejecutar el comando:

vagrant up

Con estos simples pasos hemos creado nuestra primera Vagrant Box y la hemos arrancado.

La primera vez que iniciamos la Vagrant Box debe descargarse del repositorio la imagen completa, con lo que puede tardar un poco. En los siguientes reinicios el proceso por supuesto es mucho más rápido.

De momento es simplemente una máquina virtual sin mucho más que el sistema operativo, pero un próximo tutorial explicaremos cómo sacarle el máximo partido.

Mientras tanto os recomiendo daros una vuelta por el repositorio de Vagrant Boxes y buscar y probar algunas otras Vagrant Boxes.

Comandos básicos Vagrant Box

Para gestionar nuestra Vagrant Box existen una serie de comandos básicos que debemos conocer. Ya hemos visto algunos, pero a continuación incluimos otros que necesitaremos en nuestro día a día con Vagrant.

Para iniciar un entorno de Vagrant en la carpeta del proyecto, usamos el ya mencionado:

vagrant init

Para arrancar la Vagrant Box según la configuración actual del Vagrantfile, el también ya mencionado

vagrant up

Para detener la Vagrant Box

vagrant suspend

Para resetear la Vagrant Box

vagrant halt

Para destruir la Vagrant Box (ojo, que esto destruye la máquina y todos sus datos)

vagrant destroy

Para conectarnos a la Vagrant Box por SSH

vagrant ssh



Hey! Qué opinas sobre el artículo?