Archive

Posts Tagged ‘vagrant’

Vagrant, Primeros Pasos

27 noviembre, 2014 Deja un comentario

vagrant

Desde hace años, nos hemos acostumbrado a entornos *AMP (lamp, wamp, mamp, xampp), lo que no es mas que una serie de herramientas que en general nos proveen de Apache + PHP + Mysql, y algo mas, para hacer pruebas de nuestras aplicaciones son de gran ayuda, sin embargo hoy en día nuestros desarrollos muchas veces van mas allá de estas 3 tecnologías, tenemos elementos como nginx, varnish, memcached, redis, postgresql, node.js, y mucho mas, son elementos para los cuales nuestro servidor *AMP, se nos ha quedado corto, ¿Que pasa cuando trabajas en equipo y quieres que todos tus desarrolladores tengan un entorno de desarrollo especifico, o simplemente quieres replicar por completo tu servidor de producción para garantizar el correcto funcionamiento de tu aplicación, y es que tu servidor probablemente no este en Windows, menos en MacOSX, o como en mi caso, que todos mis servidores esta sobre Centos, y mi OS para desarrollo esta basado en Ubuntu, y hay cosas que simplemente son distintas, y se vuelve cada día mas necesario acabar con eso de “En mi computador funciona”, hoy en día no hay escusas para eso.

Para todo esto y mucho mas tenemos Vagrant, lo cual son contenedores de maquina virtuales, que de manera muy amigable puede ser diseñadas para crear nuestros entornos personalizados o aprovechar algunos ya existentes.

Vagrant es un proyecto de código abierto, cuya meta es la generación de ambientes virtuales de desarrollo de manera practica, rápida, eficiente, portátil y sobre todas las cosas, fáciles de modificar y distribuir, permitiendo basarnos en entornos de virtualización como VirtualBox, VMWare, y AWS, pudiendo extenderse a otros proveedores.
El centro de toda BOX (Maquina virtual de Vagrant), es un VagrantFile, es cual es un archivo que describe la configuración de la maquina, este archivo contiene todos los parámetros de configuración de nuestra maquina virtual, incluso las configuraciones de red y puertos.

¿Como Instalarlo?

VirtualBox

Como ya hemos dicho, Vagrant se aprovecha de los métodos de virtualización de algunos proveedores, para efectos de este tutorial, trabajaremos con virutalbox, por su universalidad y fácil instalación, así que lo primero que debes hacer es instalar VirtualBox. Para lo cual te recomendamos entres en el portal oficial de VirtualBox. y revises el método de instalación mas adecuado a tu Sistema Operativo, aunque esto tiende a ser una instalación muy sencilla.

Vagrant

Solo debemos entra aquí y descargar el paquete adecuado a nuestro sistema operativo, y seguir los pasos básicos de una instalación típica de cualquier software.

¿Como usarlo?

Lo primero que debemos hacer es descargarnos alguna box, adecuada a nuestras necesidades, existen boxes que ya vienen con gran cantidad de paquetes instalados, existen otras que vienen solo con el Sistema Operativo en su forma mas básica, solo esperando a que nosotros instalemos en esta todo lo que deseamos instalar, en nuestro caso usaremos una instalación básica

Para conseguir boxes, hay gran cantidad de sitios por toda la web, sin embargo, recomiendo visitar http://vagrantcloud.com/, tienen gran variedad y mejor soporte.

Con esto, en mente, solo debemos escribir:

vagrant init nfq/wheezy

Esto generara un archivo llamado VagrantFile, el cual contiene toda la información necesaria para gestionar nuestro nuevo box,

Solo nos resta iniciar nuestro box, ejecutando

vagrant up

Este comando intentara buscar en nuestro listado de boxes descargadas en nuestro equipo la imagen indicada en el comando vagrant init, y en caso de no encontrarla, ira hasta vagrantcloud y buscara descargarla,
Algunos otros comandos que debemos aprender son:

  • Vagrant ssh: Debido a que este tipo de implementación no ofrece interfaz gráfica, para acceder a la instancia como tal debemos entrar en ella vía SSH.
  • Vagrant suspend: Si no queremos trabajar con el ambiente en un tiempo nos permite suspenderlo.
  • Vagrant resume: Lo cual nos permitirá levantarla en cuestión de pocos segundos cuando la queramos volver a usarla luego de una suspensión.
  • Vagrant halt: Podremos apagar nuestra implementación.
  • Vagrant destroy: Destruye la maquina virtual, pero deja la base disponible para nuevos proyectos, tampoco destruye el archivo VagrantFile.

Configuración

Vagrant es como el poker, “se aprende en 5 minutos, y se perfecciona en toda una vida“, básicamente debemos iniciar con 2 o 3 configuraciones básicas, y tendremos un entorno de desarrollo muy profesional en solo unos pocos minutos. y realmente no necesitaremos saber absolutamente nada de Linux para esto.

Recordemos que tenemos un archivo llamado Vagrantfile, este contiene todas las configuraciones de nuestro entorno, para comenzar comenzar solo editaremos 3 items, 2 de la red y otro de lo que se llama “aprovisionamiento”…

El primer ítem es FORWARDED PORTS, esta configuración nos permite mapear por un puerto de un valor a otro, así evitar colisiones. Ejemplo:

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

Estas lineas específicamente nos mapearan el puerto 80, tradicionalmente usado por nuestro apache al 8080, y el 3306, usado por mysql a 33060, esto útil si en nuestro equipo esos puertos están ocupados por alguna otra aplicación.
Y PROVISIONING, esta la habilidad de poder almacenar en un script las configuraciones configuraciones que consideremos necesarias, luego del la primera ejecución de nuestra maquina virtual

config.vm.provision :shell, :path => "bootstrap.sh"

En este caso, hemos llamado a script bootstrap.sh y tiene el siguiente código:

#!/usr/bin/env bash
DBPASSWD=1234
apt-get install -y debconf-utils
apt-get install -y apache2
echo "mysql-server mysql-server/root_password password $DBPASSWD" | debconf-set-selections
echo "mysql-server mysql-server/root_password_again password $DBPASSWD" | debconf-set-selections
apt-get install -y mysql-server
apt-get install -y php5 libapache2-mod-php5
sed -e '/bind-address/ s/^#*/# /' -i /etc/mysql/my.cnf
service apache2 restart
rm -rf /var/www
ln -fs /Vagrant /var/www

Con este código básico tendremos un entorno Apache + Mysql + Php muy básico, pero funcional, y todo lo que este en la carpeta donde estamos alojando nuestros archivos Vagrant, sera la que veremos al ingresar desde nuestro navegador favorito:
http://127.0.0.1:8080
luego de esto, solo nos resta ejecutar por primera vez nuestra VM, y esperar mientras el entorno de establece y estamos listo para crear cosas realmente interesantes.