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 ---
|
# --- SSH Keys ---
|
||||||
*.pem
|
*.pem
|
||||||
ubuntu.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
|
## 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
|
### 1. Configurar DNS
|
||||||
|
|
||||||
Antes de ejecutar `deploy.sh`, configura los registros DNS en tu proveedor de dominio:
|
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
|
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
|
### Reiniciar servicios
|
||||||
```bash
|
```bash
|
||||||
# Reiniciar todo
|
# Reiniciar todo
|
||||||
@@ -173,6 +213,36 @@ docker logs nginx-proxy --tail 20
|
|||||||
sudo docker compose restart
|
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
|
### Certificados SSL no se generan
|
||||||
|
|
||||||
**Síntomas:**
|
**Síntomas:**
|
||||||
|
|||||||
@@ -613,20 +613,44 @@ docker volume rm openccb_db_data
|
|||||||
./install.sh
|
./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
|
### Logs y Debugging
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Ver logs de servicios
|
# Ver logs de servicios
|
||||||
docker-compose logs -f cms
|
docker compose logs -f studio
|
||||||
docker-compose logs -f lms
|
docker compose logs -f experience
|
||||||
docker-compose logs -f studio
|
docker compose logs -f db
|
||||||
docker-compose logs -f experience
|
|
||||||
|
|
||||||
# Logs con filtro
|
# Logs con filtro
|
||||||
docker-compose logs -f cms | grep -i error
|
docker compose logs -f experience | grep -i error
|
||||||
|
|
||||||
# Acceder a DB
|
# 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
|
### Comandos Útiles
|
||||||
@@ -646,12 +670,15 @@ curl http://localhost:3002/health
|
|||||||
./diagnose_auth.sh
|
./diagnose_auth.sh
|
||||||
|
|
||||||
# Ver usuarios
|
# 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;"
|
-c "SELECT email, role FROM users;"
|
||||||
|
|
||||||
# Ver organizaciones
|
# 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;"
|
-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