# Build stage FROM node:20-alpine AS builder WORKDIR /app # Install pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # Copy package files COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/api/package.json ./apps/api/ COPY packages/shared/package.json ./packages/shared/ # Install dependencies RUN pnpm install --frozen-lockfile # Copy source files COPY packages/shared ./packages/shared COPY apps/api ./apps/api # Generate Prisma client RUN pnpm --filter @nats-console/api prisma generate # Build packages RUN pnpm --filter @nats-console/shared build RUN pnpm --filter @nats-console/api build # Production stage FROM node:20-alpine AS runner WORKDIR /app RUN corepack enable && corepack prepare pnpm@latest --activate # Copy built application COPY --from=builder /app/package.json /app/pnpm-lock.yaml /app/pnpm-workspace.yaml ./ COPY --from=builder /app/apps/api/package.json ./apps/api/ COPY --from=builder /app/apps/api/dist ./apps/api/dist COPY --from=builder /app/apps/api/prisma ./apps/api/prisma COPY --from=builder /app/apps/api/node_modules ./apps/api/node_modules COPY --from=builder /app/packages/shared/package.json ./packages/shared/ COPY --from=builder /app/packages/shared/dist ./packages/shared/dist COPY --from=builder /app/node_modules ./node_modules WORKDIR /app/apps/api ENV NODE_ENV=production ENV PORT=3001 EXPOSE 3001 CMD ["node", "dist/index.js"]