Tutorial Vagrant 1: Qué es y cómo usarlo

Qué es Vagrant y por qué usarlo

Vagrant es una herramienta para desarrolladores que facilita la creación de entornos virtuales para desarrollo. En Vagrant podemos instalar y configurar software en una máquina virtual para que podamos simular que estamos en el servidor en el que se alojará la aplicación Web. La principal ventaja que encuentro es que si queremos desarrollar una aplicación Web, no tenemos que configurar nada en nuestro ordenador y llenarlo de programas como Apache, Nginx, PHP, MySQL, etcétera. Vagrant tiene "cajas" con sistemas operativos para desarrollar directamente en ellos. Si por ejemplo queremos una máquina virtual con LAMP o Node.js, podemos descargarla y configurarla en un momento para tener todo listo y ponerse a programar.

El hecho de no tener que configurar nada en nuestro ordenador hace que si rompemos algo, sea en la máquina virtual, además de que no tendremos nada instalado que no queramos.

Instalación

Antes de nada, tenemos que instalar VirtualBox si no lo tenemos ya.

Para instalar Vagrant tenemos que ir a la página oficial de descargas y seleccionar la versión más reciente. A día de hoy es la 1.6.5.

Como vemos en la imagen, tenemos los ejecutables para cada sistema operativo. Yo estoy utilizando Elementary OS Freya 64 bit (basada en Ubuntu 14.04), por lo que descargaré el .deb de 64 bit para esta plataforma.

Si estamos en Linux, desde la terminal vamos a ejecutar el siguiente comando dentro de la carpeta donde se haya descargado Vagrant:

$ sudo dpkg -i vagrant_1.6.5_x86_64.deb

Tras esto, comprobamos que está instalado correctamente ejecutando:

$ vagrant -v

Y tendremos que ver la versión actual. Si no, es que no se ha instalado correctamente.

VAGRANT FUNCIONA CON "CAJAS"

La ventaja de Vagrant es que podemos utilizar sistemas virtualizados con determinadas herramientas. Si quiero un entorno de desarrollo con PHP, MySQL y Apache, puedo configurar una "caja", configurarla rápidamente y utilizarla. De esta manera, podemos tener un entorno virtualizado en cuestión de minutos y sin tener que estar instalando todo cada vez que comencemos un proyecto.

Si entramos a la página de cajas de Vagrant encontraremos todas las máquinas disponibles. Elegiré la Ubuntu 14.04 de 64 bits y le instalaré LAMP como ejercicio de iniciación.

CREACIÓN DE UNA MÁQUINA

Para llevar a cabo este tutorial vamos a crear una nueva carpeta en nuestro ordenador. La llamaremos tutovagrant:

$ mkdir tutovagrant $ cd tutovagrant

Para montar una máquina virtual con Vagrant tenemos que crear un archivo llamado Vagrantfile, el cual contiene la configuración necesaria para utilizarla. Si la creamos con el comando vagrant init por defecto viene con un contenido bastante extenso a modo orientativo, pero casi todo está comentado. Por ahora, el archivo va a tener el siguiente contenido:

# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Insert config options here end

Ahora vamos a ir añadiendo la configuración de Vagrant en el comentario "Insert config options here".

config.vm.box = "ubuntu/trusty64"

  • Redireccionamiento de puertos. Lo más probable es que estemos desarrollando una aplicación Web. Si no, no creo que usemos Vagrant sin razón. Al estar desarrollando cualquier aplicación, no sólo una Web, queremos ir probándola durante el proceso. Pero, ¿cómo accedemos a la máquina virtual Vagrant que acabamos de crear a través del navegador? Muy fácil. Apache estará escuchando en el puerto 80, pero si intentamos acceder a http://localhost:80, no funcionará. Para que funcione bien tenemos que hacer un redireccionamiento de puertos, es decir, que simularemos que el puerto 8080 (es el que suelo utilizar cuando desarrollo) es el 80 de la máquina virtual. Añadimos la siguiente línea:

config.vm.network "forwarded_port", guest: 80, host: 8080

  • Red privada. Si en lugar de acceder por localhost, queremos hacerlo por IP, añadimos lo siguiente:

config.vm.network "private_network", ip: "192.168.33.10"

  • Carpetas compartidas. Ya que nuestro objetivo es desarrollar una aplicación Web, tenemos que programar. El código que desarrollemos estará en nuestro ordenador, no en la máquina virtual. La carpeta donde tendremos el proyecto Web se va a llamar htdocs y va a sincronizarse con /var/www/html dentro de la máquina virtual. Para compartirlo con ella, haremos lo siguiente:

