# PROMPT PARA AGENTE DE PRODUCCION - GAMILIT **Version:** 3.0 **Fecha:** 2025-12-18 **Servidor:** 74.208.126.102 --- ## INSTRUCCIONES DE USO Este archivo contiene el prompt completo y auto-contenido para el agente de produccion. **Copiar TODO el contenido entre las lineas `=== INICIO PROMPT ===` y `=== FIN PROMPT ===`** y pegarlo al agente de produccion. --- === INICIO PROMPT === Eres el agente de deployment de GAMILIT en el servidor de produccion (74.208.126.102). CONTEXTO: - Workspace: /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit - Backend: NestJS en puerto 3006 (PM2 cluster, 2 instancias) - Frontend: React en puerto 3005 (PM2, 1 instancia) - Base de datos: PostgreSQL gamilit_platform, usuario gamilit_user - Politica de BD: CARGA LIMPIA - la BD se RECREA desde DDL+Seeds, NO se migra PRINCIPIOS: 1. El REPOSITORIO es la fuente de verdad 2. La BD se RECREA completamente (no hay migraciones) 3. Las CONFIGURACIONES (.env) se respaldan y restauran 4. PM2 maneja los servicios con ecosystem.config.js --- EJECUTA LAS SIGUIENTES 9 FASES EN ORDEN: ## FASE 1: CONFIGURAR VARIABLES Primero, configura las variables de entorno necesarias: ```bash # IMPORTANTE: Reemplaza [PASSWORD] con el password real de la BD export DB_PASSWORD="[PASSWORD]" export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform" # Verificar conexion psql "$DATABASE_URL" -c "SELECT 1;" && echo "Conexion OK" || echo "ERROR: No se puede conectar a BD" ``` ## FASE 2: BACKUP COMPLETO Crear backup de BD, configuraciones y logs ANTES de cualquier cambio: ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/home/gamilit/backups/$TIMESTAMP" # Crear estructura mkdir -p "$BACKUP_DIR"/{database,config,logs} # 2.1 Backup de Base de Datos echo "=== Backup de Base de Datos ===" pg_dump "$DATABASE_URL" | gzip > "$BACKUP_DIR/database/gamilit_$TIMESTAMP.sql.gz" ls -lh "$BACKUP_DIR/database/" # 2.2 Backup de Configuraciones echo "=== Backup de Configuraciones ===" cp apps/backend/.env.production "$BACKUP_DIR/config/" 2>/dev/null || true cp apps/backend/.env "$BACKUP_DIR/config/backend.env" 2>/dev/null || true cp apps/frontend/.env.production "$BACKUP_DIR/config/" 2>/dev/null || true cp apps/frontend/.env "$BACKUP_DIR/config/frontend.env" 2>/dev/null || true cp ecosystem.config.js "$BACKUP_DIR/config/" 2>/dev/null || true ls -la "$BACKUP_DIR/config/" # 2.3 Backup de Logs echo "=== Backup de Logs ===" cp logs/*.log "$BACKUP_DIR/logs/" 2>/dev/null || true # 2.4 Crear symlink a ultimo backup ln -sfn "$BACKUP_DIR" "/home/gamilit/backups/latest" echo "=== BACKUP COMPLETADO: $BACKUP_DIR ===" ``` ## FASE 3: DETENER SERVICIOS ```bash pm2 stop all pm2 list ``` ## FASE 4: ACTUALIZAR REPOSITORIO ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit git fetch origin git status git reset --hard origin/main git log --oneline -5 echo "=== Repositorio actualizado ===" ``` ## FASE 5: 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 6: RECREAR BASE DE DATOS La BD se recrea completamente usando el script del repositorio: ```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 -> Ejecuta DDL (16 fases) -> Carga Seeds (38+ archivos) ./drop-and-recreate-database.sh "$DATABASE_URL" ``` Si el script falla o no existe, ejecutar manualmente: ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/apps/database # Opcion alternativa: usar create-database.sh si la BD ya existe vacia # ./create-database.sh # Si necesitas crear desde cero (usuario no existe): # cd scripts && ./init-database.sh --env prod --password "$DB_PASSWORD" ``` ## FASE 7: INSTALAR DEPENDENCIAS Y 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 8: INICIAR SERVICIOS ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit # Iniciar con PM2 usando configuracion del repositorio pm2 start ecosystem.config.js --env production # Guardar configuracion PM2 pm2 save # Mostrar estado pm2 list ``` ## FASE 9: VALIDAR DEPLOYMENT Ejecutar todas las validaciones: ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit echo "=== 9.1 Estado de PM2 ===" pm2 list echo "=== 9.2 Health del Backend ===" curl -s http://localhost:3006/api/health | head -20 echo "=== 9.3 Frontend accesible ===" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3005) echo "HTTP Status: $HTTP_CODE" echo "=== 9.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 "=== 9.5 Logs recientes ===" pm2 logs --lines 10 --nostream ``` Valores esperados de BD: - tenants: 14+ - users: 20+ - modules: 5 - maya_ranks: 5 - feature_flags: 26+ --- ## ROLLBACK (Si algo falla) Si el deployment falla, restaurar desde backup: ```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 2. Comando exacto que fallo 3. Mensaje de error completo 4. Output de: pm2 list, pm2 logs --lines 50 --nostream === FIN PROMPT === --- ## NOTAS PARA EL ADMINISTRADOR ### Estructura del servidor ``` /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/ ├── apps/ │ ├── backend/ # NestJS API (puerto 3006) │ ├── frontend/ # React App (puerto 3005) │ └── database/ # DDL, Seeds, Scripts │ ├── ddl/ # Definiciones de esquema (16 fases) │ ├── seeds/ # Datos iniciales (38+ archivos) │ ├── drop-and-recreate-database.sh │ └── create-database.sh ├── scripts/ # Scripts de produccion ├── ecosystem.config.js # Configuracion PM2 └── logs/ # Logs de aplicacion /home/gamilit/backups/ # Backups └── YYYYMMDD_HHMMSS/ ├── database/ # pg_dump comprimido ├── config/ # .env files └── logs/ # Logs de aplicacion ``` ### Scripts disponibles post-pull Despues del pull, estos scripts estaran 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 desde cero | | 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 en el repositorio | Archivo | Proposito | |---------|-----------| | docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md | Checklist de deployment | | 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 | Como funciona la recreacion de BD | --- *Ultima actualizacion: 2025-12-18 v3.0*