Acilia Blog

Categorías

Deployment con Magallanes

Andrés Montañez Software Architect

Actualidad 28-04-2014

Desarrollar aplicaciones web no es un trabajo fácil, para nada fácil. Hace décadas teníamos que lidiar con la compatibilidad entre distintos navegadores, diversas metodologías para construir una aplicación, incluso sobre qué servidores web utilizar.

Afortunadamente estos problemas se han ido mitigando. Los navegadores, en sus últimas versiones, ya cooperan de forma más amigable, o tenemos librerías que ayudan a unificarlo todo. Los servidores web son pocos pero buenos y muy robustos (Apache y Nginx como los dos principales). Con respecto a la construcción de aplicaciones, frameworks como Symfony han hecho del desarrollo de software un verdadero placer, y contribuir en un proyecto es muy sencillo debido a los estándares de los frameworks. Pero… siempre hay un pero, con todas estas herramientas a favor, aún nos encontramos con desarrolladores que publican su aplicación vía FTP, algunos un poco más sofisticados tienen sus shell scripts que hacen rsync o similar; no había nada estándar ni unificado, el mundo del deployment era tierra de nadie. Magallanes es una herramienta para mejorar este aspecto del desarrollo de aplicaciones web.

Esto tampoco es una idea nueva ni descabellada. En el mundo Java ya existían herramientas de este estilo. Los desarrolladores Rails cuentan con Capistrano, y existe una extensión de éste llamada Capifony pensada para aplicaciones Symfony. Magallanes toma ideas de todo esto y las vuelca de lleno en el mundo PHP. Las premisas al pensar en construir esta herramienta fueron:

  • 100% PHP
  • Configuración persistente
  • Estandarizar deployments
  • No se apega a ningún framework
  • Utilidades para cualquier framework
  • A finales del 2011 estábamos en la recta final de un proyecto bastante grande en Acilia, y el problema de cómo publicar la aplicación ya estaba revoloteando en mi mente. Con este desafío en el horizonte y con los puntos que mencioné antes comencé a construir Magallanes.

En la versión actual podemos instalar Magallanes de tres formas distintas:

  • Via Composer
  • Standalone
  • Standalone a nivel global

La primera forma es la más simple, agregamos Magallanes como un requerimiento de nuestro composer y ya lo tendremos a nuestra disposición. En la segunda y tercera forma debemos descargar Magallanes y ejecutar su instalación, que la podemos hacer a nivel de usuario o a nivel del sistema. En la opción a nivel del sistema tendremos a disposición el comando principal de Magallanes «mage» desde cualquier parte y para cualquier usuario. Esta última es la opción que usamos en Acilia, ya que nos resulta mucho más práctico.

Una vez que tenemos instalado Magallanes, debemos inicializar el proyecto con «mage init», esto es análogo a «git init». Lo que hace es crear el directorio de configuración –.mage– donde tendremos toda la definición del proyecto y de los entornos. Es ideal tener este directorio en nuestro control de versiones.

Ahora que ya tenemos Magallanes en nuestro proyecto, debemos proceder a crear entornos. El propósito del entorno es representar y definir hacia donde y cómo se hará el deployment de nuestra aplicación. Ejemplos clásicos de entornos son production, staging, o testing. Cada uno de estos entornos tiene sus particularidades: production engloba varios hosts mientras que staging y testing tienen un único host pero en distintas ubicaciones. Cada entorno tendrá su lista de tareas a ejecutar, como instalar assets, crear enlaces simbólicos, limpiar caché, purgar logs. Todo lo que se nos ocurra. Crear un entorno es tan simple como hacer «mage add environment –name=”production”».

De esta forma siempre tendremos una manera ordenada, concreta y reproducible de cómo publicar nuestra aplicación en cada entorno. Una vez que tenemos esta serie de reglas y tareas, ya nos podemos olvidar de la complejidad del deployment, y publicar la aplicación se torna algo tan sencillo como «mage deploy to:production».

La principal ventaja de Magallanes queda clara para los desarrolladores PHP —quienes son el público objetivo–, si bien Magallanes viene con ciertas tareas built-in, como dump de assetics, instalación de assets, actualizar el git, etc; es probable que se necesiten tareas especializadas para cada proyecto, y crear estas tareas es muy simple: generar un fichero PHP dentro del directorio .mage, y ya la tendremos a disposición de cualquier entorno. Aquí es donde Magallanes se hace valer para la comunidad PHP. No hace falta aprender ningún lenguaje foráneo, ni tener dependencias o paquetes extra, solo necesitamos saber el lenguaje que utilizamos día a día.

Otra característica importante que tenemos son los Releases. Cuando definimos un entorno podemos indicar que deseamos habilitar los releases, esto nos permite hacer rollback del deployment. Por ejemplo, si hacemos un deploy a production y por algún problema debemos volver a la versión anterior, si tenemos los releases habilitados, con Magallanes es tan simple como hacer «mage releases rollback to:production –release=-1», y tendremos la versión anterior. Podemos indicar cuántos releases se mantendrán en cada entorno y, cuando se supere ese número, automáticamente se borrará el más antiguo. En un ambiente de producción esto será muy útil, pero quizá en un ambiente de pruebas o desarrollo solo nos interese tener tres o cuatro versiones.

Hasta el momento la recepción ha sido muy buena. Si bien la concepción de Magallanes fue a finales de 2011, la primera versión estable –1.0.0– fue liberada a finales de 2013. Desde esa fecha hasta ahora –mayo 2014– ha habido más de 1.500 instalaciones via composer. Y en GitHub la gran mayoría de issues abiertas son feature requests.

El proyecto, que no hubiera nacido sin los desafíos que me plantea Acilia día a día, sigue creciendo, a paso lento pero seguro. Por último si tienen más dudas, les invito a dejarlas aquí en la sección de comentarios.

magallanes-logo.png

Contáctanos

Cuéntanos tu idea, comparte tu proyecto con nosotros, solicita una consultoría o ven a formar parte de nuestro equipo de expertos Symfony.

Escribe tu nombre y apellidos.
Escribe tu e-mail. El e-mail no tiene un formato válido.
Es necesario aceptar los términos y condiciones.

Gracias por ponerte en contacto con nosotros.


card image

Acilia se une a la familia Sngular

Marcos Labad Founder & Director en Acilia

Actualidad 27-01-2022

Acilia se une a la familia Sngular Leer más
card image

Renovamos la web de Acilia

Marcos Labad Founder & Director en Acilia Rosa Suárez Project Manager

Actualidad 16-06-2020

Renovamos la web de Acilia Leer más

¿Hablamos?

Cuéntanos tu idea, comparte tu proyecto con nosotros, solicita una consultoría o ven a formar parte de nuestro equipo de expertos Symfony.

Uso de cookies

Utilizamos cookies propias y de terceros para mejorar tu experiencia de navegación y poder ofrecerte contenidos interesantes. Ahora la Ley nos obliga a comunicarte que, al continuar navegando por nuestro sitio, aceptas nuestra Política de cookies. ¡Te agradecemos que sigas con nosotros!