Qué es Vagrant, cómo trabajar con Vagrant

  • Por
Cómo trabajar con Vagrant, el sistema para crear entornos de desarrollo profesionales, programas a instalar y procedimientos a realizar para crear un servidor perfectamente configurado.

En este artículo vamos a hablar de una herramienta que sin duda nos interesa a todos los desarrolladores y más todavía a los que trabajamos en tecnologías abiertas y en arquitecturas cliente / servidor, como puede ser la web.

Se trata de conocer Vagrant, una herramienta que nos permite crear cualquier entorno de desarrollo basado en máquinas virtuales. Ofrece una interfaz fácil de usar para crear servidores perfectamente configurados e independientes del sistema operativo del desarrollador. Pero además lo hace de una manera rápida y que elimina cualquier tipo de necesidad de configuración por los desarrolladores, que pueden concentrarse en lo que realmente importa, que es mejorar la productividad de su trabajo.

Vagrant es un proyecto open source, compatible con cualquier sistema operativo y que todo equipo de desarrollo debería usar, para poder facilitar la vida tanto a desarrolladores como jefes de proyecto.

Problemática de los entornos de desarrollo

Por lo general, en un proyecto cada programador desarrolla en local. Cada uno es responsable por instalar todos esos paquetes de software en su máquina y actualizar las versiones, configurar las librerías, etc. No son fuera de lo común situaciones como estas:

  • Algo que te funciona a ti no le funciona a otros
  • Alguien agregó una librería nueva o cambió la configuración de un software no lo documentó
  • Otro software en la máquina de uno de los desarrolladores está provocando problemas en la instalación del proyecto
  • Algo que funciona en local no funciona en remoto
  • Entra un nuevo desarrollador en el proyecto y hay que perder un tiempo explicando cómo instalar el entorno

Este problema se agrava cuando estás trabajando con varios desarrolladores y varias herramientas (lenguajes, bases de datos, librerías…) y además sus versiones. En general se tiende a generar un abanico grande de configuraciones, presente en cada uno de los entornos de desarrollo de cada uno de los componentes del equipo. A medida que el proyecto crece y tiene más y más dependencias, ésto que suele derivar en mayores problemas.

Luego está el típico problema de que unos desarrolladores trabajan en Windows y otros en Mac y luego el servidor de producción está en Linux. Cuando lo interesante es contar con un entorno de desarrollo lo más parecido posible al entorno donde la aplicación va a ejecutarse en producción.

Solución: virtualización

La solución pasa porque todos los componentes del equipo de desarrollo trabajen sobre un mismo entorno, configurado de la misma manera y con los mismos "ingredientes" que se van a tener en el servidor de producción. Todo eso se puede conseguir mediante la virtualización de una máquina en los ordenadores de los componentes del equipo de desarrollo. Cada uno tiene su propia máquina virtual y desarrolla sobre ella. Entre todos pueden compartir el estado de la máquina, para que las configuraciones de uno de los desarrolladores se repliquen en las virtualizaciones de los otros.

Esa idea parece es un poco complicada si no tienes una herramienta como Vagrant, pues te tocaría más o menos hacerlo todo desde cero con VirtualBox u otro software de virtualización, y configurar todo paso por paso. Tendrías que crear la máquina, instalar desde cero el sistema operativo, configurar la red, instalarle los programas o librerías que necesitas, etc.

Te obligaría a tener muchos mayores conocimientos de sistemas, para poder realizar las configuraciones y del software de virtualización que se esté usando, para organizar las carpetas compartidas y cosas así. Además estaría por resolver el problema de sincronización de la máquina con todos los desarrolladores del equipo, y la necesidad de largas esperas para aprovisionar los entornos de desarrollo cuando éstos cambian.

Vagrant es un software por encima que nos permite solucionar todos esos problemas, creando una interfaz de configuración sencilla e independiente del sistema de virtualización que cada cual use, como VirtualBox, VMware, Parallels, etc.

Puedes encontrar más información de Vagrant en la página del proyecto. https://www.vagrantup.com/

Te puedes hacer a la idea que Vagrant es como una capa por encima de tu software de virtualización, que te ofrece funcionalidades orientadas a la creación de máquinas virtuales para desarrollo. Esas máquinas se pueden configurar por medio de un archivo de texto y compartir con el resto del equipo el mismo archivo para que todos puedan crear máquinas virtuales exactamente igual a la tuya.

Herramientas que facilitan el trabajo con Vagrant

Así como Vagrant es una capa por encima de VirtualBox o VMWare, encima de Vagrant también encontramos otras herramientas o capas que hacen un completo ecosistema que nos puede facilitar mucho la vida.

