Muchas veces hemos tenido que desarrollar un proyecto en equipo o trabajamos en diferentes computadoras y nos encontramos con que la configuración al parecer no es la misma en todas las máquinas. Esto puede ser algo sencillo de solucionar o nos puede llevar un sin fin de horas, anda a saber qué es lo que configuramos mal o porque en una máquina funciona y en otra no.
Instalar el mismo entorno de trabajo una y otra vez es un trabajo repetitivo y agotador que nadie quiere realizar. Y ni que hablar si es en diferentes sistemas operativos. La compatibilidad entre sistemas operativos a mejorado y la mayoría de tecnologías tienen sus versiones para cada sistema pero estas generalmente tienen algunas diferencias. Lo mejor es trabajar siempre sobre el mismo sistema operativo por lo cual muchas veces una máquina virtual termina siendo una buena opción.
Las máquinas virtuales tienen grandes beneficios entre ellos nos permite correr el sistema operativo que queramos con su respectiva configuración sin afectar nuestro equipo. Te preguntaras que tiene que ver Vagrant en todo esto, pues vagrant nos permite instalar y configurar las máquinas virtuales de forma sencilla. Nos asegura que nuestro entorno siempre tenga la misma configuración.
¿Que es?
Vagrant es una herramienta que nos ayuda a crear y manejar máquinas virtuales con un mismo entorno de trabajo. Nos permite definir los servicios a instalar así como también sus configuraciones. Está pensado para trabajar en entornos locales y lo podemos utilizar con shell scripts, Chef, Puppet o Ansible.
Cabe destacar que vagrant no tiene la capacidad para correr una maquina virtual sino que simplemente se encarga de las características con las que debe crearse esa VM y los complementos a instalar. Para poder trabajar con las máquinas virtuales es necesario que también instalamos VirtualBox , Docker o hyper-v.
¿Para qué Sirve?
Como hemos venido mencionado vagrant sirve para ayudarnos a crear y configurar máquinas virtuales con determinadas características y componentes. La gran ventaja de vagrant es que posee un archivo de configuración Vagrantfile donde se centraliza toda la configuración de la VM que creamos. Lo genial de vagrant es que puedes utilizar el vagrantfile para crear una VM exactamente igual cuantas veces quieras y es super liviano lo puedes agregar a tu repo o enviar por mail a tus compañeros de trabajo.
Vagran no está pensado para trabajar con grandes cantidades de máquinas virtuales, para infraestructuras más complejas existen otras herramientas como Terraform que pertenece a la misma empresa HashiCorp.
Instalación
Para comenzar vamos a instalar Vagrant, para ello podemos descargar el instalador desde el sitio oficial o si utilizamos linux podemos instalarlo corriendo los siguientes comandos
sudo dnf install vagrant -y
Si vamos a utilizar docker como proveedor es necesario instalar el siguiente complemento
sudo dnf install vagrant-lxc
Para verificar que hemos instalado Vagrant correctamente abrimos una consola y corremos
vagrant version
y nos mostrará algo como esto si se instalo correctamente
Installed Version: 2.1.5 Latest Version: 2.1.5 You're running an up-to-date version of Vagrant!
Antes de comenzar a crear nuestros container con Vagrant vamos a necesitar instalar Docker, VirtualBox o Hyper-v , puedes ver como instalar Docker en uno de nuestros tutoriales sobre docker aquí.
Para ver como instalar VirtualBox o Hyper-v puedes visitar sus sitios oficiales .
Docker Provider
Ahora sí ya podemos proceder a crear nuestro primer container utilizando Vagrant.
Lo primero que debemos hacer es crear una carpeta donde se guardará la configuración y ahí mismo crear un archivo vagrantfile, para ello corremos el comando
vagrant init
Luego con el editor de nuestra preferencia editamos el archivo para que cree el container a nuestra media. Hay dos formas en que podemos crear un container de manera sencilla, en este tutorial veremos cómo crear un container desde una imagen pero también se puede crear desde un dockerfile.
Desde Docker Imagen
Para crear un container desde una imagen primero debemos descargarnos una imagen que la guardaremos en el mismo directorio que el archivo vagrantfile. Luego colocamos en el vagrantfile una configuración como la siguiente, si queremos utilizar nuestra propia imagen
Vagrant.configure("2") do |config| config.vm.provider "docker" do |d| d.image = "prueba" end end
También podemos utilizar Vagrant para que descargue la imagen automáticamente desde el registro de Docker, por ejemplo
Vagrant.configure("2") do |config| config.vm.provision "docker" do |d| d.pull_images "centos6.6" d.pull_images "vagrant" end end
Luego ejecutamos
vagrant up
Vagrant comenzará a crear el container a partir de la imagen, en este archivo también podemos indicarle configuración extra para que instale servicios, complementos, etc. Puede que sea necesario correr vagrant up bajo el comando sudo, pero no con el usuario root.
Para acceder a nuestro container lo hacemos como de costumbre
sudo docker start prueba sudo docker attach prueba
VirtualBox Provider
Utilizar virtualBox con vagrant es super fácil y podemos crear y configurar nuestra máquina virtual solo con un archivo y un box. Un box es una máquina virtual previamente construida y con un usuario asignado, podemos encontrar algunas que ya vienen con Apache instalado u otros servicios.
Para descargar un box podemos utilizar el comando vagrant box add + el nombre de la imagen que queremos descargar, en este caso vamos a descargar centos 6 de 64bit
vagrant box add genebean/centos6-64bit
Para ver nuestra lista de boxes descargadas utilizamos el comando
vagrant box list
Ahora para crear nuestra máquina virtual debemos editar el Vagrantfile, lo podemos crear con el comando
vagrant init
En este caso vamos a instalar también Nginx, PHP 5.6 y MariaDB utilizando shell script en el mismo archivo
Vagrant.configure("2") do |config| config.vm.box = "genebean/centos6-64bit" config.vm.provision "shell", inline: <<-SHELL yum update yum install -y nginx yum install -y epel-release rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm yum install -y php56w-fpm php56w-opcache yum replace php-common --replace-with=php56w-common yum -y install --enablerepo=remi,remi-test mysql mysql-server SHELL end
Esto nos creara una máquina virtual con el sistema operativo Centos 6 y los servicios antes mencionados. Para poder acceder a la MV basta con correr el comando
vagrant ssh
Esto por supuesto nos proporcionará acceso SSH a nuestra maquina virtual, gracias a un archivo .vagrant donde se guarda la IP, usuario, contraseña y puerto para acceder a la MV.
Si queremos cerrar nuestra MV lo podemos hacer utilizando el comando
vagrant halt
Y si queremos destruir la máquina virtual junto con todo su contenido corremos
vagrant destroy
Conclusión
Como hemos visto en esta breve introducción Vagrant es muy fácil de instalar y utilizar, permitiéndonos configurar entornos locales solo con un par de comandos. Además, nos proporciona la seguridad de que todos los entornos que creemos con el mismo vagrantfile serán iguales.
Utilizar máquinas virtuales o contenedores a la hora de configurar un entorno de trabajo es super importante ya que nos permite tener diferentes configuraciones en un mismo equipo. También nos aseguramos de que una configuración no afecta a otra permitiéndonos trabajar con distintos lenguajes en simultáneo. Y si algo se rompe solo volvemos a crear nuestro entorno utilizando vagrant.
Quizás te interese leer: