LINUX GNU BLOG

Software libre y diseño web
Oct162014

Entorno de desarrollo basado en máquina virtual

Virtualbox_Vagrant_logosDesarrollar múltiples proyectos en la misma máquina puede llevarnos al caos. Decenas aplicaciones como gestores de bases de datos, frameworks, librerías, intérpretes, máquinas virtuales y compiladores inundarán nuestra máquina y harán de su uso una misión casi imposible debido a incompatibilidades, fallos de seguridad, consumo excesivo de recursos, etc. Y como toque reinstalar el sistema, más nos vale ir con pies de plomo y asegurarnos de salvaguardar todas las bases de datos, ficheros de configuración y demás, o nos veremos repitiendo trabajo. Aparte de que la reinstalación y configuración de todos esos entornos de desarrollo suele llevar muchas horas que reducen nuestra productividad.

Una solución es aislar cada proyecto en una máquina virtual con su propio entorno de desarrollo personalizado, sin interferencias. Para ello hay múltiples herramientas que nos permiten hacer esto de forma más o menos transparente. Y en este post voy a explicar dos formas de hacerlo.

 

Método 1: Manualmente, usando solo VirtualBox.

Consiste en crear una máquina virtual maestra con un sistema que usaremos como base para todos los proyectos. En esa máquina solo se han de instalar las herramientas básicas y comunes para la mayoría de proyectos.

Por ejemplo, yo tengo una máquina virtual maestra para proyectos web con un Ubuntu Server 14 LTS con OpenSSH Server, Apache 2, MySQL y phpMyAdmin. Ni X11 ni nada que no sea imprescindible.

Una vez tengamos creada la máquina virtual maestra, procederemos a configurarla para usarla lo más cómodamente posible:

En primer lugar abrimos la configuración de red de la nueva máquina virtual.

VBoxRedNat

Nos aseguramos de que el adaptador de red está conectado a “NAT”, como se ve en la imagen superior, y hacemos click sobre el botón “Reenvío de puertos”

VBoxRedNatPuertos

En esta ventana configuramos que puertos deseamos poder usar para acceder a la máquina virtual desde la máquina anfitrión, por ejemplo, en mi caso he establecido el puerto 8090 del anfitrión para acceder al puerto 80 del huésped (invitado) y el 2222 para el 22 (SSH). De este modo puedo ver la web hospedada en el Apache de la máquina virtual desde mi navegador mediante la url http://localhost:8090 y puedo acceder por SSH a la terminal de la máquina virtual desde la máquina anfitrión con el comando:

ssh elias@localhost -p 2222

Además, si no te gustan las terminales y tienes Dolphin (KDE), podrás explorar los ficheros y modificarlos desde dicho explorador de ficheros como si se tratase de archivos locales.

Dolphin_Fish

También puedes hacer esto con otros exploradores de ficheros, este es el ejemplo de como yo lo hago.

Ahora que tenemos una máquina maestra, la podemos clonar “enlazada” para cada uno de los proyectos que queramos. De este modo, la puesta en marcha de un nuevo entorno de desarrollo solo requerirá un par de clicks.

Método 2: Con la ayuda de Vagrant.

Vagrant es una herramienta que hará por ti todo lo que se explicó en el primer método y muchas otras cosas más de forma completamente transparente al usuario.

Antes de comenzar, tendrás que instalar Vagrant y como dependencia VirtualBox. Dependiendo de tu distribución, la instalación puede ser más o menos fácil, en ArchLinux, está en repositorios, por lo que no puede ser más fácil. Si tienes dudas, en la página web de Vagrant tienes los paquetes par las principales distribuciones.

Primeros pasos

Antes de nada, hay que crear una carpeta para nuestro nuevo proyecto y ahí un fichero llamado Vagrantfile, que describirá el tipo de máquina virtual, recursos y programas que necesitará nuestro proyecto para funcionar.

Primero creamos y entramos en la carpeta de nuestro proyecto:

