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:
@@ -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
|
||||
|
||||
@@ -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:**
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user