Files
GenExam-IA/deploy/DESPLIEGUE_SINBAD2.md
T
Mireya Cueto Garrido d06b961a73 Use Sinbad2 production ports 8068 (backend) and 8069 (frontend).
Apache ProxyPass targets host port 8069; update compose, CI, CORS defaults, deployment docs, and production .env files for https://sinbad2.ujaen.es/generadorexamenesllm/.
2026-06-03 12:13:02 +02:00

85 lines
2.7 KiB
Markdown

# Despliegue en Sinbad2 (HTTPS vía Apache)
Patrón equivalente a **orcid2sword**: TLS en Apache, contenedores en HTTP en puertos internos.
## URL pública
`https://sinbad2.ujaen.es/generadorexamenesllm/`
No usar `/deckofcars/` ni `/deckofcards/` (son otros proyectos).
## 1. GitLab CI (este repositorio)
El job `deploy_to_sinbad2` en `.gitlab-ci.yml`:
1. Copia el código por SSH a Sinbad2.
2. Ejecuta `docker compose build` y `docker compose up -d`.
3. Expone servicios en **HTTP** (sin certificados en Docker):
- Frontend → `:8069`
- Backend → `:8068`
Variables de despliegue:
| Variable | Valor |
|----------|--------|
| `VITE_APP_BASE_PATH` | `/generadorexamenesllm/` |
| `VITE_API_URL` | *(vacío: misma base HTTPS vía nginx)* |
| `ENVIRONMENT` | `production` |
| `PUBLIC_BASE_URL` | `https://sinbad2.ujaen.es/generadorexamenesllm` |
| `ALLOWED_ORIGINS` | `https://sinbad2.ujaen.es,...` |
## 2. Apache (gestión UJA — no está en este repo)
Configuración confirmada por sistemas (mismo estilo que `orcid2sword``:8073`):
```apache
ProxyPass /generadorexamenesllm http://host.docker.internal:8069/
ProxyPassReverse /generadorexamenesllm http://host.docker.internal:8069/
```
**Importante:** esas líneas deben ir **antes** de las reglas de WordPress del sitio Sinbad2.
Si no, Apache sigue devolviendo la web del grupo (cabeceras `X-Powered-By: PHP` y `X-Redirect-By: WordPress`).
Comprobación rápida tras recargar Apache:
```bash
curl -I https://sinbad2.ujaen.es/generadorexamenesllm/
# Debe mostrar Server: nginx (contenedor), NO PHP/WordPress
```
| Paso | Qué ocurre |
|------|------------|
| Certificado SSL | Lo proporciona el servidor institucional |
| Entrada pública | `https://sinbad2.ujaen.es/generadorexamenesllm/` |
| Proxy | Apache reenvía a `:8069` (HTTP) y **quita** el prefijo |
| Nginx contenedor | Sirve SPA y hace proxy de `/auth/` y `/exam/` al backend |
Si falta el `ProxyPass`, la ruta la atiende el CMS de Sinbad2 (home del grupo).
## 3. Adaptaciones en la aplicación
### Frontend
- Build con `VITE_APP_BASE_PATH=/generadorexamenesllm/`.
- `nginx.conf` entiende rutas **con prefijo** (acceso directo `:8069`) y **sin prefijo** (tras Apache).
- Proxy interno al backend; cabeceras `X-Forwarded-Proto` / `Host` propagadas desde Apache.
### Backend
- Uvicorn con `--proxy-headers` y `--forwarded-allow-ips *`.
- `TrustedHostMiddleware` + cabeceras HSTS en producción.
- CORS con origen `https://sinbad2.ujaen.es`.
## 4. Comprobaciones
```bash
# Directo al contenedor (HTTP, con prefijo)
curl -I http://sinbad2.ujaen.es:8069/generadorexamenesllm/
# Tras Apache (HTTPS)
curl -I https://sinbad2.ujaen.es/generadorexamenesllm/
# API vía nginx del frontend
curl https://sinbad2.ujaen.es/generadorexamenesllm/health
```