# PB OCR Proxy (Cloudflare Worker) - 部署与使用指南 > 单个 Worker 同时支持 MinerU 与 Doc2X 两种 OCR 服务。无需 Vercel 配置,直接在 Cloudflare 控制台部署即可使用。 --- ## 🚀 Fast Deploy · 快速部署 本节用最短路径告诉你如何上线与如何在 Paper Burner X 里配置。 ### 1) 环境变量一览 - 必选(至少二选一): - Secret `MINERU_API_TOKEN`(MinerU 令牌) - Secret `DOC2X_API_TOKEN`(Doc2X 令牌) - 可选(推荐生产): - Variable `ENABLE_AUTH` = `true|false`(是否开启鉴权) - Secret `AUTH_SECRET`(鉴权密钥,开启 ENABLE_AUTH 时必填) - Variable/Secret `ALLOWED_ORIGINS` = `https://your-frontend.com,https://another.com`(CORS 白名单) 备注:令牌值只填 Token 本体,不要带 `Bearer ` 前缀。请求头里同理。 ### 2) Cloudflare 控制台 3 步上线 1. 创建 Worker → Delete 示例代码 → 粘贴 `src/index.js` → Save & Deploy 2. Settings → Variables/Secrets:按上面的变量一览添加 3. 复制你的 URL(如 `https://xxx.workers.dev`),用于前端配置 ### 3) 常见使用场景与如何配置 场景 A:多人共享 Worker,各自用自己的 Key(推荐“前端透传模式”) - Cloudflare Worker: - 可不配置 `MINERU_API_TOKEN` / `DOC2X_API_TOKEN` - 建议开启鉴权:`ENABLE_AUTH=true`,配置 `AUTH_SECRET`,并设置 `ALLOWED_ORIGINS` - Paper Burner X: - 打开“模型与Key管理” → MinerU / Doc2X: - Worker URL:填你的 Worker 地址 - Worker Auth Key:填 `AUTH_SECRET`(若开启鉴权) - Token 模式:选择“前端透传模式”,在 PBX 内填入各自的服务 Token - OCR 引擎:在主界面 OCR 设置里选择 MinerU / Doc2X - 点击“测试连接”确认可达 场景 B:个人 Worker(或你提供统一 Key 给他人使用) - Cloudflare Worker: - 配置 `MINERU_API_TOKEN` / `DOC2X_API_TOKEN` - 开启鉴权:`ENABLE_AUTH=true` + `AUTH_SECRET` - 配置 `ALLOWED_ORIGINS`(只允许你的前端域) - Paper Burner X: - 打开“模型与Key管理” → MinerU / Doc2X: - Worker URL:填你的 Worker 地址 - Worker Auth Key:填 `AUTH_SECRET` - Token 模式:选择“Worker 配置模式”(前端不再填 Token) - OCR 引擎:在主界面 OCR 设置里选择 MinerU / Doc2X - 点击“测试连接”确认可达 优先级说明(两服务一致):如果同时提供了“请求头 Token(前端透传)”与“Worker 环境变量”,请求头优先。 --- ## 一、功能概览 Worker 提供以下统一端点(均基于你的 workers.dev 子域或自定义域): - MinerU - POST `/mineru/upload` 上传文件(表单)并发起处理 - GET `/mineru/result/{batch_id}` 轮询处理结果(含 `__health__` 测活) - GET `/mineru/zip?url=...` 代理下载 ZIP(解决浏览器跨域) - Doc2X - POST `/doc2x/upload` 预上传并上传文件 - GET `/doc2x/status/{uid}` 轮询处理状态(含 `__health__` 测活) - POST `/doc2x/convert` 触发导出(可选) - GET `/doc2x/convert/result/{uid}` 查询导出结果(可选) - GET `/doc2x/zip?url=...` 代理下载 ZIP(解决浏览器跨域) - 通用 - GET `/health` 健康检查(不校验 Token) 鉴权与 CORS: - 可选开启 `ENABLE_AUTH=true`,启用后所有业务端点需携带请求头 `X-Auth-Key: `。 - Token 传递方式:优先读取请求头(前端透传)→ 若不存在则读取 Worker 环境变量。 - CORS:支持 `ALLOWED_ORIGINS` 白名单与标准预检(OPTIONS)。 --- ## 二、部署步骤(控制台,无需 wrangler) 1. 登录 Cloudflare Dashboard → Workers & Pages → Create Application → Create Worker 2. 命名(如 `pb-ocr-proxy`)→ Deploy → Edit Code 3. 删除示例代码,粘贴 `src/index.js` 全部内容 → Save and Deploy 4. Settings → Variables and Secrets: - 必填(至少二选一,根据使用场景): - Secret `MINERU_API_TOKEN`(MinerU 令牌) - Secret `DOC2X_API_TOKEN`(Doc2X 令牌) - 可选(推荐生产): - Variable `ENABLE_AUTH` = `true|false` - Secret `AUTH_SECRET`(开启 ENABLE_AUTH 时必填) - Variable/Secret `ALLOWED_ORIGINS` = `https://your-frontend.com,https://another.com` - 注意:令牌值只填 Token 本体,不要带 `Bearer ` 前缀。 5. 复制你的 Worker URL(如 `https://pb-ocr-proxy.yourname.workers.dev`)用于前端配置。 > 兼容日期(Compatibility Date)建议设置为 >= 2024-10-01。 --- ## 三、环境变量说明 - MinerU/Doc2X Token - `MINERU_API_TOKEN`(Secret):MinerU 令牌 - `DOC2X_API_TOKEN`(Secret):Doc2X 令牌 - 鉴权与 CORS(可选) - `ENABLE_AUTH`(Variable,默认不启用):`true` 时开启鉴权 - `AUTH_SECRET`(Secret):开启鉴权后,所有业务端点需携带 `X-Auth-Key: ` - `ALLOWED_ORIGINS`(Variable/Secret):逗号分隔的白名单 Origin;启用后仅白名单域可通过预检 Token 查找顺序(两服务一致): 1. 请求头:`X-MinerU-Key` 或 `X-Doc2X-Key` 2. 环境变量:`MINERU_API_TOKEN` 或 `DOC2X_API_TOKEN` --- ## 四、端点与示例 通用健康: ```bash curl https://your-worker.workers.dev/health ``` MinerU 测活(含 Token 校验): ```bash # 成功(200):带 Token 或 Worker 已配置 Token curl -i https://your-worker.workers.dev/mineru/result/__health__ \ -H "X-Auth-Key: " \ -H "X-MinerU-Key: " # 未授权(401):未提供 Token 且 Worker 未配置 Token curl -i https://your-worker.workers.dev/mineru/result/__health__ ``` Doc2X 测活: ```bash curl -i https://your-worker.workers.dev/doc2x/status/__health__ \ -H "X-Auth-Key: " \ -H "X-Doc2X-Key: " ``` MinerU 工作流: ```bash # 1) 上传 curl -X POST https://your-worker.workers.dev/mineru/upload \ -H "X-Auth-Key: " \ -H "X-MinerU-Key: " \ -F file=@/path/to/file.pdf \ -F is_ocr=true -F enable_formula=true -F enable_table=true -F language=ch # 响应 { success:true, batch_id:"..." } # 2) 轮询结果 curl https://your-worker.workers.dev/mineru/result/ \ -H "X-Auth-Key: " # 3) ZIP 代理下载(解决浏览器跨域) curl -L "https://your-worker.workers.dev/mineru/zip?url=" \ -o result.zip ``` Doc2X 工作流: ```bash # 1) 上传 curl -X POST https://your-worker.workers.dev/doc2x/upload \ -H "X-Auth-Key: " \ -H "X-Doc2X-Key: " \ -F file=@/path/to/file.pdf # 响应 { success:true, uid:"..." } # 2) 轮询状态 curl https://your-worker.workers.dev/doc2x/status/ \ -H "X-Auth-Key: " # 3) (可选)触发导出并查询导出结果 curl -X POST https://your-worker.workers.dev/doc2x/convert \ -H "X-Auth-Key: " \ -H "Content-Type: application/json" \ -d '{"uid":"","to":"md","formula_mode":"dollar"}' curl https://your-worker.workers.dev/doc2x/convert/result/ \ -H "X-Auth-Key: " # 4) ZIP 代理下载(解决浏览器跨域) curl -L "https://your-worker.workers.dev/doc2x/zip?url=" -o result.zip ``` CORS 与预检(OPTIONS): - Worker 自动处理预检请求,允许的请求头:`Content-Type, X-Auth-Key, X-MinerU-Key, X-Doc2X-Key` - 设置 `ALLOWED_ORIGINS` 后,只有白名单域可通过预检并访问 --- ## 五、前端集成要点 - 在前端 UI 中配置 Worker URL(如 `https://your-worker.workers.dev`)即可,无需 Vercel 侧代理/重写 - 鉴权启用时,在请求中带 `X-Auth-Key: ` - Token 传递有两种模式: - 前端透传:请求头 `X-MinerU-Key` / `X-Doc2X-Key` - Worker 持有:在 Cloudflare 环境变量中配置 `MINERU_API_TOKEN` / `DOC2X_API_TOKEN` - 对于从第三方返回的 ZIP 下载链接,前端应通过 `/mineru/zip?url=...` 或 `/doc2x/zip?url=...` 代理,避免浏览器直连跨域 --- ## 六、wrangler CLI 部署(推荐用于生产) 如需使用 wrangler CLI 进行本地开发和自动化部署,项目已包含 `wrangler.toml` 配置文件。 ### 1) 安装 wrangler ```bash npm install -g wrangler # 或使用 pnpm/yarn pnpm add -g wrangler ``` ### 2) 登录 Cloudflare ```bash wrangler login ``` ### 3) 配置环境变量 **Secrets(敏感信息):** ```bash # 至少配置一个 OCR Token wrangler secret put MINERU_API_TOKEN wrangler secret put DOC2X_API_TOKEN # 可选:启用鉴权 wrangler secret put AUTH_SECRET ``` **Variables(非敏感配置):** 编辑 `wrangler.toml`,取消注释需要的变量: ```toml [vars] ENABLE_AUTH = "true" ALLOWED_ORIGINS = "https://yourdomain.com,https://another.com" ``` 或使用命令行设置: ```bash wrangler secret put ALLOWED_ORIGINS --env production ``` ### 4) 本地开发 ```bash cd workers/pb-ocr-proxy wrangler dev ``` 访问 `http://localhost:8787/health` 测试。 ### 5) 部署到生产 ```bash wrangler deploy ``` 部署成功后会显示 Worker URL,如 `https://pb-ocr-proxy.yourname.workers.dev`。 ### 6) 查看日志 ```bash wrangler tail ``` ### 7) 管理 Secrets ```bash # 列出所有 secrets(不显示值) wrangler secret list # 删除 secret wrangler secret delete MINERU_API_TOKEN ``` --- ## 七、与 Vercel 的关系 - 本仓库前端在 Vercel 部署;Workers 在 Cloudflare 部署,二者独立 - 已在仓库根添加 `.vercelignore` 排除 `workers/` 目录,避免 Workers 代码被当作静态文件发布 - 无需在 `vercel.json` 中为 Workers 写任何配置 --- ## 八、故障排查 - 401 未授权: - 未携带 `X-Auth-Key`(在开启鉴权时)或 `X-Auth-Key` 与 `AUTH_SECRET` 不一致 - 未携带服务 Token(请求头或环境变量),`X-MinerU-Key` / `X-Doc2X-Key` 均为空 - 403 预检失败: - 设置了 `ALLOWED_ORIGINS`,但请求来源不在白名单 - ZIP 跨域: - 直接访问第三方下载地址跨域失败;使用 `/mineru/zip?url=...` 或 `/doc2x/zip?url=...` 代理 - 健康与测活: - `/health` 仅测试可达性 - `/mineru/result/__health__` 与 `/doc2x/status/__health__` 用于测试 Token/鉴权链路 如需更多示例,请参考 `workers/pb-ocr-proxy/examples/test.html`。