# syntax=docker/dockerfile:1.7 # # PayloadCMS production image. Built and run by docker-compose. # `corepack` reads the `packageManager` field from apps/cms/package.json # so we don't pin a version here. FROM node:20-alpine AS base RUN corepack enable WORKDIR /repo # ---- deps ----------------------------------------------------------------- # Install ALL workspace deps at the root so the `apps/cms` package can # resolve its siblings (@payloadcms/*, next, react, etc.) and the root # tooling (prettier) is also available. FROM base AS deps COPY pnpm-workspace.yaml package.json ./ COPY apps/cms/package.json ./apps/cms/package.json COPY apps/web/package.json ./apps/web/package.json # pnpm-lock.yaml is generated locally; fall back gracefully on first build. COPY pnpm-lock.yaml* ./ RUN if [ -f pnpm-lock.yaml ]; then \ pnpm install --frozen-lockfile; \ else \ echo "No pnpm-lock.yaml found; running pnpm install (generates one)"; \ pnpm install; \ fi # ---- build ---------------------------------------------------------------- FROM deps AS build COPY apps/cms ./apps/cms WORKDIR /repo/apps/cms RUN pnpm run build # ---- runtime -------------------------------------------------------------- FROM base AS runtime ENV NODE_ENV=production WORKDIR /repo/apps/cms COPY --from=build /repo ./ EXPOSE 3000 CMD ["pnpm", "start"]