diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c2fe5d5..14e5147 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -47,7 +47,7 @@ deploy_to_sinbad2: export BACKEND_PORT=$BACKEND_PORT export FRONTEND_PORT=$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="" docker compose down --remove-orphans @@ -58,7 +58,7 @@ deploy_to_sinbad2: - echo "Despliegue completado." - echo "Backend -> http://sinbad2.ujaen.es:$BACKEND_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: - branches \ No newline at end of file diff --git a/deploy/apache-reverse-proxy.conf b/deploy/apache-reverse-proxy.conf new file mode 100644 index 0000000..3ee97a6 --- /dev/null +++ b/deploy/apache-reverse-proxy.conf @@ -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/ diff --git a/docker-compose.yml b/docker-compose.yml index e33df99..e1e6854 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,7 @@ services: build: context: ./frontend 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_GOOGLE_CLIENT_ID: ${VITE_GOOGLE_CLIENT_ID:-} ports: diff --git a/frontend/.env.example b/frontend/.env.example index 8b76127..25eef04 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -1,6 +1,6 @@ # Base pública de la app cuando va tras proxy (debe terminar en /) -# Ejemplo producción UJA: /deckofcars/generadorexamenesllm/ -VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ +# Producción Sinbad2 (ProxyPass en Apache, sin /deckofcars): +VITE_APP_BASE_PATH=/generadorexamenesllm/ # URL base del backend (accesible desde el navegador). # Si se deja vacía, usa la misma base de la app (recomendado tras proxy HTTPS). diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 5f119f3..62b6cc6 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -2,7 +2,7 @@ FROM node:20-alpine AS build WORKDIR /app -ARG VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ +ARG VITE_APP_BASE_PATH=/generadorexamenesllm/ ARG VITE_API_URL= ARG VITE_GOOGLE_CLIENT_ID= ENV VITE_APP_BASE_PATH=$VITE_APP_BASE_PATH diff --git a/frontend/README.md b/frontend/README.md index d7beed8..5dd43bc 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -38,7 +38,7 @@ npm run dev # http://sinbad2.ujaen.es:8075 | 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_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) -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 -ProxyPass /deckofcars/generadorexamenesllm http://host.docker.internal:8075/ -ProxyPassReverse /deckofcars/generadorexamenesllm http://host.docker.internal:8075/ +ProxyPass /generadorexamenesllm http://host.docker.internal:8075/ +ProxyPassReverse /generadorexamenesllm http://host.docker.internal:8075/ ``` -usa estos valores de build: +Build: ```env -VITE_APP_BASE_PATH=/deckofcars/generadorexamenesllm/ +VITE_APP_BASE_PATH=/generadorexamenesllm/ 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