Un referente es PuPHPet, un sitio web que tiene una especie de asistente que te permite crear máquinas con diferentes características, distribuciones de Linux, servidores, firewall, lenguajes, librerías, etc. Una vez finaliza el asistente simplemente tienes que descargar el archivo de configuración para que, al crear la máquina con Vagrant, te la configure tal como le has indicado en el asistente.

Osea, puedes entender PuPHPet como el complemento ideal de Vagrant si no eres administrador de sistemas, ya que nos permite crear máquinas con entornos perfectamente configurados de una manera totalmente automática, sin tener que lidiar nosotros con la configuración de elementos tales como servidores web, lenguajes como PHP, NodeJS, Ruby, etc., motores de bases de datos, etc. con sus configuraciones.

En su sitio web podrás encontrar más información. https://puphpet.com/

Trabajar con Vagrant

Es una estupenda manera de gestionar tus entornos de desarrollo de una manera independiente y pormenorizada, que permite salvar decenas de los problemas a los que te has enfrentado en cientos de ocasiones. Vagrant es una de esas herramientas que seguro que en poco espacio de tiempo ocuparán un lugar destacado en cualquier equipo de desarrollo. Pero ¿Cómo puedo comenzar a trabajar con Vagrant? ¿Es muy difícil que tenga todo esto disponible para mis entornos de desarrollo?

Ahora vamos a dar algunas pautas de uso que nos permitirán crear nuestros entornos de desarrollo virtualizados, configurados a nuestro antojo, de una manera muy sencilla gracias a PuPHPet. Finalizaremos el artículo con la máquina virtual para desarrollo configurada, en la que seremos capaces de colocar archivos para que se vean a través del servidor web instalado.

Software necesario para trabajar

Para trabajar con Vagrant necesitamos instalar dos programas de los que ya hemos hablado, por un lado necesitamos el software de virtualización y por otro lado el propio Vagrant.

En cuanto al software de virtualización nos decantaremos por VirtualBox, ya que es gratuito y multiplataforma. Obtenerlo es tan fácil como ir a la página de VirtualBox virtualbox.org y en la sección de downloads escoger la de nuestro sistema operativo.

Para instalar Vagrant también tenemos versiones para cada sistema operativo, de nuevo es tan sencillo como ir a la página de Vagrant vagrantup.com y seleccionar la descarga que se ajusta a nuestro sistema. También es un software gratuito.

Crear nuestra configuración deseada

Si tuviéramos que crear un servidor correctamente configurado "a mano" tendríamos que saber mucho de sistemas. No solo saber qué programas se necesitan, sino saber además como instalarlos y configurarlos para trabajar en la máquina virtualizada. Pero incluso para personas que no sabemos demasiado en ese campo, usando las herramientas correctas lo tenemos muy fácil.

En nuestro caso vamos a trabajar con PuPHPet, un sitio web que contiene una especie de asistente por el que irás recorriendo y definiendo, por sencillos formularios, todas las características de la máquina deseada. Luego con el archivo de configuración que nos prepara PuPHPet seremos capaces de crear nuestra máquina con las características indicadas.

Entrando en la página de PuPHPet puphpet.com encuentras el sistema que resulta bastante explicativo. En este artículo vamos a explicar algunas cosas fundamentales y tendremos tiempo más adelante de hablar en detalle de sus diversas opciones.

En la primera sección que encontramos del asistente, llamada "Deploy target" tenemos que seleccionar si queremos que PuPHPet prepare la configuración para crear una máquina en local o si esa configuración la queremos para desplegar la máquina en entornos de "cloud hosting". Nosotros seleccionaremos "Locally", marcando el checkbox "Deploy to Local Host".

Dentro de la opción marcada en "Locally" tenemos además de configurar la distribución de Linux a instalar en la máquina que se va a virtualizar, pudiendo elegir entre varias como Ubuntu, Debian, CentOS, y varias versiones. Aquí es a gusto del consumidor. También aquí tendrás que indicar el nombre del servidor y la IP de la máquina virtual. Esa es la IP que usaremos inicialmente para acceder a esa máquina virtual, desde nuestro ordenador. Más tarde en este artículo insistiremos sobre ello.

Luego irás pasando entre las diversas secciones que hay a continuación del asistente. Encontrarás secciones que te permitirán seleccionar el tipo de servidor web que será instalado, los lenguajes que se desea tener disponibles, las reglas del firewall, si se desea tener un servidor seguro con ssl, aplicaciones adicionales en el servidor, etc. Muchas veces si no sabemos lo que hacemos es simplemente dejar las opciones predeterminadas. Trataremos el detalle más adelante.

