# syntax=docker/dockerfile:1.7 FROM node:22-slim AS builder WORKDIR /app/web ARG GITEA_NPM_HOST ARG GITEA_NPM_OWNER=learning_ai_user ENV NODE_TLS_REJECT_UNAUTHORIZED=0 ENV NPM_CONFIG_STRICT_SSL=false ENV GITEA_NPM_HOST=$GITEA_NPM_HOST RUN npm config set strict-ssl false \ && npm install -g pnpm@10.6.5 COPY .npmrc.docker ./.npmrc COPY .docker-deps* ../.docker-deps/ COPY web/package.json ./package.json RUN pnpm install --ignore-scripts --lockfile=false COPY web/*.json web/*.ts web/*.mjs ./ COPY web/src/ ./src/ COPY shared/ ../shared/ # NEXT_PUBLIC_* values are baked into the Next.js bundle at build time. # Every URL the client uses must be declared here so docker-compose # build args reach `pnpm run build`. The values are typically supplied # from docker-compose.yml or .env. ARG NEXT_PUBLIC_NOTES_API_URL ARG NEXT_PUBLIC_PLATFORM_SERVICE_URL ARG NEXT_PUBLIC_EXTRACTION_SERVICE_URL ARG NEXT_PUBLIC_MCP_SERVER_URL ARG NEXT_PUBLIC_DIAGNOSTICS_URL ARG NEXT_PUBLIC_PRODUCT_NAME ARG NEXT_PUBLIC_PRODUCT_ID ARG NEXT_PUBLIC_TELEMETRY_TRANSPORT ENV NEXT_PUBLIC_NOTES_API_URL=$NEXT_PUBLIC_NOTES_API_URL ENV NEXT_PUBLIC_PLATFORM_SERVICE_URL=$NEXT_PUBLIC_PLATFORM_SERVICE_URL ENV NEXT_PUBLIC_EXTRACTION_SERVICE_URL=$NEXT_PUBLIC_EXTRACTION_SERVICE_URL ENV NEXT_PUBLIC_MCP_SERVER_URL=$NEXT_PUBLIC_MCP_SERVER_URL ENV NEXT_PUBLIC_DIAGNOSTICS_URL=$NEXT_PUBLIC_DIAGNOSTICS_URL ENV NEXT_PUBLIC_PRODUCT_NAME=$NEXT_PUBLIC_PRODUCT_NAME ENV NEXT_PUBLIC_PRODUCT_ID=$NEXT_PUBLIC_PRODUCT_ID ENV NEXT_PUBLIC_TELEMETRY_TRANSPORT=$NEXT_PUBLIC_TELEMETRY_TRANSPORT ENV NEXT_TELEMETRY_DISABLED=1 RUN pnpm run build FROM node:22-slim WORKDIR /app/web ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 COPY --from=builder /app/web/.next/standalone ./ # The Next.js standalone server (at /app/web/web/server.js) serves # /_next/static/* from a `web/.next/static` directory relative to its # own location, NOT from /app/web/.next/static. Without this, all # generated JS chunks 404 with text/plain content-type and the SPA # never hydrates. COPY --from=builder /app/web/.next/static ./web/.next/static EXPOSE 3045 ENV PORT=3045 CMD ["node", "web/server.js"]