| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # syntax=docker/dockerfile:1
- # ----------------------------
- # deps: install full deps once
- # ----------------------------
- FROM node:20-slim AS deps
- WORKDIR /workspace
- # Build tools needed for native modules (bcrypt) during install in this stage
- RUN apt-get update \
- && apt-get install -y --no-install-recommends python3 make g++ \
- && rm -rf /var/lib/apt/lists/*
- COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
- COPY tsconfig.json tsconfig.base.json tsconfig.seed.json nest-cli.json ./
- RUN corepack enable \
- && corepack pnpm install --frozen-lockfile
- # ----------------------------
- # builder: generate prisma + build
- # ----------------------------
- FROM node:20-slim AS builder
- WORKDIR /workspace
- COPY --from=deps /workspace/node_modules ./node_modules
- COPY --from=deps /workspace/package.json ./package.json
- COPY --from=deps /workspace/pnpm-lock.yaml ./pnpm-lock.yaml
- COPY --from=deps /workspace/pnpm-workspace.yaml ./pnpm-workspace.yaml
- COPY --from=deps /workspace/tsconfig.json ./tsconfig.json
- COPY --from=deps /workspace/tsconfig.base.json ./tsconfig.base.json
- COPY --from=deps /workspace/tsconfig.seed.json ./tsconfig.seed.json
- COPY --from=deps /workspace/nest-cli.json ./nest-cli.json
- COPY apps ./apps
- COPY libs ./libs
- COPY prisma ./prisma
- # No build-time env sourcing; keep build deterministic
- RUN corepack enable \
- && corepack pnpm prisma:generate:mysql \
- && corepack pnpm prisma:generate:mongo \
- && corepack pnpm prisma:generate:mongostats \
- && corepack pnpm build:stats
- # ----------------------------
- # runner: prod deps + bcrypt rebuild + runtime files
- # ----------------------------
- FROM node:20-slim AS runner
- WORKDIR /workspace
- # Only what's needed to rebuild native module in runtime image
- RUN apt-get update \
- && apt-get install -y --no-install-recommends python3 make g++ \
- && rm -rf /var/lib/apt/lists/*
- COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
- RUN corepack enable \
- && corepack pnpm install --frozen-lockfile --prod \
- && npm rebuild bcrypt
- COPY --from=builder /workspace/dist ./dist
- # Prisma runtime artifacts
- COPY --from=builder /workspace/node_modules/@prisma ./node_modules/@prisma
- COPY --from=builder /workspace/node_modules/.prisma ./node_modules/.prisma
- ENV NODE_ENV=production
- EXPOSE 3300
- CMD ["node", "dist/apps/box-mgnt-api/src/main.js"]
|