config.vm.synced_folder "htdocs", "/var/www/html"

  • Instalar y configurar el entorno de desarrollo. Para instalar LAMP, vamos a añadir las instrucciones a un archivo llamado config.sh, que editaremos en el siguiente paso. En él estarán los comandos de instalación y se ejecutará automáticamente al crear la máquina. Añadimos la siguiente línea:

config.vm.provision "shell", path: "config.sh"Contenido completo del archivo Vagrantfile: # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu/trusty64" config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "private_network", ip: "192.168.33.10" config.vm.synced_folder "htdocs", "/var/www/html" config.vm.provision "shell", path: "config.sh" end

CREACIÓN DEL ARCHIVO DE INSTALACIÓN DE LAMP

Como he mencionado antes, vamos a tener el archivo de instalación de LAMP llamado config.sh, que se ejecutará de forma automática al iniciar la máquina. Este archivo lo he escrito basándome en este tutorial que ya redacté en Geeky Theory. El contenido es el siguiente: #!/bin/bash # Update server apt-get update apt-get upgrade -y # Install essentials apt-get -y install build-essential binutils-doc git -y # Install Apache apt-get install apache2 -y #Install PHP apt-get install php5 libapache2-mod-php5 php5-cli php5-mysql -y # Install MySQL echo "mysql-server mysql-server/root_password password root" | sudo debconf-set-selections echo "mysql-server mysql-server/root_password_again password root" | sudo debconf-set-selections apt-get install mysql-client mysql-server -y # Install PhpMyAdmin echo 'phpmyadmin phpmyadmin/dbconfig-install boolean true' | debconf-set-selections echo 'phpmyadmin phpmyadmin/app-password-confirm password root' | debconf-set-selections echo 'phpmyadmin phpmyadmin/mysql/admin-pass password root' | debconf-set-selections echo 'phpmyadmin phpmyadmin/mysql/app-pass password root' | debconf-set-selections echo 'phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2' | debconf-set-selections apt-get install phpmyadmin -y # Restart Apache service service apache2 restartNota importante: los 'echo' del archivo sirven para que se configuren automáticamente el usuario y contraseña de MySQL y PhpMyAdmin, ya que no podemos ver la ventana con el campo de texto. Por defecto es root/root.

CONTENIDO DE LA CARPETA HTDOCS

Como contenido de la carpeta htdocs vamos a añadir un fichero PHP (index.php) que nos muestre la información del servidor. Es donde iría el código de nuestra página Web:

<?php phpinfo(); ?>

COMANDOS ÚTILES

Ejecutar la máquina virtual:

$ vagrant up

Para entrar por SSH a la máquina no hace falta ni saber la dirección IP. Basta con un comando:

$ vagrant ssh

Poner la máquina en estado de suspensión:

$ vagrant suspend

Si hemos suspendido la máquina pero queremos volver a ejecutarla, ejecutamos el siguiente comando:

$ vagrant resume

Para apagar la máquina:

$ vagrant halt

Para saber el estado de la máquina (apagada, ejecutándose o en modo suspensión):

$ vagrant status

Para destruir la máquina:

¡Atención! Este comando no apaga la máquina, sino que la elimina y borra todos los datos.$ vagrant destroyYa podríamos entrar a la máquina desde un navegador con http://localhost:8080

REPOSITORIO GIT

Para facilitaros la vida a vosotros y a mi también, he creado un repositorio en Github con los archivos que hemos creado. Si queremos crear un servidor LAMP, podremos tenerlo en segundos introduciendo unos comandos:

$ git clone https://github.com/GeekyTheory/Vagrant-LAMP.git $ cd Vagrant-LAMP $ vagrant upYa estará todo listo.

En el próximo tutorial haremos una cosa muy interesante. Si seguisteis la serie de "Cómo configurar un VPS con Debian Nginx", pudisteis ver que utilicé DigitalOcean como servidor. Resulta que con Vagrant podemos hacer deploy de una máquina virtual a los servidores Amazon o DigitalOcean con tal sólo un comando y tener nuestra aplicación subida a Internet y funcionando en un momento y de una manera muy sencilla.

Al final ha quedado un artículo bien denso. Espero que os haya servido.

¡Compartid! ¡Saludos!