docs: Separar prompt de agente en 2 archivos (v4.0)
PROMPT-AGENTE-PRODUCCION.md (se copia al agente): - ETAPA 1: Backup BD + configs + Pull - ETAPA 2: Referencia a leer INSTRUCCIONES-DEPLOYMENT.md INSTRUCCIONES-DEPLOYMENT.md (se lee post-pull): - FASE 1: Restaurar configuraciones - FASE 2: Recrear BD (carga limpia) - FASE 3: Build backend/frontend - FASE 4: Iniciar PM2 - FASE 5: Validar deployment - Rollback si falla 🤖 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
0e99b5c02f
commit
94dc2ca560
214
projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md
Normal file
214
projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md
Normal file
@ -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*
|
||||||
@ -1,6 +1,6 @@
|
|||||||
# PROMPT PARA AGENTE DE PRODUCCION - GAMILIT
|
# PROMPT PARA AGENTE DE PRODUCCION - GAMILIT
|
||||||
|
|
||||||
**Version:** 3.0
|
**Version:** 4.0
|
||||||
**Fecha:** 2025-12-18
|
**Fecha:** 2025-12-18
|
||||||
**Servidor:** 74.208.126.102
|
**Servidor:** 74.208.126.102
|
||||||
|
|
||||||
@ -8,9 +8,13 @@
|
|||||||
|
|
||||||
## INSTRUCCIONES DE USO
|
## INSTRUCCIONES DE USO
|
||||||
|
|
||||||
Este archivo contiene el prompt completo y auto-contenido para el agente de produccion.
|
Este es el prompt INICIAL que se le da al agente de produccion.
|
||||||
**Copiar TODO el contenido entre las lineas `=== INICIO PROMPT ===` y `=== FIN PROMPT ===`**
|
**Copiar TODO el contenido entre `=== INICIO PROMPT ===` y `=== FIN PROMPT ===`**
|
||||||
y pegarlo al agente de produccion.
|
|
||||||
|
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:
|
CONTEXTO:
|
||||||
- Workspace: /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
- 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
|
- 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:
|
Tu trabajo tiene 2 ETAPAS:
|
||||||
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
|
|
||||||
|
|
||||||
---
|
## ETAPA 1: BACKUP Y PULL (Ejecutar ahora)
|
||||||
|
|
||||||
EJECUTA LAS SIGUIENTES 9 FASES EN ORDEN:
|
### Paso 1.1: Configurar variables
|
||||||
|
|
||||||
## FASE 1: CONFIGURAR VARIABLES
|
|
||||||
|
|
||||||
Primero, configura las variables de entorno necesarias:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# IMPORTANTE: Reemplaza [PASSWORD] con el password real de la BD
|
# 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"
|
export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform"
|
||||||
|
|
||||||
# Verificar conexion
|
# 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
|
### Paso 1.2: Backup de Base de Datos
|
||||||
|
|
||||||
Crear backup de BD, configuraciones y logs ANTES de cualquier cambio:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
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)
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||||
BACKUP_DIR="/home/gamilit/backups/$TIMESTAMP"
|
BACKUP_DIR="/home/gamilit/backups/$TIMESTAMP"
|
||||||
|
|
||||||
# Crear estructura
|
|
||||||
mkdir -p "$BACKUP_DIR"/{database,config,logs}
|
mkdir -p "$BACKUP_DIR"/{database,config,logs}
|
||||||
|
|
||||||
# 2.1 Backup de Base de Datos
|
|
||||||
echo "=== Backup de Base de Datos ==="
|
echo "=== Backup de Base de Datos ==="
|
||||||
pg_dump "$DATABASE_URL" | gzip > "$BACKUP_DIR/database/gamilit_$TIMESTAMP.sql.gz"
|
pg_dump "$DATABASE_URL" | gzip > "$BACKUP_DIR/database/gamilit_$TIMESTAMP.sql.gz"
|
||||||
ls -lh "$BACKUP_DIR/database/"
|
ls -lh "$BACKUP_DIR/database/"
|
||||||
|
```
|
||||||
|
|
||||||
# 2.2 Backup de Configuraciones
|
### Paso 1.3: Backup de Configuraciones
|
||||||
|
|
||||||
|
```bash
|
||||||
echo "=== Backup de Configuraciones ==="
|
echo "=== Backup de Configuraciones ==="
|
||||||
cp apps/backend/.env.production "$BACKUP_DIR/config/" 2>/dev/null || true
|
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/" 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
|
||||||
ls -la "$BACKUP_DIR/config/"
|
|
||||||
|
|
||||||
# 2.3 Backup de Logs
|
|
||||||
echo "=== Backup de Logs ==="
|
echo "=== Backup de Logs ==="
|
||||||
cp logs/*.log "$BACKUP_DIR/logs/" 2>/dev/null || true
|
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"
|
ln -sfn "$BACKUP_DIR" "/home/gamilit/backups/latest"
|
||||||
|
|
||||||
echo "=== BACKUP COMPLETADO: $BACKUP_DIR ==="
|
echo "=== BACKUP COMPLETADO: $BACKUP_DIR ==="
|
||||||
|
ls -la "$BACKUP_DIR/"
|
||||||
```
|
```
|
||||||
|
|
||||||
## FASE 3: DETENER SERVICIOS
|
### Paso 1.4: Detener servicios
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pm2 stop all
|
pm2 stop all
|
||||||
pm2 list
|
pm2 list
|
||||||
```
|
```
|
||||||
|
|
||||||
## FASE 4: ACTUALIZAR REPOSITORIO
|
### Paso 1.5: Pull del repositorio
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
||||||
@ -105,212 +96,36 @@ git log --oneline -5
|
|||||||
echo "=== Repositorio actualizado ==="
|
echo "=== Repositorio actualizado ==="
|
||||||
```
|
```
|
||||||
|
|
||||||
## FASE 5: RESTAURAR CONFIGURACIONES
|
---
|
||||||
|
|
||||||
Restaurar los .env de produccion desde el backup:
|
## ETAPA 2: DEPLOYMENT (Leer del repositorio)
|
||||||
|
|
||||||
```bash
|
Ahora que tienes el repositorio actualizado, LEE el archivo:
|
||||||
cd /home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit
|
|
||||||
BACKUP_DIR="/home/gamilit/backups/latest"
|
|
||||||
|
|
||||||
# Restaurar .env.production
|
**INSTRUCCIONES-DEPLOYMENT.md**
|
||||||
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
|
ubicado en la raiz del proyecto:
|
||||||
cd apps/backend && ln -sf .env.production .env && cd ../..
|
/home/isem/workspace/workspace-gamilit/gamilit/projects/gamilit/INSTRUCCIONES-DEPLOYMENT.md
|
||||||
cd apps/frontend && ln -sf .env.production .env && cd ../..
|
|
||||||
|
|
||||||
# Verificar
|
Ese archivo contiene las instrucciones completas para:
|
||||||
echo "=== Configuraciones restauradas ==="
|
- Restaurar configuraciones
|
||||||
ls -la apps/backend/.env* 2>/dev/null
|
- Recrear base de datos
|
||||||
ls -la apps/frontend/.env* 2>/dev/null
|
- Build de backend y frontend
|
||||||
```
|
- Iniciar servicios PM2
|
||||||
|
- Validar deployment
|
||||||
|
- Rollback si algo falla
|
||||||
|
|
||||||
## FASE 6: RECREAR BASE DE DATOS
|
EJECUTA las instrucciones de ese archivo.
|
||||||
|
|
||||||
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 algo falla en la ETAPA 1, reporta:
|
||||||
|
1. El paso donde fallo (1.1, 1.2, etc.)
|
||||||
Si el deployment falla, restaurar desde backup:
|
2. El comando exacto
|
||||||
|
3. El mensaje de error completo
|
||||||
```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 ===
|
=== FIN PROMPT ===
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## NOTAS PARA EL ADMINISTRADOR
|
*Ultima actualizacion: 2025-12-18 v4.0*
|
||||||
|
|
||||||
### 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*
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user