diff --git a/projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md b/projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md new file mode 100644 index 0000000..c8ef8fc --- /dev/null +++ b/projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md @@ -0,0 +1,214 @@ +# 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* diff --git a/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md b/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md index 0adf96e..542d922 100644 --- a/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md +++ b/projects/gamilit/PROMPT-AGENTE-PRODUCCION.md @@ -1,6 +1,6 @@ # PROMPT PARA AGENTE DE PRODUCCION - GAMILIT -**Version:** 3.0 +**Version:** 4.0 **Fecha:** 2025-12-18 **Servidor:** 74.208.126.102 @@ -8,9 +8,13 @@ ## 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. +Este es el prompt INICIAL que se le da al agente de produccion. +**Copiar TODO el contenido entre `=== INICIO PROMPT ===` y `=== FIN PROMPT ===`** + +El agente ejecutara: +1. Backup de BD y configuraciones +2. Pull del repositorio +3. Leera las instrucciones de deployment del repositorio --- @@ -20,24 +24,13 @@ Eres el agente de deployment de GAMILIT en el servidor de produccion (74.208.126 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 +Tu trabajo tiene 2 ETAPAS: ---- +## ETAPA 1: BACKUP Y PULL (Ejecutar ahora) -EJECUTA LAS SIGUIENTES 9 FASES EN ORDEN: - -## FASE 1: CONFIGURAR VARIABLES - -Primero, configura las variables de entorno necesarias: +### Paso 1.1: Configurar variables ```bash # IMPORTANTE: Reemplaza [PASSWORD] con el password real de la BD @@ -45,12 +38,10 @@ 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" +psql "$DATABASE_URL" -c "SELECT 1;" && echo "Conexion OK" || echo "ERROR: No se puede conectar" ``` -## FASE 2: BACKUP COMPLETO - -Crear backup de BD, configuraciones y logs ANTES de cualquier cambio: +### Paso 1.2: Backup de Base de Datos ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit @@ -58,41 +49,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 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 +### Paso 1.3: Backup de Configuraciones + +```bash 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 +# Crear symlink a ultimo backup ln -sfn "$BACKUP_DIR" "/home/gamilit/backups/latest" echo "=== BACKUP COMPLETADO: $BACKUP_DIR ===" +ls -la "$BACKUP_DIR/" ``` -## FASE 3: DETENER SERVICIOS +### Paso 1.4: Detener servicios ```bash pm2 stop all pm2 list ``` -## FASE 4: ACTUALIZAR REPOSITORIO +### Paso 1.5: Pull del repositorio ```bash cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit @@ -105,212 +96,36 @@ git log --oneline -5 echo "=== Repositorio actualizado ===" ``` -## FASE 5: RESTAURAR CONFIGURACIONES +--- -Restaurar los .env de produccion desde el backup: +## ETAPA 2: DEPLOYMENT (Leer del repositorio) -```bash -cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit -BACKUP_DIR="/home/gamilit/backups/latest" +Ahora que tienes el repositorio actualizado, LEE el archivo: -# 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" +**INSTRUCCIONES-DEPLOYMENT.md** -# Crear symlinks .env -> .env.production -cd apps/backend && ln -sf .env.production .env && cd ../.. -cd apps/frontend && ln -sf .env.production .env && cd ../.. +ubicado en la raiz del proyecto: +/home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md -# Verificar -echo "=== Configuraciones restauradas ===" -ls -la apps/backend/.env* 2>/dev/null -ls -la apps/frontend/.env* 2>/dev/null -``` +Ese archivo contiene las instrucciones completas para: +- Restaurar configuraciones +- Recrear base de datos +- Build de backend y frontend +- Iniciar servicios PM2 +- Validar deployment +- Rollback si algo falla -## 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+ +EJECUTA las instrucciones de ese archivo. --- -## 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 +Si algo falla en la ETAPA 1, reporta: +1. El paso donde fallo (1.1, 1.2, etc.) +2. El comando exacto +3. El mensaje de error completo === 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* +*Ultima actualizacion: 2025-12-18 v4.0*