docs: hardening .gitignore TLS/ACME y actualización de documentación de despliegue

- .gitignore: agrega patrones nginx/certs-data/**, *.key, *.csr, *.crt, *.cer
- DESPLIEGUE.md: validación post-deploy LMS, trampas localhost:5433, smoke test, nota de certs
- ManualDeConfiguracion.md: nombres de contenedores corregidos, health checks, nota de seguridad
This commit is contained in:
2026-04-06 09:37:44 -04:00
parent 516a903497
commit 061c482b74
3 changed files with 112 additions and 8 deletions
+7
View File
@@ -37,3 +37,10 @@ services/lms-service/dev_keys/
# --- SSH Keys ---
*.pem
ubuntu.pem
# --- TLS/ACME secrets (never commit) ---
nginx/certs-data/**
*.key
*.csr
*.crt
*.cer
+70
View File
@@ -64,6 +64,21 @@ https://learning.norteamericano.com (LMS/Estudiantes)
## Requisitos Previos
### Seguridad de certificados (git)
Nunca versionar material de certificados o cuentas ACME del servidor.
Rutas sensibles (ejemplos):
```bash
nginx/certs-data/
*.key
*.csr
*.crt
```
Estas rutas deben permanecer ignoradas por git y gestionarse solo en el servidor/volumen de runtime.
### 1. Configurar DNS
Antes de ejecutar `deploy.sh`, configura los registros DNS en tu proveedor de dominio:
@@ -129,6 +144,31 @@ docker logs nginx-proxy --tail 20
docker logs acme-companion --tail 50
```
### Validacion rapida de LMS (post-deploy)
Despues de desplegar, valida que el backend LMS realmente levanto en `3002` y que no quedo con una URL de DB local invalida dentro de Docker.
```bash
# Health interno desde la red Docker
docker exec openccb-studio node -e "fetch('http://experience:3002/health').then(async r=>{console.log(r.status);console.log(await r.text())})"
# Ver variables activas en experience
docker exec openccb-experience sh -lc 'echo DATABASE_URL=$DATABASE_URL; echo LMS_DATABASE_URL=$LMS_DATABASE_URL'
```
Valores esperados en Docker:
```bash
DATABASE_URL=postgresql://user:<password>@db:5432/openccb_lms
LMS_DATABASE_URL=postgresql://user:<password>@db:5432/openccb_lms
```
Si aparece `localhost:5433` en el contenedor `openccb-experience`, recrea el servicio con la variable correcta:
```bash
LMS_DATABASE_URL='postgresql://user:password@db:5432/openccb_lms' docker compose up -d --force-recreate experience
```
### Reiniciar servicios
```bash
# Reiniciar todo
@@ -173,6 +213,36 @@ docker logs nginx-proxy --tail 20
sudo docker compose restart
```
### LMS inicia pero API no responde en `3002`
**Sintoma comun:** el frontend en `3003` carga, pero `/lms-api/*` falla y en logs aparece `PoolTimedOut`.
**Causa comun:** `openccb-experience` arranco con `DATABASE_URL` o `LMS_DATABASE_URL` apuntando a `localhost:5433` (invalido dentro del contenedor).
**Solucion:**
```bash
docker logs openccb-experience --tail 80
docker exec openccb-experience sh -lc 'echo DATABASE_URL=$DATABASE_URL; echo LMS_DATABASE_URL=$LMS_DATABASE_URL'
LMS_DATABASE_URL='postgresql://user:password@db:5432/openccb_lms' docker compose up -d --force-recreate experience
```
### Smoke test de permisos de audio (admin/instructor/student)
Existe un script para validar reglas de acceso de evaluaciones de audio en LMS:
```bash
./scripts/smoke_audio_roles.sh
```
El script crea fixtures temporales, ejecuta validaciones y limpia automaticamente.
Para debug sin limpiar datos:
```bash
KEEP_FIXTURES=1 ./scripts/smoke_audio_roles.sh
```
### Certificados SSL no se generan
**Síntomas:**
+35 -8
View File
@@ -613,20 +613,44 @@ docker volume rm openccb_db_data
./install.sh
```
### Seguridad de certificados
No subas a git claves privadas ni artefactos ACME.
```bash
nginx/certs-data/
*.key
*.csr
*.crt
```
Si necesitas respaldar certificados, hazlo fuera del repositorio.
### Logs y Debugging
```bash
# Ver logs de servicios
docker-compose logs -f cms
docker-compose logs -f lms
docker-compose logs -f studio
docker-compose logs -f experience
docker compose logs -f studio
docker compose logs -f experience
docker compose logs -f db
# Logs con filtro
docker-compose logs -f cms | grep -i error
docker compose logs -f experience | grep -i error
# Acceder a DB
docker exec -it openccb-db-1 psql -U user -d openccb_cms
docker exec -it openccb-db psql -U user -d openccb_cms
# Verificar health LMS interno (desde red Docker)
docker exec openccb-studio node -e "fetch('http://experience:3002/health').then(async r=>{console.log(r.status);console.log(await r.text())})"
# Verificar variables activas en experience
docker exec openccb-experience sh -lc 'echo DATABASE_URL=$DATABASE_URL; echo LMS_DATABASE_URL=$LMS_DATABASE_URL'
```
Si `openccb-experience` queda con `localhost:5433` en `DATABASE_URL`/`LMS_DATABASE_URL`, recrear con DB interna Docker:
```bash
LMS_DATABASE_URL='postgresql://user:password@db:5432/openccb_lms' docker compose up -d --force-recreate experience
```
### Comandos Útiles
@@ -646,12 +670,15 @@ curl http://localhost:3002/health
./diagnose_auth.sh
# Ver usuarios
docker exec openccb-db-1 psql -U user -d openccb_cms \
docker exec openccb-db psql -U user -d openccb_cms \
-c "SELECT email, role FROM users;"
# Ver organizaciones
docker exec openccb-db-1 psql -U user -d openccb_cms \
docker exec openccb-db psql -U user -d openccb_cms \
-c "SELECT name, api_key FROM organizations;"
# Smoke test de permisos de audio LMS
./scripts/smoke_audio_roles.sh
```
---