# Build stage FROM oven/bun:1.1 AS builder WORKDIR /app # 复制依赖文件 COPY apps/api/package.json . COPY pnpm-workspace.yaml . COPY package.json . # 安装 pnpm(如果未预装) RUN npm install -g pnpm # 安装依赖 RUN pnpm install --frozen-lockfile # 复制源码 COPY apps/api/src ./src COPY apps/api/prisma ./prisma COPY apps/api/.env.example .env.example # 生成 Prisma Client RUN pnpm prisma generate # 构建 RUN pnpm build # Production stage FROM oven/bun:1.1-alpine AS runner WORKDIR /app # 安装依赖(仅生产) COPY apps/api/package.json . COPY pnpm-workspace.yaml . COPY package.json . RUN npm install -g pnpm RUN pnpm install --prod --frozen-lockfile # 复制构建结果 COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/prisma ./prisma COPY --from=builder /app/.env.example .env.example # 暴露端口 EXPOSE 3001 # 健康检查(使用 Bun 运行 node 兼容代码) HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD bun -e "require('http').get('http://localhost:3001/health', (r) => {if(r.statusCode!==200)throw new Error(r.statusCode)})" # 启动命令(使用 Bun) CMD ["bun", "dist/main"]