Configuración sobre Puppet de un entorno de desarrollo virtualizado para aplicaciones web en stack MEAN (MongoDB, Express, AngularJS y Node.js).
Para utilizar el proyecto necesitas tener instalado:
- Un entorno de virtualización, como VirtualBox
- Vagrant (v1.1+)
- Con VirtualBox, es recomendable instalar el plugin vagrant-vbguest para Vagrant
$ vagrant plugin install vagrant-vbguest
Es una herramienta de código abierto (disponible para OS X, Windows y Linux) que te permite crear entornos de desarrollo sobre los que simular una máquina similar al servidor en que se alojará una aplicación web. También resulta una herramienta muy util para compartir un entorno ya configurado entre diferentes equipos, con la ventaja de no ensuciar el sistema operativo de ninguno de ellos.
Esta configuración levanta dos boxes Ubuntu 12.04 (Precise Pangolin) 64-bit. El primero, llamado mongodb
, como servidor de BBDD; y el otro (appserver
), como servidor de aplicaciones.
Las direcciones IP de dichas máquinas serán:
- Servidor de aplicaciones:
192.168.56.12
- Servidor de MongoDB:
192.168.56.11
A continuación se muestran los paquetes que se instalan en ambas:
- Box mongodb
- Box appserver
Con Vagrant, mediante Synced Folders también tendremos la posibilidad de compartir una carpeta entre la máquina Host (nuestro equipo) y la máquina Guest (en este caso, el box appserver
). Eso nos permitirá trabajar sobre los archivos de las aplicaciones desplegadas sin tener que conectarnos a la máquina virtual por SSH.
En esta configuración, la carpeta compartida es un directorio llamado workspace
que será creado como hermano del directorio de este proyecto.
parent/
mean-vagrant/
workspace/
Si se desea cambiar el nombre de dicha carpeta compartida o su localización habrá que cambiar la siguiente instrucción dentro del archivo Vagrantfile
que se encuentra en el directorio raiz de este proyecto:
appserver.vm.synced_folder "../workspace", "/usr/local/src/mean", create: true
Como se puede deducir de la anterior línea, el directorio del appserver
donde se alojaran las aplicaciones que despleguemos en Vagrant será: /usr/local/src/mean
.
- Haz un clone del repositorio:
git clone git://github.com/dmarchena/mean-vagrant.git
- Ejecuta el comando
vagrant up
desde el directorio que se acaba de crear. Éste será el comando que deberás ejecutar cada vez que quieras levantar los servidores.
La primera ejecución podrá tardar bastante mientras Vagrant descarga todos los recursos necesarios y realiza la configuración inicial de los servidores. Sé paciente, las siguientes veces apenas tardará. ;) Sabrás que el proceso ha llegado a su fin correctamente tras unas líneas similares a las siguientes:==> mongodb: Machine 'mongodb' has a post `vagrant up` message. This is a message ==> mongodb: from the creator of the Vagrantfile, and not from Vagrant itself: ==> mongodb: ==> mongodb: mongodb listening on 192.168.56.11 ==> appserver: Machine 'appserver' has a post `vagrant up` message. This is a message ==> appserver: from the creator of the Vagrantfile, and not from Vagrant itself: ==> appserver: ==> appserver: appserver listening on 192.168.56.12
- Copia tu aplicación dentro del directorio de trabajo
- Conectate a la terminal del servidor de aplicaciones ejecutando el comando
vagrant ssh appserver
desde el mismo directorio del paso 1. - En la nueva terminal, ejecuta los comandos que necesites para desplegar (bower, npm...) y lanzar tu app con Node.js
- La aplicación estará a la escucha en: http://192.168.56.12:3000/ (suponiendo que tu aplicación utilice el puerto 3000)
vagrant suspend
: Pausar las máquinasvagrant resume
: Reanudarlasvagrant halt
: Apagar totalmente los dos servidoresvagrant destroy
: Apagar las máquinas y libera espacio eliminando todos los recursos que se descargaron en el primer arranque.
Nota: Esto no borra la configuración de este proyecto ni tu workspace, por lo que con un nuevovagrant up
podrás instanciar ambas máquinas y volverlas a arrancar.
Este código está disponible con licencia GNU General Public License v3.0 Échale un vistazo al archivo LICENSE.md para más información.