# --- 基础镜像 --- FROM node:20 AS builder ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable WORKDIR /app # 安装构建原生模块所需的工具 RUN apt-get update && apt-get install -y \ python3 \ make \ g++ \ libsqlite3-dev \ && rm -rf /var/lib/apt/lists/* # 复制依赖定义文件 COPY package.json pnpm-lock.yaml ./ # 安装依赖 RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile # 复制源代码 COPY . . # 构建项目 RUN pnpm run build # 清理开发依赖并重新安装生产依赖以确保原生模块正确 RUN pnpm prune --prod RUN pnpm rebuild better-sqlite3 # --- 运行阶段 --- FROM node:20-slim AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=7860 # 安装运行时可能需要的库 RUN apt-get update && apt-get install -y \ openssl \ && rm -rf /var/lib/apt/lists/* # 创建数据目录并设置权限 (适配 Hugging Face Spaces) RUN mkdir -p /app/data /app/uploads && chmod -R 777 /app/data /app/uploads # 复制构建产物和必要的运行文件 COPY --from=builder /app/dist ./dist COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/api ./api # 暴露端口 EXPOSE 7860 # 启动命令 CMD ["node", "dist/api/api/server.js"]