Dockerfile 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # syntax=docker/dockerfile:1
  2. FROM node:20-alpine AS deps
  3. WORKDIR /workspace
  4. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
  5. COPY tsconfig.json tsconfig.base.json tsconfig.seed.json nest-cli.json ./
  6. RUN corepack enable && corepack pnpm install --frozen-lockfile
  7. FROM node:20-alpine AS builder
  8. WORKDIR /workspace
  9. COPY --from=deps /workspace/node_modules ./node_modules
  10. COPY --from=deps /workspace/package.json ./package.json
  11. COPY --from=deps /workspace/pnpm-lock.yaml ./pnpm-lock.yaml
  12. COPY --from=deps /workspace/pnpm-workspace.yaml ./pnpm-workspace.yaml
  13. COPY --from=deps /workspace/tsconfig.json ./tsconfig.json
  14. COPY --from=deps /workspace/tsconfig.base.json ./tsconfig.base.json
  15. COPY --from=deps /workspace/tsconfig.seed.json ./tsconfig.seed.json
  16. COPY --from=deps /workspace/nest-cli.json ./nest-cli.json
  17. COPY apps ./apps
  18. COPY libs ./libs
  19. COPY prisma ./prisma
  20. COPY .env.docker .env.docker
  21. RUN set -a \
  22. && . .env.docker \
  23. && corepack enable \
  24. && corepack pnpm prisma generate --schema=prisma/mysql/schema/main.prisma \
  25. && corepack pnpm prisma generate --schema=prisma/mongo/schema/main.prisma \
  26. && corepack pnpm prisma generate --schema=prisma/mongo-stats/schema/main.prisma \
  27. && set +a \
  28. && corepack pnpm build:mgnt
  29. FROM node:20-alpine AS runner
  30. WORKDIR /workspace
  31. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
  32. RUN corepack enable && corepack pnpm install --frozen-lockfile --prod
  33. COPY --from=builder /workspace/dist ./dist
  34. COPY --from=builder /workspace/node_modules/@prisma ./node_modules/@prisma
  35. ENV NODE_ENV=production
  36. EXPOSE 3300
  37. CMD ["node", "dist/apps/box-mgnt-api/src/main.js"]