$ mkdir MiProyectoVagrant
$ cd MiProyectoVagrant

Ahora que tenemos un directorio de trabajo, toca obtener la imagen base que usaremos para la máquina virtual de nuestro proyecto que Vagrant llama Box (Caja). Para ello Vagrant nos provee de un repositorio de cajas con casi todo lo que podamos necesitar. Una vez sepamos cual queremos usar la descargamos con este comando:

$ vagrant box add UbuntuPrecise32 http://files.vagrantup.com/precise32.box
$ vagrant init UbuntuPrecise32

El último comando creará el Vagrantfile en el directorio de trabajo configurado para usar la caja que hemos elegido y descargado.

Iniciar, parar, suspender y destruir el entorno de trabajo.

A partir de este momento, podremos comenzar a trabajar con nuestro nuevo entrono virtualizado, para ello tan solo hay que usar el siguiente comando y tras breves instantes estará todo funcionando:

$ vagrant up

Para acceder a la terminal SSH de la máquina virtual solo habrá que teclear:

$ vagrant ssh

Si hemos terminado de trabajar, podemos apagar la máquina virtual:

$ vagrant halt

Y podremos volver a iniciarla con:

$ vagrant up

También podemos suspender la máquina en lugar de apagarla, lo que es más rápido que apagarla y encenderla:

$ vagrant suspend

Y cuando queramos seguir trabajando, tan solo hay que resumirla con:

$ vagrant resume

Si quisiéramos saber el estado actual de la máquina, este comando nos ayudará:

$ vagrant status

Por último, cuando ya no necesitemos más esta maquina, porque hemos terminado con el proyecto o porque lo hemos abandonado, podemos destruir la máquina con:

$ vagrant destroy

Configuración

Carpetas compartidas

Vagrant nos provee una forma de acceder a la carpeta del proyecto en nuestra máquina anfitrión desde la máquina huésped. Para ello tan solo hay que entrar en /vagrant desde la maquina virtual y podremos, incluso, ver nuestro Vagrantafile. Por ejemplo:

$ vagrant up
$ vagrant ssh
$ ls /vagrant

Este último comando nos mostrará todos los ficheros que hay en la carpeta de nuestro proyecto Vagrant en la máquina anfitrión. Cualquier archivo que coloquemos en este directorio será accesible desde cualquiera de los 2 extremos.

Enrutamiento de puertos

En el primer método ya expliqué como hacerlo y para que sirve, ahora solo explicaré como hacerlo con Vagrant.

Simplemente hay que editar el Vagrantfile y agregar, por ejemplo, la línea siguiente:

config.vm.network :forwarded_port, host: 8090, guest: 80

Nota: La redirección del puerto 22 al 2222 no es necesaria, ya la hace Vagrant por defecto.

Luego iniciamos la maquina virtual nuevamente, o si esta ya se encuentra iniciada la reiniciamos con:

$ vagrant reload

Y esto es todo, espero haberle sido de utilidad a alguien, hasta la próxima.

Política de comentarios

Dada la importancia de los comentarios como espacio de participación, te pedimos por favor que leas detenidamente y cumplas con las siguientes normas de participación.

7 respuestas para “Entorno de desarrollo basado en máquina virtual

Liher

Muy buen articulo, tengo que probarlo con mi servidor virtual, muchas gracias y un saludo


Compartir un proyecto de Vagrant entre diferentes equipos - Jesús Torres

[…] Para quien no lo conozca y quiera un introducción rápida a su uso, me limitaré a recomendar el fantástico artículo de Elías R.M al […]


jc

Muy interesante. Gracias!


José Miguel

Gracias a ti por comentar, se agradece el detalle.

Saludos.


Eduar

Gracias por el articulo muy bueno e interesante, igualmente te felicito por tu blog

Suerte. un saludo desde Venezuela


Elías R.M.

Muchas gracias,

Me alegro de que de que te guste lo que hacemos.

Saludos


Deja un comentario

Tu dirección de correo electrónico no será publicada.