Spaces:
Sleeping
Sleeping
| # --- 基础镜像 --- | |
| 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"] | |