Dockerfile 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # syntax=docker/dockerfile:1
  2. # ----------------------------
  3. # deps: install full deps once
  4. # ----------------------------
  5. FROM node:20-slim AS deps
  6. WORKDIR /workspace
  7. # Build tools needed for native modules (bcrypt) during install in this stage
  8. RUN apt-get update \
  9. && apt-get install -y --no-install-recommends python3 make g++ \
  10. && rm -rf /var/lib/apt/lists/*
  11. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
  12. COPY tsconfig.json tsconfig.base.json tsconfig.seed.json nest-cli.json ./
  13. RUN corepack enable \
  14. && corepack pnpm install --frozen-lockfile
  15. # ----------------------------
  16. # builder: generate prisma + build
  17. # ----------------------------
  18. FROM node:20-slim AS builder
  19. WORKDIR /workspace
  20. COPY --from=deps /workspace/node_modules ./node_modules
  21. COPY --from=deps /workspace/package.json ./package.json
  22. COPY --from=deps /workspace/pnpm-lock.yaml ./pnpm-lock.yaml
  23. COPY --from=deps /workspace/pnpm-workspace.yaml ./pnpm-workspace.yaml
  24. COPY --from=deps /workspace/tsconfig.json ./tsconfig.json
  25. COPY --from=deps /workspace/tsconfig.base.json ./tsconfig.base.json
  26. COPY --from=deps /workspace/tsconfig.seed.json ./tsconfig.seed.json
  27. COPY --from=deps /workspace/nest-cli.json ./nest-cli.json
  28. COPY apps ./apps
  29. COPY libs ./libs
  30. COPY prisma ./prisma
  31. # No build-time env sourcing; keep build deterministic
  32. RUN corepack enable \
  33. && corepack pnpm prisma:generate:mysql \
  34. && corepack pnpm prisma:generate:mongo \
  35. && corepack pnpm prisma:generate:mongostats \
  36. && corepack pnpm build:stats
  37. # ----------------------------
  38. # runner: prod deps + bcrypt rebuild + runtime files
  39. # ----------------------------
  40. FROM node:20-slim AS runner
  41. WORKDIR /workspace
  42. # Only what's needed to rebuild native module in runtime image
  43. RUN apt-get update \
  44. && apt-get install -y --no-install-recommends python3 make g++ \
  45. && rm -rf /var/lib/apt/lists/*
  46. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
  47. RUN corepack enable \
  48. && corepack pnpm install --frozen-lockfile --prod \
  49. && npm rebuild bcrypt
  50. COPY --from=builder /workspace/dist ./dist
  51. # Prisma runtime artifacts
  52. COPY --from=builder /workspace/node_modules/@prisma ./node_modules/@prisma
  53. COPY --from=builder /workspace/node_modules/.prisma ./node_modules/.prisma
  54. ENV NODE_ENV=production
  55. EXPOSE 3302
  56. CMD ["node", "dist/apps/box-stats-api/src/main.js"]