VAGRANT - Entornos de trabajo independientes, replicables y elegantes

Joaquín Ignacio Villagra Pacheco
5 min readOct 22, 2018

--

En el presente artículo presento VAGRANT, una herramienta para crear y administrar entornos de máquinas virtuales con un flujo de trabajo estándar. Reduce el tiempo de configuración del entorno de desarrollo, permite recrear ambientes productivos para que no volvamos a recurrir al típico: “En mi maquina funciona…”.

Para comenzar, debes instalar VAGRANT y un ambiente de virtualización. Como recomendación por simplicidad de acceso, cito Virtualbox. Debes descargar la ultima versión del software y el virtualbox-extension-pack.

El software anteriormente requerido está disponible de forma gratuita y para todo sistema operativo :)

Comandos base

vagrant init: Crea una nueva instancia de virtualización. Cada instancia esta marcada por un directorio oculto (.vagrant ) y un archivo de configuración ( Vagrantfile).

vagrant up: Ejecuta todas las configuraciones presentes el archivo Vagrantfile y despliega la maquina virtual.

vagrant ssh: Accede al entorno virtual de trabajo mediante consola.

vagrant halt: Detiene la instancia de virtualización.

vagrant destroy: Elimina la instancia de virtualización y todas sus configuraciones, excepto el archivo de configuración Vagrantfile.

Paso 1 : Incializando una VM

En una consola del sistema ( Shell / Bash / cmd), crea un directorio ( mkdir directory_name), ingresa al directorio recién creado ( cd directory_name) y ejecutavagrant init . Con esto se generará un archivo Vagrantfile , en donde está almacenada la configuración base de cualquier entorno virtual que queramos desplegar.

Un archivo Vagrantfile por defecto luce así:

# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The “2” in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don’t change it unless you know what
# you’re doing.
Vagrant.configure(“2”) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = “box”
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing “localhost:8080” will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network “forwarded_port”, guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network “forwarded_port”, guest: 80, host: 8080, host_ip: “127.0.0.1”
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network “private_network”, ip: “192.168.33.10”
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network “public_network”
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder “../data”, “/vagrant_data”
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider “virtualbox” do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = “1024”
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision “shell”, inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end

El campo config.vm.box define el box de trabajo a levantar. VAGRANT cuenta con una comunidad que constantemente realiza configuraciones de entornos de trabajo especializados para un grupo de profesionales (Para revisar los box disponibles puedes consultar la web oficial de apps de Vagrant)

Paso 2: Descargando y desplegando la VM

En el archivo Vagrantfile , modifica el campo config.vm.box, indicando el box a utilizar. En mi caso, usaré ubuntu/trusty64 , el cual es una instalación limpia de un sistema Ubuntu LTS 14.04.

¿ Hasta ahora bien ? Lo que sigue es desplegar la instancia de virtualización. No te preocupes, solo debes ejecutar vagrant up y gestor de VAGRANT hará todo por ti.

Descargará la imagen del sistema a desplegar y efectuará las configuraciones necesarias en Virtualbox o el ambiente que hayas escogido. Este paso suele demorar más dependiendo de tu conexión a Internet.

EJEMPLO: Ejecución de vagrant up para el box ubuntu/trusty64

A este punto tendrás un sistema operativo andando, para acceder debes ejecutar vagrant ssh. Si no sabes lo que es SSH, nunca antes haz enfrentado el acceder a un servidor remoto de manera segura, te recomiendo revisar el siguiente articulo: ¿Qué es SSH y cómo funciona?

Si todo funcionó perfectamente, deberías ver algo similar a esto por tu terminal.

Conexión a Maquina Virtual — comando vagrant ssh

Paso 3: ¡Prueba lo que quieras!

Ya tienes un sistema independiente, puedes instalar el software que desees usar. Si cometes algún error de configuración no es problema, puedes volver a instalar otra instancia de virtualización y efectuar tus pruebas habiendo aprendido en base a la experiencia.

Instalación de los paquetes científicos de Python 3 (Matplotlib, Numpy y Scipy)

Próximos pasos

Espero que les haya gustado esta publicación y saquen todo el potencial que tiene esta herramienta. En el próximo artículo expongo como compartir carpetas, puertos y hacer otras configuraciones “avanzadas” con Vagrant.

Para acceder presiona aquí!

Saludos! Cualquier consulta o aporte es bienvenido :)

--

--

Joaquín Ignacio Villagra Pacheco

Master of Computer Science candidate. Interests Distributed platforms, big data, high performance computing, machine learning.