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!