Qué es Vagrant: instalación, ejecución, uso

Vagrant es un producto de HashiCorp, una empresa especializada en herramientas de automatización de desarrollo y operaciones. Permite crear y configurar entornos de desarrollo ligeros, reproducibles y portátiles.
La primera tarea de cualquier desarrollador en un nuevo proyecto es configurar el entorno. Por lo general, esto implica los siguientes pasos:
  • 1
    Clonar el repositorio del proyecto.
  • 2
    Instalar los paquetes necesarios para trabajar (por ejemplo, una biblioteca para XML).
  • 3
    Instalar programas adicionales, como una base de datos.
  • 4
    Configurar correctamente los parámetros de configuración.
Sin automatización, este proceso puede llevar horas o incluso días, dependiendo de la complejidad del proyecto. Y esto se aplica a cada persona en el equipo. Para cada cambio de máquina de trabajo o después de reinstalar el sistema. El problema se agrava porque cuanto más desarrolladores haya en el proyecto, más diversas serán las máquinas que utilizan, incluidos diferentes sistemas operativos. En este caso, el proceso de configuración será inevitablemente diferente, lo que es otra fuente de problemas. Todo el proceso de configuración debe estar documentado en algún lugar, pero por lo general, estas descripciones se vuelven obsoletas rápidamente y pocos están dispuestos a mantenerlas, y cualquier intento de mantenerlas actualizadas finalmente se desvanece.

Después de agregar un par de proyectos de este tipo, el sistema operativo se satura. Incluso si no estás trabajando en el proyecto, al encender la computadora, se iniciarán servicios que solo se necesitan para el desarrollo.

Otro problema son los cambios. Casi cualquier cambio en la configuración instalada requerirá intervención manual, instalación de paquetes adicionales, programas o cambios en la configuración.

Y por último, a menudo es necesario desplegar el proyecto para no programadores, como diseñadores o probadores. Incluso tener un proceso de instalación bien documentado no les ayuda mucho.

Ahora podemos intentar formular los requisitos para un entorno ideal:
  • 1
    Aislamiento. Esto evita posibles conflictos con otros entornos (por ejemplo, el sistema principal) y mantiene el sistema principal limpio.
  • 2
    Repetibilidad. Se puede recrear el entorno de trabajo en cuestión de minutos con un solo comando. Cualquier cambio se aplica de inmediato a todos.
  • 3
    Portabilidad. El entorno se puede implementar en cualquier sistema de una manera universal.
Vagrant fue creado para resolver precisamente estos problemas. En gran medida, su funcionamiento se basa en la virtualización, para la cual, de forma predeterminada, utiliza el producto VirtualBox. Pero a diferencia del trabajo normal con una máquina virtual, donde hay un sistema con una interfaz gráfica dentro de ella, Vagrant crea una máquina virtual accesible solo en modo terminal (a través de la línea de comandos), mientras que el desarrollo real se realiza en la máquina host y la ejecución del código se realiza dentro de la máquina. En otras palabras, el editor se instala en su sistema principal y el código también se encuentra en él. Vagrant transfiere el código a la máquina de forma transparente y permite su ejecución.
Preparación para el trabajo
El uso de Vagrant implica la configuración del sistema operativo y el conocimiento de ciertos conceptos:
  • Debes saber qué es la virtualización y cómo trabajar con máquinas virtuales.
  • La línea de comandos es la única forma de interactuar con Vagrant. Si tu sistema operativo es Windows, deberás configurarlo.
  • Conocimiento básico de redes y el concepto de puerto.
  • Tu computadora debe tener al menos 4 gigabytes de memoria RAM, aunque incluso con esta cantidad trabajar puede ser problemático. El nivel mínimo de comodidad es de 8 gigabytes.
Cómo instalar Vagrant
Lo primero que debes hacer es instalar un sistema de virtualización, como VirtualBox. Puedes descargarlo para tu sistema operativo aquí.

Luego, descarga el instalador de Vagrant para tu sistema operativo en la página de descargas.

Abre la terminal y asegúrate de que Vagrant esté funcionando:
vagrant -v
Inicialización
El diseño de Vagrant asume que creamos una configuración separada para cada proyecto (y, por lo tanto, una máquina virtual), en lugar de una configuración única para todos. La inicialización se realiza en la carpeta del proyecto correspondiente con el comando vagrant init ubuntu/xenial64. Como resultado de este comando, Vagrant creará el archivo Vagrantfile. Dentro del archivo se describe la configuración de la máquina virtual en el lenguaje Ruby. No importa si no estás familiarizado con él, el contenido del archivo es intuitivo y la documentación de Vagrant es bastante detallada.

