# =========================================== # iConsulting LLM Gateway Dockerfile # =========================================== # 构建阶段 FROM node:20-alpine AS builder WORKDIR /app # 安装 pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # 复制 workspace 配置 COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./ COPY packages/services/llm-gateway/package.json ./packages/services/llm-gateway/ # 安装依赖 RUN pnpm install --frozen-lockfile --filter @iconsulting/llm-gateway # 复制源代码 COPY packages/services/llm-gateway ./packages/services/llm-gateway # 构建服务 RUN cd packages/services/llm-gateway && npx tsc # 运行阶段 FROM node:20-alpine AS runner WORKDIR /app # 创建非 root 用户 RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 gateway # 复制构建产物和依赖配置 COPY --from=builder /app/packages/services/llm-gateway/dist ./dist COPY --from=builder /app/packages/services/llm-gateway/package.json ./ # 安装生产依赖 RUN npm install --omit=dev --ignore-scripts # 设置环境变量 ENV NODE_ENV=production ENV PORT=3008 # 切换用户 USER gateway # 暴露端口 EXPOSE 3008 # 健康检查 HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:3008/health || exit 1 # 启动服务 CMD ["node", "dist/main.js"]