【免费下载链接】ocrbase
📄 PDF ->.MD/.JSON API & SDK for PaddleOCR-VL with structured data extraction. Self-hostable.
ocrbase 是一个免费的自托管 PDF 智能解析服务,基于 PaddleOCR-VL 视觉语言模型,能将 PDF 文档一键转换为 Markdown 文本或结构化 JSON 数据。本文带你用 Docker Compose 一键部署 ocrbase 完整生产环境,并附 PaddleOCR-VL 的 GPU 配置方法,几分钟就能拥有自己的文档解析 API。
📌核心关键词:ocrbase 自托管 / Docker Compose 部署 / PaddleOCR-VL GPU 配置
一、ocrbase 能做什么?
在部署之前,先了解你即将运行的是什么:
| 功能 | API 端点 | 说明 |
|---|---|---|
| 📄 文档解析 | POST /v1/parse | 将 PDF 每一页 OCR 后输出干净的 Markdown |
| 🧩 结构化抽取 | POST /v1/extract | 按你定义的 JSON Schema,用 LLM 从文档中抽取结构化数据 |
| 📋 任务管理 | GET /v1/jobs/:id | 异步任务队列,提交请求拿到 job ID 后再查询结果 |
| ⚡ 实时推送 | GET /v1/realtime | 通过 SSE 订阅任务进度,无需轮询 |
整套服务完全异步、基于 BullMQ 队列,可以批量处理上千份文档。
二、部署前环境准备
部署 ocrbase 只需要很少的前置条件:
| 组件 | 是否必需 | 说明 |
|---|---|---|
| Docker + Docker Compose | ✅ 必需 | 生产部署全程只需 Docker,无需额外安装运行环境 |
| NVIDIA GPU + nvidia-container-toolkit | ⭕ 可选 | 仅当你要自建 PaddleOCR-VL 时需要 |
| 现成的 PaddleOCR-VL 服务地址 | ⭕ 可选 | 已部署好的 OCR 服务(含云端实例),填入PADDLE_OCR_URL即可 |
💡 小贴士:如果你已有云端的 PaddleOCR-VL 服务,直接跳过 GPU 配置章节,把它当作一个外部服务接入即可。
三、克隆代码
git clone https://gitcode.com/gh_mirrors/oc/ocrbase cd ocrbase项目采用 Monorepo 结构,前后端分别位于 apps/server 和 apps/web 目录,数据库模型定义在 packages/db:
- 后端 API(Elysia + Bun 编译产物):apps/server/Dockerfile
- 前端界面(TanStack Start):apps/web/Dockerfile
- 编排总入口:docker-compose.yml
四、Docker Compose 一键启动:三种 profile 用法
打开 docker-compose.yml,可以看到项目通过profiles把服务分成了三组,按需启动:
1️⃣ 仅启动基础设施(开发模式)
docker compose up -d这一条命令会拉起三个支撑服务并自动初始化存储桶:
| 容器 | 端口 | 用途 |
|---|---|---|
ocrbase-postgres | 5432 | 存储任务、Schema、API Key 等数据 |
ocrbase-redis | 6379 | BullMQ 任务队列 |
ocrbase-minio | 9000 / 9001 | 对象存储(9001 为 Web 控制台),启动后minio-init容器会自动创建ocrbase存储桶 |
2️⃣ 完整生产环境一键部署
docker compose --profile prod up -d该命令会构建并启动server(API 服务,端口 3000)、web(前端界面,端口 3001)、worker(后台任务处理器)三个容器,它们会自动等待 Postgres 和 Redis 健康检查通过后再启动。参见 docker-compose.yml 生产服务段。
🎯 这就是"一键部署"的含义:一条命令,编译镜像 + 启动全部业务容器,宿主机无需安装 Bun 等运行时。
3️⃣ GPU 模式:启动 PaddleOCR-VL
docker compose --profile gpu up -d若要生产服务 + GPU OCR 一起跑:
docker compose --profile prod --profile gpu up -d五、PaddleOCR-VL GPU 配置详解
ocrbase 本身不包含OCR 引擎,它需要指向一个运行中的 PaddleOCR-VL 实例。docker-compose.yml已内置官方 NVIDIA GPU 镜像,关键配置见 docker-compose.yml GPU 段:
paddleocr: image: ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddleocr-vl:latest-nvidia-gpu ports: - "8080:8080" deploy: resources: reservations: devices: - driver: nvidia device_ids: ["0"] capabilities: [gpu]📌配置要点:
- GPU 预留:
device_ids: ["0"]表示使用第一块显卡,多卡环境可改为["0", "1"]或用环境变量注入 - 健康检查:容器会每 30 秒探测
http://localhost:8080/health,模型加载较慢,预留了 300 秒的启动宽限期,请耐心等待 - 多卡/指定显卡:修改
device_ids即可,无需改动其他配置
六、环境变量速查表(.env)
在生产目录根下创建.env文件,完整模板参考 docs/SELF_HOSTING.md 环境变量段:
# ===== 必填 ===== DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ocrbase BETTER_AUTH_SECRET=至少32个字符的随机密钥 BETTER_AUTH_URL=http://localhost:3000 CORS_ORIGINS=http://localhost:3001 REDIS_URL=redis://localhost:6379 # ===== OCR 服务(核心)===== # 本机 GPU 部署时填 http://localhost:8080,外部服务则填对应地址 PADDLE_OCR_URL=http://localhost:8080 PADDLEOCR_VL_API_KEY=local PADDLE_OCR_TIMEOUT_MS=900000 WORKER_CONCURRENCY=1 # ===== 可选:S3/MinIO 存储 ===== S3_ENABLED=true S3_ENDPOINT=http://localhost:9000 S3_BUCKET=ocrbase S3_ACCESS_KEY=minioadmin S3_SECRET_KEY=minioadmin # ===== 可选:LLM(仅 /v1/extract 结构化抽取需要)===== LLM_PROVIDER=openrouter OPENROUTER_API_KEY=your-openrouter-api-key🔑三个最常踩坑的变量:
| 变量 | 说明 |
|---|---|
PADDLE_OCR_URL | 指向你的 PaddleOCR-VL 实例,本机 GPU 部署就是http://localhost:8080 |
PADDLEOCR_VL_API_KEY | 自托管实例不校验密钥,填任意非空字符串(如local)即可 |
WORKER_CONCURRENCY | 大文档(约 200 页以上)时建议设为1,避免压垮 OCR 服务 |
七、验证部署是否成功
🩺三步验证法:
第一步:查看容器状态
docker compose ps所有服务应处于running(或healthy)状态。
第二步:访问健康检查接口
curl http://localhost:3000/v1/health/live # 存活检查 curl http://localhost:3000/v1/health/ready # 就绪检查(确认数据库/队列已连通)第三步:打开 OpenAPI 交互文档
浏览器访问http://localhost:3000/openapi,即可在 Swagger 风格界面中直接测试所有接口;前端界面在http://localhost:3001。
一切就绪后,发一个测试解析请求:
curl -X POST http://localhost:3000/v1/parse \ -H "Authorization: Bearer 你的API_KEY" \ -F "file=@document.pdf"八、进阶:开发模式与大文档调优
本地开发(需要安装 Bun):
bun install # 安装依赖 cp .env.example .env # 复制并编辑环境变量 bun run db:push # 初始化数据库表结构 bun run dev # 启动 API + worker(热重载)大 PDF 调优建议:
- 调大 OCR 请求超时:
PADDLE_OCR_TIMEOUT_MS=900000(15 分钟) - 降低并发:
WORKER_CONCURRENCY=1 - 队列并发数通过
QUEUE_CONCURRENCY环境变量控制(默认 3)
日常运维命令:
| 场景 | 命令 |
|---|---|
| 查看日志 | docker compose logs -f worker |
| 停止服务 | docker compose --profile prod --profile gpu down |
| 升级版本 | git pull后重新docker compose --profile prod --profile gpu up -d |
| 数据备份 | 重点备份postgres_data、redis_data、minio_data三个卷 |
九、常见问题排查
| 问题 | 原因与解决 |
|---|---|
paddleocr容器反复重启 | 未安装 nvidia-container-toolkit,GPU 未被容器识别;安装后重启 Docker 服务 |
worker一直报 OCR 连接失败 | 检查PADDLE_OCR_URL是否可访问;GPU 模型冷启动最长需 300 秒,稍等片刻 |
web页面能打开但请求 401 | 前端与 API 域名不一致,核对CORS_ORIGINS与VITE_SERVER_URL |
| 大文档解析超时 | 按上文调大PADDLE_OCR_TIMEOUT_MS并降低WORKER_CONCURRENCY |
总结
🎉 回顾一下这条"一键部署"路线:
- 克隆代码→
git clone拿到仓库 - 配置
.env→ 重点设置PADDLE_OCR_URL等 4 个必填变量 - 一键启动→
docker compose --profile prod --profile gpu up -d - 验证→
/v1/health/ready+/openapi文档页
至此,你就在自家服务器(或一台带 GPU 的机器)上拥有了一个完全可控的免费文档解析平台:PDF 进、Markdown / 结构化 JSON 出,还能通过 WebSocket 实时跟踪每一份文档的处理进度。完整的 API 端点清单与技术栈说明,可继续阅读 docs/SELF_HOSTING.md 官方自托管文档。
【免费下载链接】ocrbase
📄 PDF ->.MD/.JSON API & SDK for PaddleOCR-VL with structured data extraction. Self-hostable.
相关推荐
BiliNote部署完全指南:Docker Compose一键部署与GPU加速配置
BiliNote部署完全指南:Docker Compose一键部署与GPU加速配置 BiliNote是一款强大的AI视频笔记生成工具,能够自动解析Bilibil
人工智能AI 应用大模型RAG语音后端前端桌面应用SciPhi-Triplex-4bit安装避坑指南:从环境配置到首次推理的完整教程
SciPhi Triplex 4bit安装避坑指南:从环境配置到首次推理的完整教程 如果你是第一次接触 SciPhi Triplex 4bit 本地推理,这篇文
3分钟上手Langfuse自托管:Docker Compose一键部署指南
3分钟上手Langfuse自托管:Docker Compose一键部署指南 还在为LLM应用的可观测性工具部署繁琐而烦恼?本文将带你通过Docker Compo
AI应用LLMOps可观测性后端前端模型评测
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考