# 1. select image and install pnpm FROM node:24-alpine AS base RUN npm install -g pnpm # 2. dependencies FROM base AS deps WORKDIR /app COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ COPY apps/api/package.json ./apps/api/ COPY packages/shared/package.json ./packages/shared/ COPY packages/db/package.json ./packages/db/ RUN pnpm install --frozen-lockfile # 3. Development (only stage used) FROM base AS dev WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . ./ EXPOSE 3000 CMD ["pnpm", "--filter", "api", "dev"] # 4. build FROM base AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN pnpm install RUN pnpm --filter shared build RUN pnpm --filter db build RUN pnpm --filter api build # 5. run FROM base AS runner WORKDIR /app COPY pnpm-lock.yaml pnpm-workspace.yaml package.json ./ COPY apps/api/package.json ./apps/api/ COPY packages/shared/package.json ./packages/shared/ COPY packages/db/package.json ./packages/db/ COPY --from=builder /app/apps/api/dist ./apps/api/dist COPY --from=builder /app/packages/shared/dist ./packages/shared/dist COPY --from=builder /app/packages/db/dist ./packages/db/dist RUN pnpm install --frozen-lockfile --prod EXPOSE 3000 CMD ["node", "apps/api/dist/src/server.js"]