40 lines
1.3 KiB
Docker
40 lines
1.3 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
#
|
|
# PayloadCMS production image. Built and run by docker-compose.
|
|
# We install pnpm globally via npm so we don't depend on corepack's
|
|
# (sometimes strict) version negotiation.
|
|
|
|
FROM node:20-alpine AS base
|
|
RUN npm install -g pnpm@latest
|
|
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
|
|
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"]
|