BookOrbit Book Dock 完整使用教程与避坑指南
本文档基于真实部署和长期使用经验整理,涵盖 Book Dock(自动导入)功能的工作原理、配置方法、常见问题及最佳实践。
一、什么是 Book Dock?
Book Dock 是 BookOrbit 的自动导入功能,相当于一个智能投递箱。你只需要把电子书文件放进指定的文件夹,BookOrbit 就会自动识别、处理并导入到书库中。
核心概念:
- Book Dock:自动导入功能的名称
- auto_ingest:你服务器上存放待导入文件的目录
- /data/book-dock:容器内对应的监控目录
- Finalize:确认入库(文件从待处理移到书库)
- Confidence threshold:匹配度阈值,决定是否自动入库
二、环境准备(关键配置)
1. 目录映射必须正确
在 docker-compose.yml 中,确保 auto_ingest 映射到容器内的 /data/book-dock:
volumes:
- ./auto_ingest:/data/book-dock # 正确
# - ./auto_ingest:/app/data/book-dock # 错误
验证方法:
docker exec -it bookorbit-app ls -la /data/book-dock/
2. 容器用户权限必须匹配
在 docker-compose.yml 中添加 user: "1000:1000",确保容器用户与宿主机目录所有者一致:
services:
bookorbit:
image: ghcr.io/bookorbit/bookorbit:latest
user: "1000:1000" # 必须添加验证方法:
docker exec -it bookorbit-app id
应显示 uid=1000(node) gid=1000(node)
3. 目录权限必须正确
cd /wwwroot/bookorbit
sudo chown -R 1000:1000 auto_ingest books data pgdata
sudo chmod -R 755 auto_ingest books data pgdata
三、Book Dock Web 界面设置
在 Web 界面中,进入「设置」→「Book Dock」,有以下关键选项:
基础设置:
- Drop folder:显示容器内监控路径 /data/book-dock(只读)
- Destination library:入库后放到哪个书库
- Destination folder:入库后文件放到哪个目录(通常为 /books)
元数据设置:
- Auto-fetch metadata from providers:是否自动联网抓取封面/作者/简介,新手建议开启,出问题时可关闭
- Auto-finalize:是否自动完成入库(无需手动确认),建议开启
- Confidence threshold:匹配度阈值,低于此值不会自动入库,建议 50%(最低)
Metadata mode(元数据合并模式):
- Safe merge(推荐):只补充缺失的字段,不覆盖已有数据
- Replace:用新数据完全覆盖旧数据
四、支持与不支持的文件格式
完全支持(经过验证):
- EPUB:最通用的电子书格式,支持最好
- KEPUB:Kobo 专用格式
- MOBI:Kindle 旧格式
- PDF:支持,但元数据解析可能有问题
- CBZ/CBR:漫画格式
特殊说明:
- PDF:如果文件内部元数据包含异常字符(如 \u0000),可能会导致入库失败,建议通过 Web 界面上传或先用 Calibre 清理元数据
- 有声书:M4B、MP3、M4A 等格式支持,但建议保持文件名简洁
五、文件命名规则(极其重要!)
错误命名(会导致处理失败):
- 完美伴侶 緩慢性愛_[日]Adam 德永 著 宋好 譯_24hbook.com.epub (中文、空格、括号、特殊符号过多)
- 男女性功能障碍独特秘方绝招 (中国民间中医医药研究开发协会中药外治专业委员会) .pdf (中文、括号、空格)
- book(1).epub (括号)
- 书@#$.pdf (特殊符号)
正确命名:
- book.epub 纯英文,最简单
- sex_health.pdf 英文+下划线
- slow_love.epub 英文+下划线
- The_Great_Gatsby.epub 英文+下划线
命名规则总结:
- 只用英文字母、数字、下划线 _,不要用中文
- 不要用空格,用下划线替代
- 不要用括号 () [] {},直接删除
- 不要用特殊符号,如 @ # $ % &
- 文件名不要太长,控制在 50 个字符以内
六、完整工作流程
方式一:自动导入(推荐)
- 准备文件:确认文件名是纯英文(如 book.epub)
- 放入目录:用宝塔或 SCP 上传到 /wwwroot/bookorbit/auto_ingest/
- 等待处理:等待 30-60 秒,系统自动处理
- 检查结果:如果文件从 auto_ingest 消失说明处理成功;去 Web 界面书库查看应该能看到书;如果有封面和元数据就完美了
方式二:Web 界面上传(备用)
- 登录 Web 界面
- 进入书库
- 点击上传
- 选择文件(文件名可以是中文)
- 等待上传完成
方式三:手动入库(兜底)
如果自动导入失败:
cd /wwwroot/bookorbit
mv auto_ingest/*.epub books/ 2>/dev/null
mv auto_ingest/*.pdf books/ 2>/dev/null
然后登录 Web 界面,进入「设置」→「书库」→ 点击「扫描」
七、查看日志和状态
查看 BookDock 是否正常运行:
docker-compose logs bookorbit | grep -i "bookdock" | tail -10
正常输出:
{"level":30,"time":...,"context":"BookDockWatcherService","msg":"Watching Book Dock folder: /data/book-dock"}
查看文件处理状态:
ls -la /wwwroot/bookorbit/auto_ingest/
ls -la /wwwroot/bookorbit/books/
docker-compose logs bookorbit --tail 50
查看特定文件的处理记录:
docker-compose logs bookorbit | grep -i "你的文件名" | tail -20
八、常见问题与解决方案
Q1: 文件放入 auto_ingest 后没有反应
可能原因:文件名包含中文、空格、括号等特殊字符;BookDock 服务没有正常运行;目录映射路径不正确
解决方案:重命名为纯英文如 book.epub;重启 BookDock:docker-compose restart bookorbit;检查映射路径:docker exec -it bookorbit-app ls -la /data/book-dock/
Q2: 文件出现在 Book Dock 界面,但没有自动入库
原因:Auto-finalize 未开启;匹配度低于阈值
解决方案:在 Web 界面「设置」→「Book Dock」→ 开启 Enable auto-finalize;将 Confidence threshold 拉到最低(50%);关闭 Auto-fetch metadata from providers(可选,避免卡住)
Q3: 文件卡在 auto_ingest 中无法入库
现象:文件在 auto_ingest 里,前端也能看到,但一直不消失
解决方案:
cd /wwwroot/bookorbit
mv auto_ingest/文件名.epub books/
然后 Web 界面手动扫描
Q4: Web 界面上传报错 Internal Server Error
原因:目录权限不足
解决方案:
sudo chown -R 1000:1000 /wwwroot/bookorbit/books
sudo chown -R 1000:1000 /wwwroot/bookorbit/data
sudo chmod -R 755 /wwwroot/bookorbit/books
sudo chmod -R 755 /wwwroot/bookorbit/data
Q5: 自动导入小文件可以,大文件不行
可能原因:内存不足;处理超时;文件内部元数据有异常
解决方案:监控内存 docker stats bookorbit-app;用 Web 界面上传大文件;用 Calibre 检查并修复文件内部元数据
Q6: 前端提示错误中包含 \u0000
原因:PDF 内部元数据包含空字符(NULL 字符),数据库拒绝写入
解决方案:使用 Calibre 打开 PDF → 编辑元数据 → 删除异常字符 → 重新导出;或者直接用 Web 界面上传(会自动过滤);或者在 Book Dock 界面手动点击 Finalize
Q7: 如何确认 BookDock 是否正常?
docker-compose ps | grep bookorbit
docker-compose logs bookorbit | grep -i "bookdock" | tail -5
touch /wwwroot/bookorbit/auto_ingest/test.txt
sleep 5
ls -la /wwwroot/bookorbit/auto_ingest/test.txt
九、最终推荐配置
docker-compose.yml 关键配置:
services:
bookorbit:
image: ghcr.io/bookorbit/bookorbit:latest
container_name: bookorbit-app
user: "1000:1000"
ports:
- "8090:3000"
volumes:
- ./data:/app/data
- ./books:/books
- ./auto_ingest:/data/book-dock
environment:
- DB_HOST=postgres
- DB_PORT=5432
- PGUSER=bookorbit
- PGPASSWORD=bookorbit@123
- PGDATABASE=bookorbit
- JWT_SECRET=your_secret
- SETUP_BOOTSTRAP_TOKEN=your_token
- HOST=0.0.0.0
- PORT=3000
- NODE_ENV=production
depends_on:
- postgres
restart: unless-stopped
networks:
- bookorbit-net
deploy:
resources:
limits:
cpus: '1'
memory: 1GWeb 界面 Book Dock 设置:
- Auto-fetch metadata:保持开启,如果查不到就关闭
- Auto-finalize:开启
- Confidence threshold:50%(最低)
- Metadata mode:Safe merge
- Destination library:你的书库名
十、最佳实践总结
上传前检查清单:
- 文件名是纯英文(如 book.epub)
- 没有中文、空格、括号、特殊符号
- 文件大小适中(建议一次只传 1-3 本)
- 容器用户权限正确(user: "1000:1000")
- 目录映射正确(./auto_ingest:/data/book-dock)
- BookDock 服务正常运行(查看日志)
日常使用流程:
- 放文件:把纯英文名的文件放到 auto_ingest
- 等处理:等待 30-60 秒,系统自动处理
- 检查:查看文件是否被移走,前端是否出现
- 补缺:如果封面缺失,手动编辑补全
故障排查流程:
- 检查文件位置:ls -la auto_ingest/ && ls -la books/
- 查看日志:docker-compose logs bookorbit | tail -50
- 检查 BookDock 状态:docker-compose logs bookorbit | grep -i bookdock
- 确认权限:ls -la /wwwroot/bookorbit/
- 重启服务:docker-compose restart bookorbit
绝对禁止:
- 使用宝塔面板文件管理器上传电子书到 auto_ingest 目录 → 可能触发文件监控死锁,导致服务器完全卡死
- 一次性上传大量书籍 → 资源耗尽
- 文件名包含中文、空格、括号、特殊符号 → 处理失败
- 上传超过 100MB 的单个文件 → 内存溢出风险