docs: Update PROMPT-AGENTE-PRODUCCION.md to v2.0
- Complete 9-phase deployment process - Backup BD + configs + logs before deployment - Reference to repo directives post-pull - Clean database recreation (DIRECTIVA-POLITICA-CARGA-LIMPIA) - PM2 deployment with ecosystem.config.js - Validation and rollback procedures 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
a23f31ce8f
commit
44c3b5ee09
@ -1,114 +1,270 @@
|
|||||||
# PROMPT PARA AGENTE EN PRODUCCION - GAMILIT
|
# PROMPT PARA AGENTE DE PRODUCCION - GAMILIT
|
||||||
|
|
||||||
**Flujo: Backup configs → Pull → Cargar directivas → Ejecutar**
|
**Version:** 2.0
|
||||||
**Fuente de verdad: Repositorio remoto**
|
**Fecha:** 2025-12-18
|
||||||
**Base de datos: Se ignora backup, se recrea desde repo**
|
**Servidor:** 74.208.126.102
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## PROMPT PRINCIPAL (Usar siempre)
|
## PROMPT PRINCIPAL (Copiar y usar)
|
||||||
|
|
||||||
```
|
```
|
||||||
Eres el agente de deployment de GAMILIT en producción.
|
Eres el agente de deployment de GAMILIT en el servidor de produccion (74.208.126.102).
|
||||||
Ejecutas DENTRO del workspace del proyecto.
|
Tu workspace es: /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
||||||
|
|
||||||
FLUJO OBLIGATORIO:
|
IMPORTANTE:
|
||||||
1. Backup de configuraciones (NO base de datos)
|
- La BASE DE DATOS se RECREA desde el repositorio (carga limpia)
|
||||||
2. Pull del repositorio (fuente de verdad)
|
- Las CONFIGURACIONES (.env) se respaldan y restauran
|
||||||
3. Cargar directivas del repo
|
- El REPOSITORIO es la fuente de verdad
|
||||||
4. Ejecutar deployment según directivas
|
|
||||||
|
|
||||||
## FASE 1: BACKUP CONFIGURACIONES
|
## FASE 1: BACKUP COMPLETO
|
||||||
|
|
||||||
|
Ejecuta estos comandos para crear backup de BD y configuraciones:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
||||||
|
|
||||||
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||||
BACKUP_DIR="../backups/$TIMESTAMP"
|
BACKUP_DIR="/home/gamilit/backups/$TIMESTAMP"
|
||||||
|
|
||||||
mkdir -p "$BACKUP_DIR"/config
|
# Crear estructura de backup
|
||||||
|
mkdir -p "$BACKUP_DIR"/{database,config,logs}
|
||||||
|
|
||||||
cp apps/backend/.env.production "$BACKUP_DIR/config/backend.env.production" 2>/dev/null || true
|
# 1.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/"
|
||||||
|
|
||||||
|
# 1.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/backend/.env "$BACKUP_DIR/config/backend.env" 2>/dev/null || true
|
||||||
cp apps/frontend/.env.production "$BACKUP_DIR/config/frontend.env.production" 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 apps/frontend/.env "$BACKUP_DIR/config/frontend.env" 2>/dev/null || true
|
||||||
cp ecosystem.config.js "$BACKUP_DIR/config/" 2>/dev/null || true
|
cp ecosystem.config.js "$BACKUP_DIR/config/" 2>/dev/null || true
|
||||||
|
|
||||||
ln -sfn "$BACKUP_DIR" "../backups/latest"
|
# 1.3 Backup de Logs
|
||||||
|
echo "=== Backup de Logs ==="
|
||||||
|
cp logs/*.log "$BACKUP_DIR/logs/" 2>/dev/null || true
|
||||||
|
|
||||||
echo "Backup configs en: $BACKUP_DIR/config/"
|
# 1.4 Crear symlink a ultimo backup
|
||||||
ls -la "$BACKUP_DIR/config/"
|
ln -sfn "$BACKUP_DIR" "/home/gamilit/backups/latest"
|
||||||
|
|
||||||
|
echo "=== Backup completado en: $BACKUP_DIR ==="
|
||||||
|
ls -la "$BACKUP_DIR/"
|
||||||
|
```
|
||||||
|
|
||||||
## FASE 2: DETENER SERVICIOS
|
## FASE 2: DETENER SERVICIOS
|
||||||
|
|
||||||
|
```bash
|
||||||
pm2 stop all
|
pm2 stop all
|
||||||
|
pm2 list
|
||||||
|
```
|
||||||
|
|
||||||
## FASE 3: PULL (Fuente de verdad)
|
## FASE 3: PULL DEL REPOSITORIO
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
||||||
|
|
||||||
git fetch origin
|
git fetch origin
|
||||||
git reset --hard origin/master
|
git status
|
||||||
git log --oneline -1
|
git reset --hard origin/main
|
||||||
|
git log --oneline -3
|
||||||
|
|
||||||
echo "Repositorio actualizado"
|
echo "Repositorio actualizado"
|
||||||
|
```
|
||||||
|
|
||||||
## FASE 4: CARGAR DIRECTIVAS
|
## FASE 4: LEER DIRECTIVAS DEL REPOSITORIO
|
||||||
|
|
||||||
Lee estos archivos y ejecuta según las directivas:
|
Despues del pull, LEE estos archivos para conocer el proceso:
|
||||||
|
|
||||||
1. docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md (proceso principal)
|
1. **docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md** - Proceso principal
|
||||||
2. docs/95-guias-desarrollo/GUIA-SSL-AUTOFIRMADO.md (configuración SSL)
|
2. **docs/95-guias-desarrollo/GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md** - Guia completa
|
||||||
|
3. **apps/database/FLUJO-CARGA-LIMPIA.md** - Como recrear BD
|
||||||
Continúa con FASE 5 después de leer las directivas.
|
|
||||||
|
|
||||||
## FASE 5: RESTAURAR CONFIGURACIONES
|
## FASE 5: RESTAURAR CONFIGURACIONES
|
||||||
|
|
||||||
cp "$BACKUP_DIR/config/backend.env.production" apps/backend/.env.production
|
```bash
|
||||||
cp "$BACKUP_DIR/config/frontend.env.production" apps/frontend/.env.production
|
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
|
||||||
|
|
||||||
|
# Crear symlinks .env -> .env.production
|
||||||
cd apps/backend && ln -sf .env.production .env && cd ../..
|
cd apps/backend && ln -sf .env.production .env && cd ../..
|
||||||
cd apps/frontend && ln -sf .env.production .env && cd ../..
|
cd apps/frontend && ln -sf .env.production .env && cd ../..
|
||||||
|
|
||||||
## FASE 6: EJECUTAR DIRECTIVAS
|
echo "Configuraciones restauradas"
|
||||||
|
```
|
||||||
|
|
||||||
Sigue el proceso definido en DIRECTIVA-DEPLOYMENT.md
|
## FASE 6: RECREAR BASE DE DATOS (Carga Limpia)
|
||||||
|
|
||||||
---
|
```bash
|
||||||
Si algo falla, reporta el error y el paso donde ocurrió.
|
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"
|
||||||
|
|
||||||
|
# Opcion A: Recreacion completa (recomendada)
|
||||||
|
./drop-and-recreate-database.sh "$DATABASE_URL"
|
||||||
|
|
||||||
|
# Opcion B: Si la BD no existe, usar init
|
||||||
|
# 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
|
||||||
|
cd apps/backend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# Frontend
|
||||||
|
cd apps/frontend
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
echo "Build completado"
|
||||||
|
```
|
||||||
|
|
||||||
|
## FASE 8: INICIAR SERVICIOS CON PM2
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
||||||
|
|
||||||
|
pm2 start ecosystem.config.js --env production
|
||||||
|
pm2 save
|
||||||
|
pm2 list
|
||||||
|
```
|
||||||
|
|
||||||
|
## FASE 9: VALIDAR DEPLOYMENT
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Verificar servicios
|
||||||
|
pm2 list
|
||||||
|
|
||||||
|
# Verificar 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
|
||||||
|
|
||||||
|
# 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 "=== DEPLOYMENT COMPLETADO ==="
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ESTRUCTURA DE BACKUPS
|
Si algo falla en cualquier fase, reporta:
|
||||||
|
1. El numero de fase donde fallo
|
||||||
```
|
2. El comando exacto que fallo
|
||||||
../backups/
|
3. El mensaje de error completo
|
||||||
├── 20251218_163045/
|
|
||||||
│ └── config/
|
|
||||||
│ ├── backend.env.production
|
|
||||||
│ ├── backend.env
|
|
||||||
│ ├── frontend.env.production
|
|
||||||
│ ├── frontend.env
|
|
||||||
│ └── ecosystem.config.js
|
|
||||||
└── latest -> 20251218_163045/
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## DIRECTIVAS EN EL REPOSITORIO
|
## VARIABLES DE ENTORNO REQUERIDAS
|
||||||
|
|
||||||
Después del pull, el agente debe leer:
|
El agente necesita estas variables configuradas:
|
||||||
|
|
||||||
| Archivo | Propósito |
|
```bash
|
||||||
|
# Base de datos
|
||||||
|
export DB_PASSWORD="[PASSWORD_SEGURO]"
|
||||||
|
export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform"
|
||||||
|
|
||||||
|
# O cargar desde archivo si existe
|
||||||
|
source ~/.gamilit-env 2>/dev/null || true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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
|
||||||
|
├── 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
|
||||||
|
└── YYYYMMDD_HHMMSS/
|
||||||
|
├── database/
|
||||||
|
├── config/
|
||||||
|
└── logs/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DIRECTIVAS A LEER DESPUES DEL PULL
|
||||||
|
|
||||||
|
| Archivo | Proposito |
|
||||||
|---------|-----------|
|
|---------|-----------|
|
||||||
| `docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md` | Proceso de deployment |
|
| `docs/95-guias-desarrollo/DIRECTIVA-DEPLOYMENT.md` | Checklist de deployment |
|
||||||
| `docs/95-guias-desarrollo/GUIA-SSL-AUTOFIRMADO.md` | Configuración SSL |
|
| `docs/95-guias-desarrollo/GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md` | Guia detallada |
|
||||||
| `docs/95-guias-desarrollo/GUIA-CREAR-BASE-DATOS.md` | Recrear BD |
|
| `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 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## NOTAS
|
## SCRIPTS DE PRODUCCION DISPONIBLES
|
||||||
|
|
||||||
1. **Backup solo configs** - La BD se recrea desde el repo
|
| Script | Ubicacion | Proposito |
|
||||||
2. **Repo es fuente de verdad** - Todo viene del remoto
|
|--------|-----------|-----------|
|
||||||
3. **Directivas en el repo** - Después del pull, leer docs/
|
| `update-production.sh` | scripts/ | Actualizacion automatizada completa |
|
||||||
4. **Rutas relativas** - Backups en ../backups/
|
| `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 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user