| # ==== Stage 1: 构建阶段 (Builder) ==== | |
| FROM node:22-alpine AS builder | |
| WORKDIR /app | |
| COPY package.json package-lock.json ./ | |
| RUN npm ci | |
| COPY tsconfig.json ./ | |
| COPY src ./src | |
| RUN npm run build | |
| # ==== Stage 2: 生产运行阶段 (Runner) ==== | |
| FROM node:22-alpine AS runner | |
| WORKDIR /app | |
| ENV NODE_ENV=production | |
| ENV PORT=7860 | |
| # 安装生产依赖 | |
| COPY package.json package-lock.json ./ | |
| RUN npm ci --omit=dev && npm cache clean --force | |
| # 从 builder 阶段拷贝编译产物 | |
| COPY --from=builder /app/dist ./dist | |
| # 拷贝默认配置文件 | |
| COPY config.yaml ./config.yaml | |
| EXPOSE 7860 | |
| # 直接用 node 启动(不经过 npm),确保信号正确传递 | |
| CMD ["node", "dist/index.js"] | |