Automatizar despliegues con Capistrano

Contents

Introducción

Automatizar despliegues es un paso esencial para cualquier equipo de desarrollo que busque velocidad, consistencia y seguridad en sus lanzamientos. Capistrano es una herramienta de código abierto escrita en Ruby, diseñada para facilitar la ejecución de tareas remotas a través de SSH y gestionar el ciclo de vida del despliegue de aplicaciones web. En este artículo, profundizaremos en cómo instalar, configurar y exprimir al máximo Capistrano para llevar la entrega continua a un nivel profesional.

¿Qué es Capistrano

Capistrano nació en el seno de la comunidad Rails, pero su diseño modular le permite gestionar despliegues de aplicaciones en cualquier lenguaje. Se basa en:

  • Definición de tareas y hooks en Ruby.
  • Ejecución remota vía SSH, con control de flujos y esperas.
  • Manejo de releases y directorios históricos, facilitando rollbacks.

Beneficios de la automatización

  1. Reducir errores humanos: los scripts se ejecutan de forma idéntica cada vez.
  2. Acelerar el tiempo de despliegue: un único comando consolida todas las acciones.
  3. Historial y rollbacks: conservar múltiples versiones desplegadas en releases.
  4. Integración con flujos de CI/CD: Jenkins, GitLab CI, GitHub Actions, etc.

Requisitos previos

  • Ruby 2.5 o versión compatible.
  • Acceso SSH a servidores de staging y producción.
  • Repositorio Git con la aplicación.
  • Permisos apropiados en sistemas de archivos y usuarios remotos.

Instalación de Capistrano

Paso 1: Añade la gema a tu Gemfile:

    gem capistrano, ~gt 3.16
    gem capistrano-rails, ~gt 1.6
    gem capistrano-rbenv, ~gt 2.2
  

Paso 2: Instala las dependencias:

    bundle install
    bundle exec cap install
  

Estructura de un proyecto Capistrano

Al ejecutar cap install, Capistrano crea:

  • Capfile: importa gemas y carga configuraciones.
  • config/deploy.rb: configuración global del despliegue.
  • config/deploy/production.rb y staging.rb: configuraciones por entorno.

Configuración básica

En config/deploy.rb define:

  • set :application, mi_app
  • set :repo_url, git@github.com:usuario/mi_app.git
  • set :deploy_to, /var/www/mi_app

Definir roles y servidores

En config/deploy/production.rb:

    server 192.0.2.10, user: deploy, roles: %w{app db web}
    set :branch, main
  

Flujo de trabajo típico

  1. git push origin main
  2. bundle exec cap production deploy
  3. Capistrano clona el repositorio, instala gemas, precompila assets y reinicia servicios.
  4. Revisión de logs y verificación de estado.

Tareas personalizadas y hooks

En config/deploy.rb o en lib/capistrano/tasks/.rake:

    namespace :deploy do
      desc Reiniciar Puma
      task :restart do
        on roles(:app) do
          execute :sudo, :systemctl, :restart, puma
        end
      end
      after :publishing, :restart
    end
  

Despliegues multientorno

Solo necesitas config/deploy/staging.rb con servidores distintos y, al invocar:

  • cap staging deploy
  • cap production deploy

Gestión de secrets y variables

Es recomendable no versionar claves en Git. Usar:

  • Figaro o dotenv en .env remoto.
  • Tareas Capistrano que suban shared/config/database.yml y secrets.yml.

Rollbacks y recuperación

Para revertir un despliegue:

    bundle exec cap production deploy:rollback
  

Capistrano mantiene los últimos cinco releases (configurable con set :keep_releases, 5).

Buenas prácticas

Práctica Beneficio
Locking de despliegue (cap deploy:lock) Evita overlapping cuando varios despliegues se lanzan simultáneamente.
Revisar logs (cap production logs:tail) Diagnóstico inmediato ante fallos post-deploy.
Pruebas en staging antes de production Garantiza estabilidad y detecta errores tempranos.

Integración con CI/CD

Muchas plataformas de CI pueden ejecutar comandos Capistrano tras pasar la batería de tests. Basta con agregar un paso:

    - name: Deploy to production
      run: bundle exec cap production deploy
  

Recursos y documentación

Conclusión

Capistrano ofrece un marco robusto y flexible para automatizar despliegues de aplicaciones web. Con una configuración adecuada, hooks personalizados y buenas prácticas de CI/CD, es posible alcanzar un flujo de entrega continua ágil y fiable. Explorar la amplia gama de plugins y extensiones disponible en la comunidad también impulsa aún más su potencial.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

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