# HTTP-only mcplocal for k8s deploy (Service `mcp`, Ingress `mcp.ad.itaz.eu`). # Container CMD runs the `serve.ts` entry which — unlike the systemd/STDIO # entry — has no stdin/stdout MCP client and bootstraps exclusively from env. # Stage 1: Build TypeScript FROM node:20-alpine AS builder RUN corepack enable && corepack prepare pnpm@9.15.0 --activate WORKDIR /app # Copy workspace config and package manifests COPY pnpm-workspace.yaml pnpm-lock.yaml package.json tsconfig.base.json ./ COPY src/mcplocal/package.json src/mcplocal/tsconfig.json src/mcplocal/ COPY src/shared/package.json src/shared/tsconfig.json src/shared/ COPY src/db/package.json src/db/tsconfig.json src/db/ # Install all dependencies RUN pnpm install --frozen-lockfile # Copy source COPY src/mcplocal/src/ src/mcplocal/src/ COPY src/shared/src/ src/shared/src/ COPY src/db/src/ src/db/src/ COPY src/db/prisma/ src/db/prisma/ # Build (mcplocal depends on shared; db is pulled transitively by shared/... actually # mcplocal does not depend on db at runtime — prisma client is only used by mcpd). RUN pnpm -F @mcpctl/shared build && pnpm -F @mcpctl/mcplocal build # Stage 2: Production runtime FROM node:20-alpine RUN corepack enable && corepack prepare pnpm@9.15.0 --activate WORKDIR /app # Copy workspace config, manifests, and lockfile COPY pnpm-workspace.yaml pnpm-lock.yaml package.json ./ COPY src/mcplocal/package.json src/mcplocal/ COPY src/shared/package.json src/shared/ # Install deps (production only — no db / prisma runtime here). RUN pnpm install --frozen-lockfile # Copy built output COPY --from=builder /app/src/shared/dist/ src/shared/dist/ COPY --from=builder /app/src/mcplocal/dist/ src/mcplocal/dist/ EXPOSE 3200 # Cache directory — expected to be mounted as a PVC in k8s. VOLUME /var/lib/mcplocal/cache HEALTHCHECK --interval=10s --timeout=5s --retries=3 --start-period=10s \ CMD wget -q --spider http://localhost:3200/healthz || exit 1 # MCPLOCAL_MCPD_URL and MCPLOCAL_MCPD_TOKEN are required and must come from # the Pulumi-managed Secret. Other env vars default sensibly. CMD ["node", "src/mcplocal/dist/serve.js"]