Dockerfile.api 1.2 KB

1234567891011121314151617181920212223242526272829
  1. # DoTouch.AI API 容器镜像(pnpm monorepo 多阶段构建)
  2. FROM node:22-alpine AS base
  3. RUN npm i -g pnpm@10
  4. WORKDIR /app
  5. # 1. 依赖层(仅 workspace 清单,最大化缓存)
  6. FROM base AS deps
  7. COPY pnpm-workspace.yaml package.json pnpm-lock.yaml .npmrc ./
  8. COPY apps/api/package.json apps/api/package.json
  9. COPY packages/shared/package.json packages/shared/package.json
  10. RUN pnpm install --frozen-lockfile --filter @dotouch/api... --filter @dotouch/shared...
  11. # 2. 构建层
  12. FROM deps AS build
  13. COPY . .
  14. RUN pnpm --filter @dotouch/shared build && pnpm --filter @dotouch/api build && pnpm --filter @dotouch/api exec prisma generate
  15. # 3. 运行层
  16. FROM deps AS runner
  17. ENV NODE_ENV=production
  18. COPY --from=build /app/apps/api/dist apps/api/dist
  19. COPY --from=build /app/apps/api/prisma apps/api/prisma
  20. COPY --from=build /app/apps/api/scripts apps/api/scripts
  21. COPY --from=build /app/packages/shared/dist packages/shared/dist
  22. COPY --from=build /app/docs/models docs/models
  23. WORKDIR /app/apps/api
  24. EXPOSE 8080
  25. # 启动:迁移 → 生成 Prisma Client → 模型 seed(幂等)→ API
  26. CMD ["sh", "-c", "npx prisma migrate deploy && npx prisma generate && node scripts/seed-models.mjs && node dist/main.js"]