May 17, 2015

Vagrant: arrancar, crear y publicar un box

En Poun Studio vamos a comenzar varios proyectos con Symfony. Hemos decidido empezar con buen pie creando un entorno virtualizado con Vagrant que nos pueda servir para distintos proyectos y nos ahorre el trabajo de configurar cada entorno en distintas maquinas.

Esto nos servirá para agilizar el flujo de trabajo entre el equipo de desarrollo y los diseñadores. Queremos que todos puedan trabajar y realizar pruebas en un mismo entorno sin preocuparse de engorros procesos de configuración.

En nuestro caso, hemos utilizado como base el box creado por Scotch.io, que ya viene con un entorno LAMP preinstalado (además de Node, Ruby, Composer, cURL, Git, etc). A este box le hemos añadido Symfony, seguidamente hemos clonado un proyecto desde nuestro repositorio privado en Bitbucket, hemos creado la BD y por último hemos configurado los permisos necesarios para que funcione todo correctamente.

Una vez finalizado este proceso hemos empaquetado un nuevo box personalizado a nuestras necesidades. A partir de este punto nos hemos topado con un pequeño problema: ¿y ahora que hacemos con este box de 600 mb? ¿lo subimos al repositorio? ¿utilizamos dropbox para compartirlo con el resto del equipo?.

Por suerte hemos descubierto Atlas, un servicio que te permite compartir y actualizar un box privado. Por si esto fuera poco, con Atlas puedes hacer un deploy en tu servidor virtual y monitorizar todo el proceso. Por ahora es completamente gratuito, pero funciona tan bien que seguramente dentro de poco tendrás que pagar por usarlo. Atlas es un servicio creado por Hashicorp, los mismo que idearon Vagrant.


Instalar el entorno

Para utilizar Vagrant en local es necesario tener instalado Vagrant y Virtualbox.


Comando básicos de Vagrant

Arrancar vagrant

$ vagrant up

Suspender vagrant

$ vagrant halt

Acceder por ssh al box

$ vagrant ssh

Arrancar un box privado

Si necesitas utilizar un box privado alojado en Atlas

Primero debes de darte de alta en Atlas. Seguidamente debes pedir permisos de View, Write o Admin al creador del box. Además el dueño del box debe publicarlo para que sea visible.

Crear una carpeta para el proyecto

$ mkdir mi_proyecto && cd mi_proyecto

Hacer login en local con tu cuenta de Atlas

$ vagrant login

Instalar el box privado

$ vagrant init usuario_admin_atlas/nombre_del_box

A partir de aqui ya puedes arrancar vagrant y acceder por ssh

$ vagrant up
$ vagrant ssh

Si el Admin del box realiza cambios puedes actualizarte directamente:

$ vagrant box update

Crear un nuevo box

Si necesitas crear un box para un nuevo proyecto

Es buena idea utilizar un box con una configuracion previa, por ejemplo Scotch.io Box ya tiene instalado un entorno LAMP

Clonar el box

$ git clone https://github.com/scotch-io/scotch-box.git nombre_de_tu_proyecto

Arrancar vagrant

$ vagrant up

Acceder por ssh

$ vagrant ssh

Realizar las configuraciones necesarias en el box base. Por ejemplo: instalar Symfony o clonar el repositorio del proyecto correspondiente, crear la BD, etc. Configurar el entorno de trabajo: permisos, enlaces simbolicos, etc.

Testear el nuevo entorno

http://192.168.33.10

Preparar el box

Estos pasos vienen documentados en el artículo How to Create a Vagrant Base Box from an Existing One

$ sudo apt-get clean
$ sudo dd if=/dev/zero of=/EMPTY bs=1M
$ sudo rm -f /EMPTY
$ cat /dev/null > ~/.bash_history && history -c && exit

Para seguir con los siguientes pasos antes debes salir del entorno virtual y suspender Vagrant

$ exit
$ vagrant halt

Ahora ya puedes empaquetar el nuevo box

$ vagrant package --output mi_nuevo_proyecto.box

Este nuevo box ya lo podemos compartir a través de Atlas


Compartir un box privado

Si necesitas compartir un nuevo box

Darse de alta en Atlas

Subir el nuevo box. Debes dar permisos de View, Write o Admin al resto del equipo involucrado. Además debes publicar el box.

Si realizas cambios sobre el box, puedes publicarlos directamente en Atlas.