# 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 --from=deps /app/node_modules ./node_modules COPY --from=deps /app/packages/shared/package.json /app/packages/shared/package.json COPY --from=deps /app/packages/db/package.json /app/packages/db/package.json COPY --from=builder /app/apps/api/dist ./dist COPY --from=builder /app/packages/shared/dist /app/packages/shared/dist COPY --from=builder /app/packages/db/dist /app/packages/db/dist EXPOSE 3000 CMD ["node", "dist/server.js"]