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

Dejar un comentario

Tu dirección de correo electrónico no será publicada.

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