Deploy de aplicaciones web con Mina

Mina Deployment
Mina Deployment

En un actual proyecto, me han pasado el repo de un deploy hecho en capistrano para una aplicación web, lamentablemente no pude poner en marcha el deploy debido a la distribución de linux que estoy utilizando (ElementaryOS) .. básicamente no tengo la versión de Ruby que se necesita para instalar una dependencia que maneja las conexiones por ssh, por lo tanto tuve que implementar un método diferente de hacer deploy utilizando esta vez Mina que básicamente es lo mismo que capistrano, pero con menos características o al menos una importante que yo noté que es la posibilidad de hacer rollbacks.

Pues empecemos y para instalar Mina, se requiere tener instalado Ruby versión 1.9 o superior, desde las distribuciones de debian, pueden instalarlo con este comando.

$ sudo apt-get install ruby-full

Luego que tienen Ruby, pueden proceder a instalar Mina utilizando el manejador de gemas, con este comando.

$ sudo gem install mina bundler

Ahora que han instalado Mina, esta casi todo listo.. y solo falta crear el archivo de deploy, yo generalmente lo dejo dentro de mi carpeta de proyecto y lo llamo “deploy”.

$ mkdir deploy & cd deploy

Y una vez creado el directorio y estando dentro de el, creamos el archivo de deployment de Mina ejecutando el siguiente comando.

$ mina init

Esto lanzará un pequeño asistente el cual hará unas cuantas preguntas, como la dirección del servidor donde se hará el deploy, la url del repo de git y el usuario remoto con que se hará deploy.

Ahora que el archivo deploy.rb se ha creado, pueden editarlo si lo necesitan, yo generalmente siempre lo hago porque escribo algunas otras tareas que necesito realizar después de cada deploy.

Un ejemplo de como se ve un archivo de mina es algo así.

set  :domain,  'remoto.com'
    set  :user,  'deploy'
    task :down do
      invoke :restart
      invoke :logs
    end
 
    task :restart do
      queue 'sudo service nginx restart'
    end
 
    task :logs do
      queue 'tail -f /var/log/nginx/error.log'
    end

Otra cosa que siempre se debe hacer es crear en el servidor un usuario que solamente tenga privilegios para hacer los deploys y escribir en las carpetas web, comúnmente es llamado deploy y en caso de que se tienen repos privados, es necesario hacer login con el usuario deploy en el servidor y generar sus llaves publicas, las cuales se deben de pegar en las llaves permitidas del proyecto en github.

Una vez hecho eso, están garantizando que el usuario deploy puede hacer pull’s del proyecto y hacer el despliegue en las carpetas a las que solamente tiene permisos en el servidor.

Obviamente otro paso importante es que la máquina desde la cual se envía la señal de deploy, haya generado su llave publica y esta haya sido registrada en los host de ssh del usuario deploy.

Y una vez que se tiene todo, proceden a realizar un mina setup para generar la estructura de carpetas en el servidor y luego un mina deploy para el despliegue, como referencia la carpeta “current” siempre enlazará a la última versión.

$ mina setup
...
$ mina deploy

Mina es bastante similar a capistrano, aunque con muchas menos funciones o bundlers, no se puede hacer rollback y tampoco podemos enviar deployments de repos en svn y menos de cvs, pero para lo básico es bastante funcional.

La información completa sobre este proyecto se encuentra en este enlace “http://nadarei.co/mina/

Happy Coding!

Co-fundador de Qbit Mexhico, usuario de linux, Developer en tecnologías web.. Nicaragüense, centro en basketball, primer centro en rugby y pintor los fines de semana. Ortögrafo y ambientalista psicológico (de escritorio).. ese soy yo!

Si te ha servido compártelo y difunde nuestro blog..

Twitter LinkedIn Flickr YouTube 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *