# syntax=docker/dockerfile:1 FROM node:22.22.3-alpine AS base RUN corepack enable && corepack prepare pnpm@latest --activate # ── deps ────────────────────────────────────────────────────────────────────── FROM base AS deps WORKDIR /app # Копируем только манифесты — слой кешируется пока lock не менялся COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY server/package.json ./server/ RUN pnpm install --frozen-lockfile --filter server... # ── build ───────────────────────────────────────────────────────────────────── FROM deps AS builder WORKDIR /app COPY server ./server RUN pnpm --filter server build # ── runtime ─────────────────────────────────────────────────────────────────── FROM node:22.22.3-alpine AS runner RUN corepack enable && corepack prepare pnpm@latest --activate WORKDIR /app COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY server/package.json ./server/ RUN pnpm install --frozen-lockfile --filter server... --prod COPY --from=builder /app/server/dist ./server/dist EXPOSE 3000 CMD ["node", "server/dist/index.js"]