Capitulo VII: Capistrano el “deployador”

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Vamos a por el siguiente paso, el que nos ayuda a «deployar»: Capistrano
Antes de nada, creamos la app Rails en nuestro proyecto:

rails project1 -c

La opción «-c», añade todos los ficheros a subversion (pero sin hacer commit)

Ok, ahora, vamos a decirle a Subversion que ignore algunos ficheros que no queremos que gestione en las versiones:

cd project1
svn commit -m "Initial commit of project"
svn propset svn:ignore "*" log/
svn propset svn:ignore "*" tmp/
svn commit -m "added ignore to tmp and log"

Vale, tenemos el Proyecto preparado, ahora, instala Capistrano:

sudo gem install capistrano

Para ver la versión de Capistrano instalada:

cap -V

Capistrano v2.1.0

Lo primero que hay que hacer es decirle al proyecto que use Capistrano, ¿o a Capistrano que gestione el proyecto?, es lo mismo, «capifiar» el proyecto: (desde el root de tu aplicación)

capify .

Esto genera dos archivos en nuestro proyecto, que tenemos que añadir a Subversion:

svn status

?      Capfile
?      config/deploy.rb

svn add Capfile
A         Capfile

svn add config/deploy.rb
A         config/deploy.rb

svn commit -m "yay, I capified it..."

Vamos a preparar el archivo de configuración de capistrano «config/deploy.rb»
Por defecto es más o menos así:

set :application, "set your application name here"
set :repository,  "set your repository location here"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

role :app, "your app-server here"
role :web, "your web-server here"
role :db,  "your db-server here", :primary => true

Tenemos que rellenarlo con nuestros datos de servidor:

set :application, "domain.com"
set :user, "demo"
set :repository,  "svn+project1ssh://123.45.67.890/home/demo/repository/project1"
set :port, 30000
set :deploy_to, "/home/demo/public_html/#{application}"
set :location, "domain2.com"
role :app, location
role :web, location
role :db,  location, :primary => true

Suficiente, vamos a probarlo, cruza los dedos y escribe:

cap deploy:setup

Si todo ha ido bien, tendremos una carpeta nueva en nuestro public_html del servidor, preparada para servir. Dentro de esa carpeta hay dos subcarpetas; «releases» donde se guardara la versión de producción (y las copias de seguridad de cada deploy) y «shared» donde se guardan los ficheros que no cambian (logs, pids y informaciones de systema).
Ya que nuestro repositorio está en el mismo servidor que el Apache, vamos a poner las cosas un poco más simples: (cambia esto en el deploy.rb)

set :deploy_via, :copy

Y si quieres que el usuario encargado de parar y reiniciar los Mongrels sea diferente:

set :runner, user

Pero todavía nos queda explicarle como iniciar los Mongrel: (desde nuestro PC)

touch script/spin
svn propset svn:executable on script/spin

En el fichero creado ay que escribir lo siguiente:

/home/demo/public_html/domain.com/current/script/process/spawner -p 8000 -i 2 -e production

Y subirlo:

svn add script/spin
svn commit -m "added script/spin"

Todo preparado para el primer deploy:

cap deploy:cold

Jur jur… Si todo va bien, este comando ha hecho lo siguiente:

  • Descarga la última versión del repositorio
  • La comprime en un archivo temporal
  • La sube al servidor
  • La descomprime
  • Copia el código donde debe y crea algunos enlaces simbólicos y demás. (lo prepara)
  • Inicia los Mongrels definidos en «script/spin»

Recuerda hacer un vhost, que tenga las siguientes URLs:

access_log --> /home/demo/public_html/domain.com/shared/log/access.log;
error_log --> /home/demo/public_html/domain.com/shared/log/error.log;
root --> /home/demo/public_html/domain.com/current/public/

Capítulo anterior: Capitulo VI: Gestión de versiones con Subversion
Siguiente capítulo: Capitulo VIII: Resumen y listado de artículos de ayuda

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.