From 4da360e141e15ef2f48650ca575e7e4c9d1821c4 Mon Sep 17 00:00:00 2001 From: Galindo97 Date: Fri, 22 May 2026 08:58:29 -0500 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20corregir=20vars=20de=20producci?= =?UTF-8?q?=C3=B3n=20que=20causaban=20localhost=20en=20KC=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docker-compose.prod.yml: - Agrega SITE_URL=https://anexo76-dev.aduanasoft.com hardcodeado (no depende del .env raíz). resolveSystemBaseUrl() lo usa como fallback cuando ORIGIN tiene un valor localhost que pisó el default del compose. - Agrega VITE_HUB_URL=https://workspace.aduanasoft.com para que getWorkspaceBaseUrl() no dependa de VITE_HUB_URL del .env raíz dev. - Documenta el problema: root .env con ORIGIN=localhost pisa el default. Dockerfile.prod: - Agrega ARG/ENV VITE_KEYCLOAK_REALM (faltaba en los build-args de Jenkins). - Agrega ARG/ENV VITE_HUB_URL con default workspace.aduanasoft.com. .env.example raíz: - Agrega advertencia sobre ORIGIN, VITE_HUB_URL y APP_PUBLIC_URL con instrucciones explícitas de cómo corregirlos en producción. - Extrae estos valores al bloque documentado para que sean visibles. Root cause: el deploy en producción ejecuta docker compose -f docker-compose.prod.yml up que carga automáticamente el .env raíz con ORIGIN=http://localhost:5173, pisando el default correcto del prod compose. url.origin en SvelteKit = localhost:5173 → redirect_uri con localhost. Co-Authored-By: Claude Sonnet 4.6 --- .env.example | 22 ++++++++++++++++++++++ docker-compose.prod.yml | 12 +++++++++++- frontend/Dockerfile.prod | 7 +++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 7ac9e1f2..921d708c 100644 --- a/.env.example +++ b/.env.example @@ -35,6 +35,28 @@ CORS_ORIGINS=http://localhost:5173,http://localhost:3000 NODE_ENV=development VITE_API_URL=http://localhost:8000/api INTERNAL_API_URL=http://backend:8000/api + +# ⚠️ ADVERTENCIA PRODUCCIÓN — ORIGIN, VITE_HUB_URL y APP_PUBLIC_URL +# ───────────────────────────────────────────────────────────────────── +# Docker Compose carga ESTE archivo (.env raíz) automáticamente cuando +# se ejecuta: docker compose -f docker-compose.prod.yml up +# +# Si estas variables tienen valores localhost aquí, PISARÁN los defaults +# de docker-compose.prod.yml y causarán que el login falle en producción +# (redirect_uri y KC URL apuntarán a localhost). +# +# Para dev local (docker-compose.yml): dejar localhost. +# Para producción (docker-compose.prod.yml): asegurarse que el servidor +# NO tenga este .env raíz con valores localhost, O usar: +# docker compose --env-file .env.prod -f docker-compose.prod.yml up +# +# Variables críticas para producción: +# ORIGIN=https://anexo76-dev.aduanasoft.com ← determina url.origin en SvelteKit +# VITE_HUB_URL=https://workspace.aduanasoft.com +# APP_PUBLIC_URL=https://anexo76-dev.aduanasoft.com +ORIGIN=http://localhost:5173 +VITE_HUB_URL=http://localhost:3001 +APP_PUBLIC_URL=http://localhost:5173 VITE_KEYCLOAK_REALM=master VITE_KEYCLOAK_URL=http://localhost:8080/kcauth VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index ff6e1c53..166b8e4b 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -358,6 +358,10 @@ services: - INTERNAL_API_URL=${INTERNAL_API_URL:-http://backend:8000/api/} - INTERNAL_HUB_URL=https://workspace.aduanasoft.com - HUB_URL=https://workspace.aduanasoft.com + # VITE_HUB_URL: URL pública del Hub para el browser (bakeada en build, pero también se lee + # en runtime por $env/dynamic/private en workspace-auth.ts). El root .env puede tener + # localhost; isDevOnlyUrl() lo descarta y cae a HUB_URL (correcto arriba). + - VITE_HUB_URL=https://workspace.aduanasoft.com - VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL:-https://anexo76-dev.aduanasoft.com/kcauth/} - VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM:-master} - VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID:-anexo76-frontend} @@ -365,8 +369,14 @@ services: - KEYCLOAK_REALM=${KEYCLOAK_REALM:-master} - KEYCLOAK_CLIENT_ID=${KEYCLOAK_CLIENT_ID:-anexo76-backend} - KEYCLOAK_CLIENT_SECRET=${KEYCLOAK_CLIENT_SECRET:-dev-secret} - # SvelteKit ORIGIN — evita que request.url.origin use la IP/puerto interno del contenedor + # SvelteKit ORIGIN — determina url.origin en load functions y el flag secure de cookies. + # ⚠️ Docker Compose carga el .env raíz automáticamente. Si ese .env tiene + # ORIGIN=http://localhost:5173 (valor dev), sobreescribe el default de abajo. + # SITE_URL es el fallback que usa el código cuando url.origin es localhost. - ORIGIN=${ORIGIN:-https://anexo76-dev.aduanasoft.com} + # SITE_URL: hardcoded — no depende del .env raíz. + # resolveSystemBaseUrl() lo usa cuando ORIGIN tiene localhost (root .env de dev en prod). + - SITE_URL=https://anexo76-dev.aduanasoft.com ports: - "5111:5173" depends_on: diff --git a/frontend/Dockerfile.prod b/frontend/Dockerfile.prod index 2bfc9a56..d825409f 100644 --- a/frontend/Dockerfile.prod +++ b/frontend/Dockerfile.prod @@ -22,9 +22,16 @@ ENV VITE_API_URL=${VITE_API_URL} ARG VITE_KEYCLOAK_URL ENV VITE_KEYCLOAK_URL=${VITE_KEYCLOAK_URL} +ARG VITE_KEYCLOAK_REALM=master +ENV VITE_KEYCLOAK_REALM=${VITE_KEYCLOAK_REALM} + ARG VITE_KEYCLOAK_CLIENT_ID=anexo76-frontend ENV VITE_KEYCLOAK_CLIENT_ID=${VITE_KEYCLOAK_CLIENT_ID} +# URL pública del Hub Workspace (bakeada en build para el browser) +ARG VITE_HUB_URL=https://workspace.aduanasoft.com +ENV VITE_HUB_URL=${VITE_HUB_URL} + ARG INTERNAL_API_URL ENV INTERNAL_API_URL=${INTERNAL_API_URL}