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

2.7 KiB

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):

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:

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

# 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