← Volver al Índice

🚀 SubastApp - Postmortem del Despliegue

Análisis completo del proceso de despliegue en Digital Ocean

✅ Resultado: EXITOSO

Fecha del despliegue: 23 de Agosto de 2025

Duración total: ~3 horas

Equipo: Ingeniero de Sistemas + Cursor AI

🎯 Objetivo del Proyecto

Desplegar la aplicación SubastApp en un servidor de Digital Ocean para uso intensivo durante 10 horas por 20 personas, seguido de mantenimiento en modo producción.

🏗️ Arquitectura Final Implementada

Infraestructura

Proveedor: Digital Ocean
Servicio: Droplet (Ubuntu 22.04)
Especificaciones: 2GB RAM, 1 vCPU, 50GB SSD
Región: Amsterdam (ams3)
IP: 159.223.6.121

Stack Tecnológico

Backend: Node.js 18 + TypeScript + Express + Socket.IO + Prisma
Frontend: React + TypeScript + Vite + Tailwind CSS
Base de datos: MySQL 8.0 (local en Docker)
Proxy/Web Server: Nginx
Contenedores: Docker + Docker Compose
Infraestructura como código: Terraform
CI/CD: GitHub Actions

📝 Cronología del Despliegue

Fase 1: Análisis y Planificación (30 min)
Duración: 30 minutos
  • Análisis del código: Revisión de la aplicación SUBASTAPP
  • Evaluación de opciones:
    • Digital Ocean App Platform + Managed MySQL (rechazado por costos)
    • Droplet + Managed MySQL (rechazado por complejidad)
    • Droplet + MySQL local (seleccionado por costos y control)
  • Decisión: Usar Docker para facilitar futura migración a App Platform
Fase 2: Configuración de Repositorios (45 min)
Duración: 45 minutos
  • Separación de repositorios:
    • SubastApp: Código de la aplicación
    • subastapp-infra: Infraestructura como código
  • Configuración de Git:
    • Primer commit con mensaje específico
    • Cambio de repositorio remoto
    • Configuración de workspace Terraform
Fase 3: Infraestructura como Código (60 min)
Duración: 60 minutos
  • Terraform:
    • Workspace subastapp creado
    • Droplet configurado con cloud-init
    • SSH keys configuradas
    • Variables de entorno definidas
  • GitHub Actions:
    • Workflow para despliegue de infraestructura
    • Workflow para despliegue de aplicación
    • Configuración de secrets y PAT
Fase 4: Despliegue Inicial (90 min)
Duración: 90 minutos
Problemas encontrados:
  • Error de SSH en GitHub Actions
  • Errores de tar durante transferencia de archivos
  • Corrupción de archivos package.json (Windows → Linux)
  • Errores de dependencias npm
  • Problemas de TypeScript en build
  • Errores de CORS
  • Problemas de conectividad de base de datos
Fase 5: Resolución de Problemas (120 min)
Duración: 120 minutos
Solución de errores:
  • Regeneración de SSH keys
  • Cambio de tar a rsync para transferencia
  • Recreación manual de archivos package.json
  • Downgrade de dependencias para compatibilidad
  • Configuración de CORS para IP de producción
  • Configuración correcta de Docker Compose con MySQL
Fase 6: Población de Base de Datos (30 min)
Duración: 30 minutos
  • Datos iniciales:
    • 6 usuarios de prueba creados
    • 2 items de subasta (jugadores de fútbol)
    • 1 puja de ejemplo
    • Configuración de subasta
Fase 7: Seguridad y Limpieza (45 min)
Duración: 45 minutos
Problema de seguridad: Información sensible en repositorios
Acciones tomadas:
  • Eliminación de archivos .env
  • Eliminación de claves SSH
  • Regeneración de tokens comprometidos
  • Configuración de .gitignore
  • Actualización de repositorios
Fase 8: Documentación Web (90 min)
Duración: 90 minutos
  • Creación de documentación completa:
    • Postmortem del despliegue
    • Arquitectura del sistema
    • Checklist de seguridad
    • Guía de solución de problemas
    • Timeline de interacciones
    • Memories del AI Assistant

📊 Estadísticas Finales

Tiempo total: ~3 horas
Problemas resueltos: 7 problemas críticos
Repositorios creados: 2 repositorios especializados
Documentación generada: 8 archivos de documentación

🎯 Lecciones Aprendidas

🔮 Próximos Pasos