# ========================== # 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 # wget de busybox ya viene en alpine; el apk es best-effort (redes restringidas sin CDN de Alpine) RUN apk add --no-cache wget || true 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 # WORKDIR /app queda owned por root; pnpm necesita crear _tmp_* en el cwd al ejecutar scripts. RUN chown svelte:nodejs /app 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"]