Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps
Code

Introducción a Vagrant

by
Difficulty:IntermediateLength:MediumLanguages:

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Vista General

Vagrant te permite administrar y controlar fácilmente múltiples máquinas virtuales. Está construido sobre VirtualBox y VMWare, y proporciona muchas capacidades emocionantes. Puedes crear entornos aislados de desarrollo, experimentar con nuevos productos y tecnologías, instalar nuevas versiones de paquetes existentes, crear tu propio centro de datos privado en tu laptop, y ejecutar diferentes sistemas operativos. Todo eso está disponible en un silo fácil de administrar y totalmente seguro que no puede interferir con tus actividades principales y sistema operativo.

En este tutorial, te mostraré cómo configurar Vagrant y comenzar a explorar la riqueza de oportunidades que permite.

Vagrant recientemente agregó soporte para contenedores Docker también, pero no discutiré eso en este tutorial.

Instalación

  1. Descarga el VirtualBox gratuito para tu sistema operativo desde el sitio web de VIrtualBox.
  2. Después de la descarga, solo ejecuta el binario e instálalo.
  3. Descarga Vagrant.
  4. De nuevo, solo ejecuta el binario e instálalo.

Inicilizando Vagrant

Vagrant es una herramienta basada en línea de comando. Una vez que la instalación está completa, abre una ventana de consola y crea un nuevo directorio llamado 'vagrant_intro'.

Este será tu directorio de trabajo desde ahora. Dentro del directorio vagrant_intro, teclea:

vagrant init ubuntu/trusty64

Deberías ver el siguiente texto:

El 'Vagrantfile' generado es un archivo Ruby que controla tus (una o más) máquinas virtuales. Es un archivo bastante grande con muchas opciones comentadas. Recorreré las importantes después, pero vamos a probarlo primero. Teclea: vagrant up.

Esto ocasionará que Vagrant descargue una caja virtual preparada con la liberación de 64-bits Ubuntu 14.04 (confiable). Tomará un poco (varios minutos) y arrojará mucho texto a tu pantalla. Mientras Vagrant está revolviendo, hablemos de lo que es una Máquina Virtual en términos prácticos.

Una vista (la cuál usualmente adopto) es que la MV simula un servidor remoto. Solo deberías comunicarte con esta a través de su interfaz de red. Esto es particularmente útil para probar sistemas distribuidos en donde no deberías sacar ventaja de ninguna interfaz MV-huésped porque no están disponibles para tu sistemas de producción. Cuando se opera de este modo, normalmente te comunicarás con tu MV sobre SSH (posiblemente con una herramienta como Ansible).

Otra vista, que también es totalmente correcta y válida, es pensar en la MV como otro SO corriendo sobre tu máquina local. Esta vista es útil si quieres desarrollar directamente en tu SO meta.

Por ejemplo, una configuración muy común es que desarrolladores escriban su código en una Mac usando Mac OS X, pero desplegar a un entorno de producción Linux. Si quieres asegurarte de que el código que desarrollas en la Mac se ejecuta apropiadamente en Linux sin tener que desplegar un servidor remoto, puedes sacar ventaja de carpetas sincronizadas en donde lees y escribes los archivos en el SO huésped (típicamente Mac OS X) y tenerlos disponibles inmediatamente en el SO huésped (típicamente Linux).

Esto deshecha el paso "desplegar" del ciclo editar-desplegar-probar cuando se trabaja con sistemas remotos. También remueve la necesidad de un entorno de andamiaje expansivo que es un recurso compartido y necesita ser administrado cuidadosamente a lo lago de todos los desarrolladores. Con una MV virtual, nadie va a romper tu entorno, y puedes experimentar tanto como quieras sin preocuparte por romper el código de alguien más.

Puedes, por supuesto, usar ambas carpetas sincronizadas y aún hacer SSH a tu MV. Hay otras opciones para reducir las fronteras tales como mapeo de puertos.

El Vagrantfile

Aquí está una versión reducida del Vagrantfile con algunas de las opciones más importantes:

La sintaxis es Ruby, lo que te da mucha flexibilidad si quieres agregar condicionales y ciclos. Esto es particularmente útil si usas tu Vagrantfile para administrar un grupo de máquinas virtuales. 

