|
@@ -1,12 +1,29 @@
|
|
|
|
|
+
|
|
|
# syntax=docker/dockerfile:1
|
|
# syntax=docker/dockerfile:1
|
|
|
-FROM node:20-alpine AS deps
|
|
|
|
|
|
|
+
|
|
|
|
|
+# ----------------------------
|
|
|
|
|
+# deps: install full deps once
|
|
|
|
|
+# ----------------------------
|
|
|
|
|
+FROM node:20-slim AS deps
|
|
|
WORKDIR /workspace
|
|
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 package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
|
COPY tsconfig.json tsconfig.base.json tsconfig.seed.json nest-cli.json ./
|
|
COPY tsconfig.json tsconfig.base.json tsconfig.seed.json nest-cli.json ./
|
|
|
-RUN corepack enable && corepack pnpm install --frozen-lockfile
|
|
|
|
|
|
|
|
|
|
-FROM node:20-alpine AS builder
|
|
|
|
|
|
|
+RUN corepack enable \
|
|
|
|
|
+ && corepack pnpm install --frozen-lockfile
|
|
|
|
|
+
|
|
|
|
|
+# ----------------------------
|
|
|
|
|
+# builder: generate prisma + build
|
|
|
|
|
+# ----------------------------
|
|
|
|
|
+FROM node:20-slim AS builder
|
|
|
WORKDIR /workspace
|
|
WORKDIR /workspace
|
|
|
|
|
+
|
|
|
COPY --from=deps /workspace/node_modules ./node_modules
|
|
COPY --from=deps /workspace/node_modules ./node_modules
|
|
|
COPY --from=deps /workspace/package.json ./package.json
|
|
COPY --from=deps /workspace/package.json ./package.json
|
|
|
COPY --from=deps /workspace/pnpm-lock.yaml ./pnpm-lock.yaml
|
|
COPY --from=deps /workspace/pnpm-lock.yaml ./pnpm-lock.yaml
|
|
@@ -15,25 +32,41 @@ COPY --from=deps /workspace/tsconfig.json ./tsconfig.json
|
|
|
COPY --from=deps /workspace/tsconfig.base.json ./tsconfig.base.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/tsconfig.seed.json ./tsconfig.seed.json
|
|
|
COPY --from=deps /workspace/nest-cli.json ./nest-cli.json
|
|
COPY --from=deps /workspace/nest-cli.json ./nest-cli.json
|
|
|
|
|
+
|
|
|
COPY apps ./apps
|
|
COPY apps ./apps
|
|
|
COPY libs ./libs
|
|
COPY libs ./libs
|
|
|
COPY prisma ./prisma
|
|
COPY prisma ./prisma
|
|
|
-COPY .env.docker .env.docker
|
|
|
|
|
-RUN set -a \
|
|
|
|
|
- && . .env.docker \
|
|
|
|
|
- && corepack enable \
|
|
|
|
|
- && corepack pnpm prisma generate --schema=prisma/mysql/schema/main.prisma \
|
|
|
|
|
- && corepack pnpm prisma generate --schema=prisma/mongo/schema/main.prisma \
|
|
|
|
|
- && corepack pnpm prisma generate --schema=prisma/mongo-stats/schema/main.prisma \
|
|
|
|
|
- && set +a \
|
|
|
|
|
- && corepack pnpm build:mgnt
|
|
|
|
|
-
|
|
|
|
|
-FROM node:20-alpine AS runner
|
|
|
|
|
|
|
+
|
|
|
|
|
+# 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
|
|
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 ./
|
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
|
|
-RUN corepack enable && corepack pnpm install --frozen-lockfile --prod
|
|
|
|
|
|
|
+
|
|
|
|
|
+RUN corepack enable \
|
|
|
|
|
+ && corepack pnpm install --frozen-lockfile --prod \
|
|
|
|
|
+ && npm rebuild bcrypt
|
|
|
|
|
+
|
|
|
COPY --from=builder /workspace/dist ./dist
|
|
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
|
|
|
|
|
+COPY --from=builder /workspace/node_modules/.prisma ./node_modules/.prisma
|
|
|
|
|
+
|
|
|
ENV NODE_ENV=production
|
|
ENV NODE_ENV=production
|
|
|
EXPOSE 3300
|
|
EXPOSE 3300
|
|
|
CMD ["node", "dist/apps/box-mgnt-api/src/main.js"]
|
|
CMD ["node", "dist/apps/box-mgnt-api/src/main.js"]
|