Descargando la configuración e iniciando la máquina virtual

En el último paso de PuPHPet, llamado "Create Archive", encontraremos el botón "Go ahead..." para descargar nuestras configuraciones. Lo tienes bien grande en color destacado con verde. Además esta página acompaña una serie de indicaciones para que puedas seguir el proceso a partir de aquí y terminar de gestionar la instanciación de la máquina virtual para desarrollo.

Descargado el archivo para crear nuestra máquina con las configuraciones verás que es un zip con un directorio. Ese directorio lo debes colocar en tu disco duro, descomprimido. La localización del archivo descomprimido es indiferente, aunque generalmente lo pondrás en la carpeta donde guardas tus proyectos. La carpeta descomprimida está nombrada de una manera un poco rara, con una serie de caracteres que parecen aleatorios, por lo que te recomiendo cambiarle el nombre, para darle alguno que te facilite recordar a qué proyecto corresponde esa carpeta.

Nota: Si tienes curiosidad y para aprender un poco más, sería interesante que abrieses el archivo "Vagrantfile" y el archivo "puphpet/config.yaml", que contienen las configuraciones básicas generadas desde el asistente. Sobre todo el .yaml tendrá mucha información que te resultará familiar.

Luego te tienes que dirigir a esta carpeta desde la línea de comandos del sistema, el terminal. Una vez dentro de esa carpeta (la que tiene el archivo "Vagrantfile") lanzarás el siguiente comando para hacer el despliegue de la máquina.

vagrant up

Ese comando realizará el aprovisionamiento de tu máquina, instalando y configurando todos los paquetes de software que sean necesarios, por haberse indicado durante el asistente de puPHPet. El proceso durará un rato, así que te puedes relajar. Sobre todo la primera vez que lo ejecutas será más lento, porque tiene que descargarse la "box" de vagrant que hayas seleccionado y pesa varias centenas de megas.

Nota: "Box" en la terminología Vagrant es la imagen del sistema operativo que se va a usar de base para crear el servidor de desarrollo, Ubuntu, Debian o aquella seleccionada.

Acabado el proceso podemos ya comenzar a trabajar con nuestra máquina.

Acceso al servidor web y carpetas locales

Observarás que en la carpeta de tu proyecto se habrán generado diversas carpetas adicionales. Esas carpetas contienen un enlace a las carpetas de publicación del servidor web. Sus nombres pueden depender de lo que hayas configurado desde el asistente de puPHPet.

La carpeta "html" deberá estar y abriéndola comprobarás que tienes unos archivos que son los de bienvenida de tu servidor web. Ese es el punto raíz de publicación de Apache. Cualquier archivo que coloques en esa carpeta será como si lo colocases en el "localhost" de esa máquina.

Para acceder a esos archivos desde el navegador usarás la IP que hayas configurado en la máquina virtual que acabas de crear. Desde tu navegador escribirás la URL con la IP configurada que será algo como esto:

http://192.168.56.101/

Nota: 192.168.56.101 es la IP marcada de manera predeterminada en puPHPet, sin embargo tú la puedes haber cambiado en la sección "Locally" del asistente.

Accediendo a esa IP encontrarás exactamente lo mismo que tienes en el directorio "html". Por lo que podrás desarrollar en local colocando todo lo que quieras en dicha carpeta y visualizarlo desde el servidor web a través de la IP del servidor.

Con esto tienes los primeros pasos con Vagrant completados, pero aún queda mucho por aprender. Tengo pendiente escribir sobre los virtualhost y las carpetas de proyecto, problemas habituales que puedes encontrar en Vagrant, comandos básicos, estructura de carpetas del servidor, etc. Será dentro de poco. De momento puedes encontrar un vídeo de un #programadorIO sobre entornos profesionales que emitimos hace poco.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

japenagos

03/7/2015
Excelente articulo
En tan solo unos minutos pude configurar mi primer ambiente de desarrollo ágil con Vagrant. Excelente.

Varekay88

12/10/2015
Vagrant
No se nada de configuraciones pero con esta herramienta es mas sencillo configurar un entorno de desarrollo... haber que tal quedo mi entorno saludos

Ab3

15/12/2015
Como compartir entorno?
De que forma haría para compartir un entorno ya creado, con dos maquinas diferentes, es decir, tengo mi pc del trabajo y de la casa, la idea es tener el mismo entorno, osea los mismo proyectos, la misma base de datos.

Desde ya gracias!!

Jose

03/6/2016
Gracias
Gracias por estos articulos y como decimos aqui gratis que es mejor jeje.
Felicitaciones Miguel ahora ya tengo un mejor conocimiento de estas herramientas y adelante hombre...