- teamclaw-server e2e mode (TEAMCLAW_MODE=e2e): idempotent deterministic seed through the real registration paths - Playwright suite (6 journeys) against the real backend + prod Next build: login redirect, bad-password error, shell/roster/online-dot, team members, seeded credits, sign-out revocation — P0 exit criterion met - Dockerfiles: musl-static server -> distroless, Next standalone -> distroless node (multi-arch via TARGETARCH) - Air-gapped compose topology with edge/core/sandbox_net/secrets_net segmentation (engine-validated in CI), config-file + env-overlay pattern - CI: compose validation + e2e job with trace upload Co-Authored-By: Claude Fable 5 <[email protected]>
19 lines
647 B
Docker
19 lines
647 B
Docker
# Next.js standalone build into distroless node — runs `node server.js` with
|
|
# no package manager or shell; fonts and all assets are vendored in-repo so
|
|
# the image is fully self-contained for air-gapped installs.
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
COPY frontend/package.json frontend/package-lock.json ./
|
|
RUN npm ci
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
FROM gcr.io/distroless/nodejs22-debian12:nonroot
|
|
WORKDIR /app
|
|
COPY --from=builder /app/.next/standalone ./
|
|
COPY --from=builder /app/.next/static ./.next/static
|
|
COPY --from=builder /app/public ./public
|
|
ENV PORT=3000 HOSTNAME=0.0.0.0 NODE_ENV=production
|
|
EXPOSE 3000
|
|
CMD ["server.js"]
|