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