Volver a Casos de Ingeniería
15 de noviembre de 2024

Migración de VPS sin Caída de Servicio usando Despliegue Blue-Green

99.99% de tiempo de actividad durante la migración, 40% de reducción en el tiempo de respuesta

Laravel Docker Nginx CloudPanel GitHub Actions MySQL

El Cuello de Botella

Un cliente SaaS con más de 50.000 usuarios activos mensuales operaba en un único VPS heredado sin canalización de CI/CD. Cada despliegue requería SSH manual, git pull y composer install, lo que provocaba de 5 a 10 minutos de inactividad por lanzamiento. La base de datos estaba en la misma máquina, compitiendo por la E/S con la aplicación. Los tiempos de respuesta alcanzaban picos de 1.2 segundos bajo carga, y una caída completa del servidor durante el Black Friday le costó al cliente unos 12.000 dólares estimados en ingresos perdidos.


Arquitectura y Automatización

Diseñé una arquitectura de despliegue blue-green utilizando CloudPanel en dos instancias VPS detrás de un proxy inverso Nginx con comprobaciones de estado:

                  ┌──────────────┐
                  │  Proxy Nginx │
                  │ (health check)│
                  └──────┬───────┘
                          │
           ┌──────────────┴──────────────┐
           │                             │
    ┌──────▼──────┐              ┌──────▼──────┐
    │  VPS Blue   │              │  VPS Green  │
    │  (activo)   │              │  (espera)   │
    └──────┬──────┘              └──────┬──────┘
           │                             │
    ┌──────▼──────┐              ┌──────▼──────┐
    │  MySQL RDS  │              │  Redis      │
    │ (gestionado)│              │  (caché)    │
    └─────────────┘              └─────────────┘

El flujo de trabajo de GitHub Actions se activa al hacer push a main: compila la imagen Docker, realiza el despliegue en el VPS inactivo, ejecuta las migraciones y actualiza la ruta del proxy. La reversión (rollback) se realiza con un solo clic mediante la nueva ejecución en GitHub Actions.


ROI Medible

  • Tiempo de inactividad por despliegue: 5-10 min → 0 segundos (cero tiempo de caída)
  • Tiempo de respuesta (p95): 1.2s → 720ms (-40%)
  • Prevención de pérdida de ingresos: Pérdida de $12k en Black Friday → $0 (el escalado horizontal manejó el triple de tráfico)
  • Horas de desarrollo ahorradas: 4h/semana por desarrollador → 16h/mes liberadas para desarrollo de características
  • MTTR (Tiempo Medio de Recuperación): 45 min → menos de 2 min mediante reversión en un clic

Escrito por

Miguel Ortiz

Growth Engineer & Technical SEO

Hablemos de un Desafío Similar