# INSTRUCCIONES DE DEPLOYMENT - GAMILIT **Version:** 1.0 **Fecha:** 2025-12-18 --- Este archivo contiene las instrucciones de deployment que el agente ejecuta DESPUES de hacer backup y pull. **Prerequisitos:** - Ya ejecutaste backup de BD y configuraciones - Ya hiciste pull del repositorio - Los servicios PM2 estan detenidos - Tienes las variables DB_PASSWORD y DATABASE_URL configuradas --- ## FASE 1: RESTAURAR CONFIGURACIONES Restaurar los .env de produccion desde el backup: ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit BACKUP_DIR="/home/gamilit/backups/latest" # Restaurar .env.production cp "$BACKUP_DIR/config/.env.production" apps/backend/.env.production 2>/dev/null || echo "WARN: No habia .env.production de backend" cp "$BACKUP_DIR/config/.env.production" apps/frontend/.env.production 2>/dev/null || echo "WARN: No habia .env.production de frontend" # Crear symlinks .env -> .env.production cd apps/backend && ln -sf .env.production .env && cd ../.. cd apps/frontend && ln -sf .env.production .env && cd ../.. # Verificar echo "=== Configuraciones restauradas ===" ls -la apps/backend/.env* 2>/dev/null ls -la apps/frontend/.env* 2>/dev/null ``` --- ## FASE 2: RECREAR BASE DE DATOS La BD se recrea completamente (politica de CARGA LIMPIA): ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database # Verificar que el script existe ls -la drop-and-recreate-database.sh # Ejecutar recreacion completa # Este script: DROP BD -> CREATE BD -> DDL (16 fases) -> Seeds (38+ archivos) ./drop-and-recreate-database.sh "$DATABASE_URL" ``` **Si el script falla**, alternativas: ```bash # Opcion A: Si la BD existe pero esta vacia ./create-database.sh # Opcion B: Si necesitas crear desde cero (usuario no existe) cd scripts && ./init-database.sh --env prod --password "$DB_PASSWORD" ``` --- ## FASE 3: BUILD ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit # Backend echo "=== Building Backend ===" cd apps/backend npm install npm run build cd ../.. # Frontend echo "=== Building Frontend ===" cd apps/frontend npm install npm run build cd ../.. echo "=== Build completado ===" ``` --- ## FASE 4: INICIAR SERVICIOS ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit # Iniciar con PM2 pm2 start ecosystem.config.js --env production # Guardar configuracion pm2 save # Mostrar estado pm2 list ``` --- ## FASE 5: VALIDAR DEPLOYMENT ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit echo "=== 5.1 Estado de PM2 ===" pm2 list echo "=== 5.2 Health del Backend ===" curl -s http://localhost:3006/api/health | head -20 echo "=== 5.3 Frontend accesible ===" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3005) echo "HTTP Status: $HTTP_CODE" echo "=== 5.4 Validacion de Base de Datos ===" psql "$DATABASE_URL" -c "SELECT 'tenants' as tabla, COUNT(*) as total FROM auth_management.tenants UNION ALL SELECT 'users', COUNT(*) FROM auth.users UNION ALL SELECT 'modules', COUNT(*) FROM educational_content.modules UNION ALL SELECT 'maya_ranks', COUNT(*) FROM gamification_system.maya_ranks UNION ALL SELECT 'feature_flags', COUNT(*) FROM system_configuration.feature_flags;" echo "=== 5.5 Logs recientes ===" pm2 logs --lines 10 --nostream ``` **Valores esperados:** - tenants: 14+ - users: 20+ - modules: 5 - maya_ranks: 5 - feature_flags: 26+ --- ## ROLLBACK (Si algo falla) ```bash BACKUP_DIR="/home/gamilit/backups/latest" # Restaurar BD echo "=== Restaurando Base de Datos ===" gunzip -c "$BACKUP_DIR/database/gamilit_*.sql.gz" | psql "$DATABASE_URL" # Restaurar configs echo "=== Restaurando Configuraciones ===" cp "$BACKUP_DIR/config/.env.production" apps/backend/ 2>/dev/null || true cp "$BACKUP_DIR/config/.env.production" apps/frontend/ 2>/dev/null || true # Reiniciar servicios pm2 restart all pm2 list ``` --- ## REPORTE DE ERRORES Si algo falla, reporta: 1. Numero de FASE donde fallo (1-5) 2. Comando exacto que fallo 3. Mensaje de error completo 4. Output de: `pm2 list` y `pm2 logs --lines 50 --nostream` --- ## INFORMACION ADICIONAL ### Estructura del proyecto ``` /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/ ├── apps/ │ ├── backend/ # NestJS API (puerto 3006, 2 instancias PM2) │ ├── frontend/ # React App (puerto 3005, 1 instancia PM2) │ └── database/ # DDL, Seeds, Scripts ├── scripts/ # Scripts de produccion ├── ecosystem.config.js # Configuracion PM2 └── logs/ # Logs de aplicacion ``` ### Scripts disponibles | Script | Ubicacion | Proposito | |--------|-----------|-----------| | drop-and-recreate-database.sh | apps/database/ | Recrear BD completa | | create-database.sh | apps/database/ | Solo DDL + Seeds | | init-database.sh | apps/database/scripts/ | Crear usuario + BD | | build-production.sh | scripts/ | Solo build | | deploy-production.sh | scripts/ | Solo deploy PM2 | | pre-deploy-check.sh | scripts/ | Validacion pre-deploy | | diagnose-production.sh | scripts/ | Diagnostico del sistema | ### Documentacion adicional | Archivo | Proposito | |---------|-----------| | docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md | Checklist | | docs/95-guias-desarrollo/GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md | Guia detallada | | docs/95-guias-desarrollo/GUIA-VALIDACION-PRODUCCION.md | Troubleshooting | | apps/database/FLUJO-CARGA-LIMPIA.md | Recreacion de BD | --- *Ultima actualizacion: 2025-12-18 v1.0*