docs: PROMPT-AGENTE-PRODUCCION v3.0 - Auto-contenido

- 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 <noreply@anthropic.com>
This commit is contained in:
rckrdmrd 2025-12-18 15:17:19 -06:00
parent 44c3b5ee09
commit 0e99b5c02f

View File

@ -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*