Además de crear el archivo, Vagrant descargará una imagen del sistema operativo en tu máquina, que se almacena con el nombre ubuntu/xenial64. En este caso, se trata de Ubuntu 16.04. Vagrant admite un catálogo de imágenes creadas específicamente para trabajar con él. Si es necesario, puedes elegir otro consultando su nombre en el catálogo. Si abres el archivo Vagrantfile, verás que el nombre de la imagen está especificado dentro de la configuración:
Vagrant.configure('2') do |config|
  config.vm.box = 'ubuntu/xenial64'
end
Proceso de trabajo
Inicio

El inicio se realiza con el comando vagrant up. Esto crea la máquina virtual y la inicia. Si la máquina ya ha sido creada (en ejecuciones anteriores), solo se iniciará.

En este punto, ya puedes comenzar a trabajar con el código que se encuentra en la misma carpeta que el archivo Vagrantfile. Todos los cambios se aplicarán automáticamente dentro de la máquina virtual en ejecución.

Conexión

Para acceder a la máquina, se utiliza el comando vagrant ssh. Después de ejecutarlo, el terminal se conectará a la máquina en el directorio de inicio del usuario por defecto. Tradicionalmente, en Vagrant, este es el usuario con el nombre vagrant. Ahora debes cambiar al directorio /vagrant. Aquí es donde se encontrará el código del proyecto.

A partir de aquí, puedes proceder como de costumbre. Instala todos los paquetes y dependencias necesarios y luego ejecuta el proyecto. Si es un sitio web, se ejecutará en un puerto específico. Por defecto, todo lo que se inicia dentro de la máquina virtual solo está disponible internamente. Para poder acceder al sitio desde la máquina host (a través de tu navegador favorito), debes reenviar el puerto correspondiente al exterior. Esto se explica bastante detalladamente en la documentación de Vagrant. Supongamos que el sitio se inicia en el puerto 8080 dentro de Vagrant y deseas acceder a él desde el exterior. Para hacer esto, simplemente agrega lo siguiente a la configuración:
Vagrant.configure("2") do |config|
  # ...
  config.vm.network "forwarded_port", guest: 8080, host: 8080
end
Los cambios se aplicarán después de reiniciar la máquina. Para hacerlo, simplemente ejecuta el comando vagrant reload.
Detener

Al finalizar el trabajo, no olvides ejecutar vagrant halt, de lo contrario, la máquina seguirá ejecutándose y consumirá recursos. Si decides que es hora de eliminar todo y comenzar de nuevo, usa el comando vagrant destroy.
Configuración del sistema
La instalación de programas necesarios dentro de Vagrant de la manera tradicional no es la mejor manera de lograr la repetibilidad. Básicamente, este enfoque no difiere de la configuración del proyecto en el sistema principal. Para resolver el problema de la configuración, se utilizan herramientas de administración de configuración, como Ansible. Vagrant se integra bien con ellos. Puedes leer más al respecto en la documentación oficial, y en uno de los repositorios de Hexlet hay un ejemplo de esta integración.
Plugins
Vagrant se puede ampliar con plugins. Puedes encontrar una lista completa en la wiki.

El plugin más importante de todos ellos es vagrant-vbguest.

Sin entrar en detalles, hace que tu sistema siempre funcione correctamente cuando actualizas la máquina virtual. Sin él, puede suceder que después de actualizar la máquina virtual, veas que la carpeta con el código ya no se sincroniza y no está dentro de Vagrant.
Solución de problemas
  • Asegúrate de que en la BIOS estén habilitadas todas las opciones necesarias para el funcionamiento normal de la virtualización.
  • En Windows, usa nombres de usuario que no contengan caracteres cirílicos.
  • No ejecutes Vagrant como superusuario o administrador.
  • Si experimentas problemas de rendimiento, es posible que la forma en que se sincroniza la carpeta con el proyecto sea la causa. Vagrant permite configurar la forma de sincronización.
Leer otros artículos de Guías
Lea otros artículos relevantes del mundo de la tecnología y el espíritu empresarial.