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 <noreply@anthropic.com>
87 lines
2.1 KiB
Docker
87 lines
2.1 KiB
Docker
# ==========================
|
|
# Etapa de build
|
|
# ==========================
|
|
FROM node:22-alpine AS build
|
|
|
|
# Directorio de trabajo
|
|
WORKDIR /app
|
|
|
|
# Configurar npm para trabajar con certificados autofirmados e instalar pnpm
|
|
RUN npm config set strict-ssl false && \
|
|
npm install -g pnpm
|
|
|
|
# Copiar archivos de dependencias
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
|
|
# Instalar dependencias con pnpm
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
ARG VITE_API_URL
|
|
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}
|
|
|
|
# Copiar el resto del código
|
|
COPY . .
|
|
|
|
# Construir el proyecto
|
|
RUN pnpm run build
|
|
|
|
|
|
# ==========================
|
|
# Etapa de ejecución con Node.js
|
|
# ==========================
|
|
FROM node:22-alpine AS runtime
|
|
|
|
WORKDIR /app
|
|
|
|
RUN apk add --no-cache wget
|
|
|
|
RUN npm config set strict-ssl false && \
|
|
npm install -g pnpm
|
|
|
|
# Crear usuario no-root para seguridad antes de copiar con --chown
|
|
RUN addgroup -g 1001 -S nodejs
|
|
RUN adduser -S svelte -u 1001
|
|
|
|
COPY docker-entrypoint.sh /entrypoint.sh
|
|
RUN chmod +x /entrypoint.sh
|
|
|
|
# Copiar solo archivos necesarios para producción y aplicar propietario en la copia
|
|
COPY --from=build --chown=svelte:nodejs /app/build ./build
|
|
COPY --from=build --chown=svelte:nodejs /app/package.json ./
|
|
COPY --from=build --chown=svelte:nodejs /app/node_modules ./node_modules
|
|
|
|
USER svelte
|
|
|
|
# Puerto para SvelteKit con adapter-node
|
|
EXPOSE 5173
|
|
|
|
# Variables de entorno
|
|
ENV NODE_ENV=production
|
|
ENV PORT=5173
|
|
ENV HOST=0.0.0.0
|
|
|
|
# IMPORTANTE: Estas variables se pueden sobrescribir en docker-compose
|
|
# pero necesitamos valores por defecto para el build
|
|
ENV INTERNAL_API_URL=http://backend:8000/api/
|
|
|
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
|
|
# Ejecutar aplicación con Node.js
|
|
CMD ["pnpm", "start"]
|