Fix production base path and ProxyPass docs for /generadorexamenesllm.

This removes the incorrect /deckofcars prefix, aligns CI/build defaults with the real public URL, and adds an Apache ProxyPass snippet so the request is routed to the Docker frontend instead of the Sinbad2 site.
This commit is contained in:
Mireya Cueto Garrido
2026-06-02 13:26:34 +02:00
parent 63f2d07bb3
commit ca6d370585
6 changed files with 24 additions and 13 deletions
+2 -2
View File
@@ -47,7 +47,7 @@ deploy_to_sinbad2:
export BACKEND_PORT=$BACKEND_PORT export BACKEND_PORT=$BACKEND_PORT
export FRONTEND_PORT=$FRONTEND_PORT export FRONTEND_PORT=$FRONTEND_PORT
export ALLOWED_ORIGINS="https://sinbad2.ujaen.es,http://sinbad2.ujaen.es,http://sinbad2.ujaen.es:$FRONTEND_PORT" export ALLOWED_ORIGINS="https://sinbad2.ujaen.es,http://sinbad2.ujaen.es,http://sinbad2.ujaen.es:$FRONTEND_PORT"
export VITE_APP_BASE_PATH="/deckofcars/generadorexamenesllm/" export VITE_APP_BASE_PATH="/generadorexamenesllm/"
export VITE_API_URL="" export VITE_API_URL=""
docker compose down --remove-orphans docker compose down --remove-orphans
@@ -58,7 +58,7 @@ deploy_to_sinbad2:
- echo "Despliegue completado." - echo "Despliegue completado."
- echo "Backend -> http://sinbad2.ujaen.es:$BACKEND_PORT" - echo "Backend -> http://sinbad2.ujaen.es:$BACKEND_PORT"
- echo "Frontend -> http://sinbad2.ujaen.es:$FRONTEND_PORT" - echo "Frontend -> http://sinbad2.ujaen.es:$FRONTEND_PORT"
- echo "Public URL -> https://sinbad2.ujaen.es/deckofcars/generadorexamenesllm/" - echo "Public URL -> https://sinbad2.ujaen.es/generadorexamenesllm/"
only: only:
- branches - branches
+7
View File
@@ -0,0 +1,7 @@
# Fragmento para el VirtualHost de sinbad2.ujaen.es (HTTPS).
# Sin esto, /generadorexamenesllm/ lo atiende el CMS de Sinbad2 y no la app Docker.
ProxyPass /generadorexamenesllm http://host.docker.internal:8075/
ProxyPassReverse /generadorexamenesllm http://host.docker.internal:8075/
# URL pública: https://sinbad2.ujaen.es/generadorexamenesllm/
+1 -1
View File
@@ -24,7 +24,7 @@ services:
build: build:
context: ./frontend context: ./frontend
args: args:
VITE_APP_BASE_PATH: ${VITE_APP_BASE_PATH:-/deckofcars/generadorexamenesllm/} VITE_APP_BASE_PATH: ${VITE_APP_BASE_PATH:-/generadorexamenesllm/}
VITE_API_URL: ${VITE_API_URL:-} VITE_API_URL: ${VITE_API_URL:-}
VITE_GOOGLE_CLIENT_ID: ${VITE_GOOGLE_CLIENT_ID:-} VITE_GOOGLE_CLIENT_ID: ${VITE_GOOGLE_CLIENT_ID:-}
ports: ports:
+2 -2
View File
@@ -1,6 +1,6 @@
# Base pública de la app cuando va tras proxy (debe terminar en /) # Base pública de la app cuando va tras proxy (debe terminar en /)
# Ejemplo producción UJA: /deckofcars/generadorexamenesllm/ # Producción Sinbad2 (ProxyPass en Apache, sin /deckofcars):
VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ VITE_APP_BASE_PATH=/generadorexamenesllm/
# URL base del backend (accesible desde el navegador). # URL base del backend (accesible desde el navegador).
# Si se deja vacía, usa la misma base de la app (recomendado tras proxy HTTPS). # Si se deja vacía, usa la misma base de la app (recomendado tras proxy HTTPS).
+1 -1
View File
@@ -2,7 +2,7 @@
FROM node:20-alpine AS build FROM node:20-alpine AS build
WORKDIR /app WORKDIR /app
ARG VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ ARG VITE_APP_BASE_PATH=/generadorexamenesllm/
ARG VITE_API_URL= ARG VITE_API_URL=
ARG VITE_GOOGLE_CLIENT_ID= ARG VITE_GOOGLE_CLIENT_ID=
ENV VITE_APP_BASE_PATH=$VITE_APP_BASE_PATH ENV VITE_APP_BASE_PATH=$VITE_APP_BASE_PATH
+11 -7
View File
@@ -38,7 +38,7 @@ npm run dev # http://sinbad2.ujaen.es:8075
| Variable | Descripción | | Variable | Descripción |
| ----------------------- | -------------------------------------------------------- | | ----------------------- | -------------------------------------------------------- |
| `VITE_APP_BASE_PATH` | Base pública de la SPA (debe terminar en `/`). En producción UJA: `/deckofcars/generadorexamenesllm/`. | | `VITE_APP_BASE_PATH` | Base pública de la SPA (debe terminar en `/`). En producción UJA: `/generadorexamenesllm/`. |
| `VITE_API_URL` | URL base de la API. Si se deja vacía, usa la misma base pública de la app. | | `VITE_API_URL` | URL base de la API. Si se deja vacía, usa la misma base pública de la app. |
| `VITE_GOOGLE_CLIENT_ID` | (Opcional) Client ID de Google. Si está vacío, se oculta el botón de Google. | | `VITE_GOOGLE_CLIENT_ID` | (Opcional) Client ID de Google. Si está vacío, se oculta el botón de Google. |
@@ -66,21 +66,25 @@ variables de entorno al ejecutar `docker compose`.
## Despliegue HTTPS en subruta (Sinbad2) ## Despliegue HTTPS en subruta (Sinbad2)
Para ejecutarlo detrás de Apache en `https://sinbad2.ujaen.es/deckofcars` con: La app **no** va bajo `/deckofcars/` (eso es otro sitio). La URL pública es:
`https://sinbad2.ujaen.es/generadorexamenesllm/`
En Apache del servidor deben existir estas líneas (el prefijo se quita al llegar al contenedor en el puerto 8075):
```apache ```apache
ProxyPass /deckofcars/generadorexamenesllm http://host.docker.internal:8075/ ProxyPass /generadorexamenesllm http://host.docker.internal:8075/
ProxyPassReverse /deckofcars/generadorexamenesllm http://host.docker.internal:8075/ ProxyPassReverse /generadorexamenesllm http://host.docker.internal:8075/
``` ```
usa estos valores de build: Build:
```env ```env
VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ VITE_APP_BASE_PATH=/generadorexamenesllm/
VITE_API_URL= VITE_API_URL=
``` ```
Con esto, el frontend sirve assets/rutas bajo `/deckofcars/generadorexamenesllm` y consume la API por HTTPS en la misma base (sin mixed content). Si Apache no tiene ese `ProxyPass`, el navegador verá la web principal de Sinbad2 en lugar de esta app.
## Manejo de errores ## Manejo de errores