From 0e99b5c02f6885adb252505d3e02aa3122d84407 Mon Sep 17 00:00:00 2001 From: rckrdmrd Date: Thu, 18 Dec 2025 15:17:19 -0600 Subject: [PATCH] docs: PROMPT-AGENTE-PRODUCCION v3.0 - Auto-contenido MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Prompt completamente auto-contenido (no depende del repo) - FASE 1: Configurar variables ANTES de backup - FASE 2: Backup completo ANTES de pull - Incluye contexto, principios, 9 fases, rollback - Marcadores claros INICIO/FIN para copiar 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- projects/gamilit/PROMPT-AGENTE-PRODUCCION.md | 295 +++++++++++-------- 1 file changed, 170 insertions(+), 125 deletions(-) diff --git a/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md b/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md index 147a4d7..0adf96e 100644 --- a/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md +++ b/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md @@ -1,25 +1,56 @@ # PROMPT PARA AGENTE DE PRODUCCION - GAMILIT -**Version:** 2.0 +**Version:** 3.0 **Fecha:** 2025-12-18 **Servidor:** 74.208.126.102 --- -## PROMPT PRINCIPAL (Copiar y usar) +## 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). -Tu workspace es: /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit -IMPORTANTE: -- La BASE DE DATOS se RECREA desde el repositorio (carga limpia) -- Las CONFIGURACIONES (.env) se respaldan y restauran -- El REPOSITORIO es la fuente de verdad +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 -## FASE 1: BACKUP COMPLETO +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 estos comandos para crear backup de BD y configuraciones: +--- + +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 @@ -27,44 +58,41 @@ 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 de backup +# Crear estructura mkdir -p "$BACKUP_DIR"/{database,config,logs} -# 1.1 Backup de Base de Datos +# 2.1 Backup de Base de Datos echo "=== Backup de Base de Datos ===" -export DB_PASSWORD="[TU_PASSWORD_DE_BD]" -export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform" - pg_dump "$DATABASE_URL" | gzip > "$BACKUP_DIR/database/gamilit_$TIMESTAMP.sql.gz" -echo "BD respaldada en: $BACKUP_DIR/database/" +ls -lh "$BACKUP_DIR/database/" -# 1.2 Backup de Configuraciones +# 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/" -# 1.3 Backup de Logs +# 2.3 Backup de Logs echo "=== Backup de Logs ===" cp logs/*.log "$BACKUP_DIR/logs/" 2>/dev/null || true -# 1.4 Crear symlink a ultimo backup +# 2.4 Crear symlink a ultimo backup ln -sfn "$BACKUP_DIR" "/home/gamilit/backups/latest" -echo "=== Backup completado en: $BACKUP_DIR ===" -ls -la "$BACKUP_DIR/" +echo "=== BACKUP COMPLETADO: $BACKUP_DIR ===" ``` -## FASE 2: DETENER SERVICIOS +## FASE 3: DETENER SERVICIOS ```bash pm2 stop all pm2 list ``` -## FASE 3: PULL DEL REPOSITORIO +## FASE 4: ACTUALIZAR REPOSITORIO ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit @@ -72,47 +100,57 @@ cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit git fetch origin git status git reset --hard origin/main -git log --oneline -3 +git log --oneline -5 -echo "Repositorio actualizado" +echo "=== Repositorio actualizado ===" ``` -## FASE 4: LEER DIRECTIVAS DEL REPOSITORIO - -Despues del pull, LEE estos archivos para conocer el proceso: - -1. **docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md** - Proceso principal -2. **docs/95-guias-desarrollo/GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md** - Guia completa -3. **apps/database/FLUJO-CARGA-LIMPIA.md** - Como recrear BD - ## 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 de produccion -cp "$BACKUP_DIR/config/.env.production" apps/backend/.env.production 2>/dev/null || true -cp "$BACKUP_DIR/config/.env.production" apps/frontend/.env.production 2>/dev/null || true +# 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 ../.. -echo "Configuraciones restauradas" +# 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 (Carga Limpia) +## 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 -export DB_PASSWORD="[TU_PASSWORD_DE_BD]" -export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform" +# Verificar que el script existe +ls -la drop-and-recreate-database.sh -# Opcion A: Recreacion completa (recomendada) +# Ejecutar recreacion completa +# Este script: DROP BD -> CREATE BD -> Ejecuta DDL (16 fases) -> Carga Seeds (38+ archivos) ./drop-and-recreate-database.sh "$DATABASE_URL" +``` -# Opcion B: Si la BD no existe, usar init +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" ``` @@ -122,76 +160,112 @@ export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamil 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" +echo "=== Build completado ===" ``` -## FASE 8: INICIAR SERVICIOS CON PM2 +## 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 -# Verificar servicios +cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit + +echo "=== 9.1 Estado de PM2 ===" pm2 list -# Verificar health del backend +echo "=== 9.2 Health del Backend ===" curl -s http://localhost:3006/api/health | head -20 -# Verificar frontend -curl -s -o /dev/null -w "%{http_code}" http://localhost:3005 +echo "=== 9.3 Frontend accesible ===" +HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3005) +echo "HTTP Status: $HTTP_CODE" -# Verificar base de datos -psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM auth_management.tenants;" -psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM auth.users;" -psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM educational_content.modules;" +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 "=== DEPLOYMENT COMPLETADO ===" +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+ + --- -Si algo falla en cualquier fase, reporta: -1. El numero de fase donde fallo -2. El comando exacto que fallo -3. El mensaje de error completo -``` +## ROLLBACK (Si algo falla) ---- - -## VARIABLES DE ENTORNO REQUERIDAS - -El agente necesita estas variables configuradas: +Si el deployment falla, restaurar desde backup: ```bash -# Base de datos -export DB_PASSWORD="[PASSWORD_SEGURO]" -export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform" +BACKUP_DIR="/home/gamilit/backups/latest" -# O cargar desde archivo si existe -source ~/.gamilit-env 2>/dev/null || true +# 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 ``` --- -## ESTRUCTURA DEL SERVIDOR +## 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/ @@ -199,73 +273,44 @@ source ~/.gamilit-env 2>/dev/null || true │ ├── 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 -├── docs/95-guias-desarrollo/ # Directivas y guias ├── ecosystem.config.js # Configuracion PM2 └── logs/ # Logs de aplicacion -/home/gamilit/backups/ # Backups de BD y configs +/home/gamilit/backups/ # Backups └── YYYYMMDD_HHMMSS/ - ├── database/ - ├── config/ - └── logs/ + ├── database/ # pg_dump comprimido + ├── config/ # .env files + └── logs/ # Logs de aplicacion ``` ---- +### Scripts disponibles post-pull -## DIRECTIVAS A LEER DESPUES DEL PULL - -| 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 | -| `docs/95-guias-desarrollo/GUIA-SSL-AUTOFIRMADO.md` | Configuracion SSL | -| `apps/database/FLUJO-CARGA-LIMPIA.md` | Recreacion de BD | - ---- - -## SCRIPTS DE PRODUCCION DISPONIBLES +Despues del pull, estos scripts estaran disponibles: | Script | Ubicacion | Proposito | |--------|-----------|-----------| -| `update-production.sh` | scripts/ | Actualizacion automatizada completa | -| `diagnose-production.sh` | scripts/ | Diagnostico del sistema | -| `repair-missing-data.sh` | scripts/ | Reparar datos faltantes | -| `build-production.sh` | scripts/ | Solo build | -| `deploy-production.sh` | scripts/ | Solo deploy PM2 | -| `pre-deploy-check.sh` | scripts/ | Validacion pre-deploy | -| `drop-and-recreate-database.sh` | apps/database/ | Recrear BD | -| `create-database.sh` | apps/database/ | Crear estructura BD | +| 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 | --- -## ROLLBACK (Si algo falla) - -```bash -BACKUP_DIR="/home/gamilit/backups/latest" - -# Restaurar BD desde backup -gunzip -c "$BACKUP_DIR/database/gamilit_*.sql.gz" | psql "$DATABASE_URL" - -# Restaurar configs -cp "$BACKUP_DIR/config/"* apps/backend/ -cp "$BACKUP_DIR/config/"* apps/frontend/ - -# Reiniciar servicios -pm2 restart all -``` - ---- - -## NOTAS IMPORTANTES - -1. **Password de BD**: Siempre exportar `DB_PASSWORD` antes de ejecutar -2. **Carga limpia**: La BD se RECREA, no se migra -3. **Configs preservadas**: Los .env se respaldan y restauran -4. **Fuente de verdad**: El repositorio Git es la fuente de verdad -5. **PM2**: Usar `ecosystem.config.js` para iniciar servicios - ---- - -*Ultima actualizacion: 2025-12-18* +*Ultima actualizacion: 2025-12-18 v3.0*