# ==== 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"]