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

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

tutorial vagrant qué es cómo usarlo geeky theory linux windows mac web developer

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.

descargar vagrant tutorial geeky theory

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 restart
Nota 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 destroy
Ya podríamos entrar a la máquina desde un navegador con http://localhost:8080 vagrant lamp localhost phpmyadmin tutorial geeky theory php cloud web

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 up
Ya 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!

Deja un comentario


11 comentarios


F · Hace 16 días

Interesante herramienta pero, tengo una duda. Como es el tratamiento de las versiones, por ejemplo apache?, me explico. Quiero trabajar con Centos 6.8 y Apache 2.4, como lo hago si por defecto en Centos 6.8 se instala la 2.2?. Fcs

John Rambo · Hace 5 meses

¿Cómo puedo hacer ésto mismo, pero con php 7? Saludos

Pedro Manríquez · Hace 1 mes

Deberías probar usando una imagen más nueva de ubuntu como la 16.04 y al momento de hacer el script para instalar lamp reemplazar los php5 por php7.0 de esa forma tendrás tu box con php7

John Carter · Hace 1 año

Buen tutorial; una pregunta, cuando hago todo a fuerza me pide permisos root ya que está accediendo a /var/www/http y quisiera ver si se puede cargar todo sin ser root Saludos

Pat · Hace 1 año

Gracias por la aportación!

sebastian cortes · Hace 1 año

excelente articulo, pero tengo una duda, donde creas la carpeta htdocs ?

fabio sanchez · Hace 1 año

Muchas gracias por el articulo, me dejo una idea bien clara de lo que es vagrant

Terce · Hace 2 años

Muy bien explicado!

terce · Hace 2 años

Este tuto , es casi extamente lo que acabo de hacer, y resulta que luego lo encuentro a a

Wilzon Mariño Bueno · Hace 2 años

interesante ;)

heMega · Hace 2 años

Saludos, excelente artículo. Una cosa: creando una de las maquinas y habilitando un framework para trabajar me encuentro con problema para instalar algunas dependencias debido a que el servidor no cuenta con memoria Swap. Hay alguna forma de configurar esa memoria compartida cuando estamos configurando la maquina con Vagrant? Por demás, es excelente, siempre me molestaba montar LAMP en mi ordenador y llenarlo de tanta cosa tipo servidor, a parte que no me daba confianza tener esos puertos abiertos. Conocer Vagrant gracias a tu artículo me cambio la existencia! :)

Rubens García · Hace 2 años

https://gist.github.com/shovon/9dd8d2d1a556b8bf9c82

Francisco Quintero · Hace 2 años

Hola! Ya he hecho algunas cosas con Vagrant y siempre me gusta ver cómo otros lo hacen. En este caso veo que configurar el MySQL con la línea: echo "mysql-server mysql-server/root_password password root" | sudo debconf-set-selections Primera vez que veo una línea así y lo que entiendo es que le estás pasando la clave (root) directamente en el echo y el comando que pasas en el pipe lo está tomando, ¿o cómo es el asunto? Buen tuto, está bien sencilla la instalación y configuración del box.

Mario Pérez Esteso · Hace 2 años

Hola Francisco. Sí, le paso la clave desde la línea de comandos para que se configure automáticamente.

Miguel Catalan Bañuls · Hace 2 años

¡Me lo apunto!