Conectando a Tu MV

Puedes conectarte a tu MV en ejecución tecleando: vagrant ssh.

Esto lanzará una sesión SSH y te permitirá manipular tu MV de manera interactiva.

Una vez dentro de tu MV, puedes hacer prácticamente cualquier cosa que quieras, ejecutar comando, crear usuarios, crear archivos y directorios, etc. Inicias sesión como el usuario 'vagrant',  que tiene privilegios sudo, así que tienes control total sobre la MV.

Intercambiando Datos Con Tu MV

Vagrant mapea automáticamente la carpeta sobre la máquina huésped que contiene el Vagrantfile al directorio /vagrant dentro de la máquina huésped. Esto te permite editar archivos en tu editor favorito sobre la máquina huésped y tenerlos disponibles en el invitado o de manera alternativa hacer que el invitado escriba algún archivo de salida al directorio /vagrant y navegar la carpeta sincronizada en el anfitrión.

Mapeando Puertos de Invitado

Frecuentemente querrás ejecutar alguna aplicación que se comunique a través de un puerto. El más común es un servidor web. Vagrant te permite enviar puertos a la máquina anfitrión.

Por ejemplo, en la configuración de arriba, el puerto invitado 80 está mapeado al puerto 8080 del anfitrión. Lo que eso significa es que cualquier servicio ejecutándose en el puerto 80 en el invitado puede ser accedido como localhost:8080 en la máquina anfitrión.

Veamos una demostración. Primero, pondré un simple archivo index.html en el directorio ~/vagrant_intro en el anfitrión que está sincronizado con el directorio /vagrant_data en el invitado.

Entonces, después de que hago SSH a la máquina invitada, ejecuta un pequeño servidor web en el directorio /vagrant_data:

Este servidor HTTP Python de una sola línea simplemente sirve como cualquier archivo estático en su directorio de trabajo. Ahora, ya que el puerto 80 está mapeado al puerto 8080 del anfitrión, puedes navegar a localhost:8080 y ver el resultado de ejecutar el servidor.

Conectando a la MV a Través de la Red

También puedes conectarte a la MV a través de su dirección IP como si realmente fuer aun servidor separado. Siempre agrego un nombre de anfitrión a /etc/hosts para que tener que usar una dirección IP abierta y debido a que el código que estoy probando usualmente está configurado con el nombre de anfitrión de un sistema de producción. Esto es lo que necesitas agregar a tu archivo /etc/hosts:

Ahora, cualquier acceso de red a "production.server.com" en tu máquina será enviado a tu MV.

En este caso, los programas que usualmente se conectan al servidor remoto están configurados con la dirección IP o nombre de anfitrión de la MV. Anterior a Vagrant 1.7, había una sola llave privada que podría ser usada para todas las máquinas. Esto era un problema serio de seguridad cuando la gente exponía su máquina virtual sobre redes públicas y cualquiera podría entrar con SSH y obtener acceso root. Comenzando con la versión 1.7, Vagrant genera un par nuevo de llaves para cada máquina. Para averiguar en donde está la llave privada para tu máquina, ejecuta este comando: vagrant ssh-config.

Aquí está cómo puedes hacer SSH directamente a la MV:

Administrando Tus Cajas Virtuales

Vagrant proporciona muchos comandos para administrar cajas. Exploremos. Para ver una lista de comandos, teclea: vagrant.

Cubrí algunos de los comandos más comunes anteriormente. El comando box te permite administrar tus cajas directamente. Por ejemplo, para ver todas las MV en tu máquina, teclea vagrant box list. Puedes actualizar cajas a la última versión con update. El comando reload es muy útil si cambias tu Vagrantfile. Por último, provision te deja suministrar, configurar e instalar software en tu MV usando varios proveedores incluyendo Chef, Puppet, Salt, mi favorito Ansible, e incluso Docker.

Conclusión

Vagrant te da una computadora fácil de usar dentro de otra computadora. Puedes administrar una flotilla de MVs para diversos propósitos, y el Vagrantfile es tu interfaz para especificar cómo se debería comportar la MV. Diviértete explorando Vagrant. Solo raspé la superficie aquí.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.