当前位置: 首页 > news >正文

一站式自托管阅读平台BookOrbit

简介

什么是 BookOrbit ?

BookOrbit是一个开源的自托管数字图书馆和阅读平台。它可以帮助你把散落在NAS、服务器或本地硬盘里的EPUBPDF、漫画包和有声书整理成一个统一的阅读空间——内置多种格式阅读器、自动元数据补全、多用户权限管理,还支持Kobo/KOReader同步和阅读统计分析。

主要特点

  • 内置多格式阅读器:无需额外安装插件,直接在浏览器中阅读EPUBKEPUBMOBIAZW3PDFCBZ/CBR/CB7漫画以及M4B/MP3/FLAC等有声书
  • 丰富的元数据来源:支持从Google BooksAmazonGoodreadsOpen LibraryiTunesAudibleComicVine9个来源自动抓取书籍元数据,可自定义字段规则
  • 智能书架与集合:支持手动收藏和基于规则的Smart Scopes动态过滤视图,让书架管理更灵活
  • Kobo/KOReader 同步:自动推送书籍到Kobo设备,通过OPDSKOReader实现双向阅读进度同步
  • 多用户与 OIDC/SSO:支持细粒度权限控制、独立的阅读数据隔离,可对接AuthentikKeycloakAuthelia等身份认证提供商
  • 阅读统计与分析:每日阅读时间统计、热力图、连续阅读记录、阅读目标追踪和书库健康仪表盘
  • 开源免费:基于AGPL-3.0协议开源,可免费使用和修改

应用场景

  • 个人数字书库管理:将分散在各处的电子书集中管理,自动补全封面、作者、简介等元数据
  • 家庭共享阅读:为家庭成员创建独立账号,各自管理阅读进度和书架,互不干扰
  • Kobo/Kindle 用户:通过OPDS推送到Kobo设备,支持Send-to-Kindle邮件投递
  • 有声书管理:支持M4BMP3FLAC等格式,内置浏览器端有声书播放器
  • 开发者测试:开发人员可以快速搭建测试环境,体验完整的自托管阅读平台功能

BookOrbit是一个功能全面的一站式自托管阅读平台,将电子书管理、多格式阅读、元数据补全和多用户协作整合在一起。

安装

在群晖上以 Docker 方式安装。

提示BookOrbit的镜像托管在ghcr.io,群晖Docker套件无法直接搜索,需要通过命令行拉取镜像

BookOrbit采用多容器架构(应用 +PostgreSQL数据库),推荐使用docker-compose进行部署。

env.txt

老苏用AI翻译了一下 https://github.com/bookorbit/bookorbit/blob/main/.env.example 中的注释

# 运行的 Docker 镜像。为更严格的部署请固定为 sha-* 标签或 @sha256 摘要。 APP_IMAGE=ghcr.io/bookorbit/bookorbit:latest # 主机上应用公开的端口 APP_PORT=3622 # 主机上在容器内映射为 /books 的文件夹。 # 将其指向你的图书馆根目录;在 NAS 或 Portainer 安装中请使用绝对路径。 BOOKS_HOST_PATH=./books # 可选:Book Dock 投放区在主机上的文件夹(在容器内映射为 /data/book-dock)。 # 将电子书复制或移动到此处,Book Dock 会自动拾取并处理它们。 # 如果未设置,投放文件夹位于 ./data/app/book-dock(默认应用数据卷)内。 # 在挂载 NAS 共享或使用应用数据目录之外管理的文件夹时请使用绝对路径。 # BOOK_DROP_HOST_PATH=/mnt/nas/book-drop # 容器运行时写入应用管理的数据文件夹时使用的 UID/GID。 # 大多数用户可保留这些默认值。 PUID=1000 PGID=1000 # 数据库凭据 POSTGRES_USER=bookorbit POSTGRES_PASSWORD=change-this-password POSTGRES_DB=bookorbit # 应用密钥 JWT_SECRET=change-this-to-a-long-random-secret # 用于初次调用 /auth/setup 端点(x-setup-token 请求头)的必需项 SETUP_BOOTSTRAP_TOKEN=change-this-to-a-long-random-secret # 用于电子邮件和 Kobo 端点的外部/公共 URL APP_URL=https://bookorbit.example.com # Node.js JavaScript 堆内存上限,单位为 MB。对于非常大的图书库请提高该值。 NODE_MAX_OLD_SPACE_SIZE=2048 # --- 可选覆盖项(取消注释以设置) --- # 如果你已经运行自己的 PostgreSQL,请设置 DATABASE_URL 并从 docker-compose.yml 中移除 postgres 服务。你的实例必须启用 # uuid-ossp、pg_trgm 和 vector (pgvector) 扩展。 # DATABASE_URL=postgres://user:password@yourhost:5432/bookorbit # 或者分别设置各个字段(POSTGRES_HOST、POSTGRES_PORT、POSTGRES_USER、POSTGRES_PASSWORD、POSTGRES_DB) # 客户端前端在与 APP_URL 不同域名下提供服务时的 CORS 来源 # CLIENT_URL=https://app.example.com # 仅在你的平台外部管理绑定挂载所有权时将其设置为 false。 # BOOKORBIT_FIX_PERMISSIONS=true # 如果你存储 SMTP 提供商凭据,建议设置(生成方法:openssl rand -hex 32) # EMAIL_ENCRYPTION_KEY= # 如果你存储迁移源凭据,建议设置(生成方法:openssl rand -hex 32) # MIGRATION_ENCRYPTION_KEY= # 日志级别(默认:info)。设置为 debug 可输出详细日志。 # LOG_LEVEL=info # 允许解析到私有/本地域名的 OIDC issuer/discovery URL。 # 默认 false。仅在受信任的自托管网络中启用。 # OIDC_ALLOW_LOCAL_ISSUERS=false # 可选:在使用自动设置时允许 Cloudflare Web Analytics 信标。 # 保持不设置或 false 可保留严格的内容安全策略(CSP)(`script-src 'self'`)。 # CSP_ALLOW_CLOUDFLARE_INSIGHTS=false

下面是一个简单的示例

# 应用设置 APP_IMAGE=ghcr.io/bookorbit/bookorbit:latest APP_PORT=3622 BOOKS_HOST_PATH=./books # UID/GID PUID=1000 PGID=1000 # 数据库凭据 POSTGRES_USER=bookorbit POSTGRES_PASSWORD=bookorbit123 POSTGRES_DB=bookorbit # 应用密钥可以用 openssl rand -hex 32 生成 JWT_SECRET=bf7dd22b68918a7a0044d0ec115c1f930e53de49d97a091c017fcd9318751100 # 用于初次调用 /auth/setup 端点(x-setup-token 请求头)的必需项 SETUP_BOOTSTRAP_TOKEN=adde1f95b500d897e64bbf12198a4b2f9b426bac9162eb5c7edbeaff9d648f57 # 用于电子邮件和 Kobo 端点的外部/公共 URL APP_URL=http://192.168.0.197:3622 # Node.js JavaScript 堆内存上限,单位为 MB。对于非常大的图书库请提高该值。 NODE_MAX_OLD_SPACE_SIZE=2048

说明SETUP_BOOTSTRAP_TOKEN用于首次安装时的身份验证,安装完成后可以移除以禁用设置向导入口。

docker-compose.yml

下面是完整的docker-compose.yml配置(已添加中文注释,保存时记得采用UTF-8格式):

version:'3.8'services:app:image:${APP_IMAGE}container_name:bookorbit-apprestart:unless-stoppedinit:trueenv_file:-env.txtports:-"${APP_PORT}:${PORT:-3000}"environment:NODE_ENV:productiondepends_on:postgres:condition:service_healthyvolumes:-./books:/books# 电子书存放目录-./data/app:/data# 应用数据目录-./data/app/book-dock:/data/book-dock# 自动摄入目录read_only:truetmpfs:-/tmpcap_drop:-ALLcap_add:-CHOWN-DAC_OVERRIDE-FOWNER-SETGID-SETUIDsecurity_opt:-no-new-privileges:truestop_grace_period:30shealthcheck:test:["CMD-SHELL",'node-e "fetch(''http://127.0.0.1:''+(process.env.PORT||3000)+''/api/v1/health'').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"',]interval:30stimeout:5sretries:3start_period:20spostgres:image:pgvector/pgvector:pg16container_name:bookorbit-dbrestart:unless-stoppedenvironment:POSTGRES_USER:${POSTGRES_USER}POSTGRES_PASSWORD:${POSTGRES_PASSWORD}POSTGRES_DB:${POSTGRES_DB}PGDATA:/var/lib/postgresql/data/pgdatavolumes:-./data/postgres:/var/lib/postgresql/data# 数据库持久化healthcheck:test:["CMD-SHELL",'pg_isready -U "${POSTGRES_USER}" -d "${POSTGRES_DB}"']interval:10stimeout:5sretries:10start_period:20s

然后通过SSH登录到您的群晖,执行下面的命令:

# 新建文件夹 bookorbit 和 子目录mkdir-p/volume1/docker/bookorbit/{books,data/{app/book-dock,postgres}}# 进入 bookorbit 目录cd/volume1/docker/bookorbit# 将 docker-compose.yml 放入当前目录# 一键启动docker-compose--env-file env.txt up-d

运行

在浏览器中访问http://<群晖IP>:3622即可进入设置界面,创建管理员账号

其中Setup Token的值为你在env.txt中设置的SETUP_BOOTSTRAP_TOKEN

进入主界面,有设置向导进行功能说明

创建书库

创建你的书库

设置书库名称

配置书库目录,指向/books,点Add添加即可

选择扫描的模式,老苏选择了File as BookBookOrbit支持的格式还是很多的

其他按需要进行设置。如果你已经上传了图书

会看到扫描的进度

扫描速度还是很快的

也可以直接体验官方 Demo:访问 https://demo.bookorbit.app 无需安装即可体验全部功能。

OPDS

进入Settings-->OPDS可以找到端点

Add添加OPDS的账号和密码

静读天下为例

确定之后,会弹出账号和密码输入框,认证通过之后,就可以浏览了

注意事项

  1. 数据持久化./books目录存放你的电子书文件,./data/postgres存放数据库,建议定期备份这两个目录
  2. 端口冲突:如果3000端口已被占用,可以在env.txt中修改APP_PORT=3622
  3. 文件权限:如果遇到文件权限问题,可以在env.txt中调整PUIDPGID为你的用户ID
  4. 大书库优化:如果书库非常大,可以在env.txt中增加NODE_MAX_OLD_SPACE_SIZE=4096来提升Node.js内存限制
  5. 安全建议:生产环境建议配置反向代理(如Nginx)并启用HTTPS;安装完成后建议移除SETUP_BOOTSTRAP_TOKEN

参考文档

BookOrbit: Your Reading Space
地址:https://github.com/bookorbit/bookorbit

BookOrbit 官方网站
地址:https://bookorbit.app

GHCR 镜像页面
地址:https://ghcr.io/bookorbit/bookorbit

BookOrbit 安装文档
地址:https://bookorbit.app/installation.html

http://www.jsqmd.com/news/928504/

相关文章:

  • API网关如何成为生成式AI的统一治理中枢:安全、合规、成本与商业化实战
  • 2026Q3郑州中原区装修公司排名推荐 全屋家装避坑优选指南 - 品牌智鉴榜
  • 基于STM32F407的多波形信号发生器完整工程(含DAC驱动、定时器波形合成与USMART调试)
  • 不用第三方软件!拯救者 Y70 一键调整录屏画质官方教程
  • 西安卖金怕套路?旺哥黄金回收各区服务全覆盖,套路拆解与卖金技巧分享 - 余生黄金回收
  • 2026年中大型插混SUV选购指南 - 博客万
  • AI如何重塑网络安全:从行为基线到自动化防御的实战解析
  • 告别X11:手把手在Ubuntu 20.04上搭建你的第一个Wayland桌面环境(Weston实战)
  • 5步精通媒体捕获工具:从网页嗅探到高效下载完全指南
  • 手把手教你用Linux服务器搭建DNF私服(附一键脚本和客户端配置避坑指南)
  • OLMo开源大模型:从理念到工程的全栈透明实践
  • 区块链存证技术:AI时代版权保护的数字公证方案
  • 日照东港区黄金回收哪家靠谱?实体老店+全市免费上门+无套路 - 行行星
  • Hermes 本地 Agent Windows 一键部署教程
  • Turbo码MATLAB仿真工程包:含编解码实现、BER测试与迭代过程可视化
  • ENVI 5.6保姆级教程:高分七号DLC数据从打开到融合的完整流程(附避坑指南)
  • 游戏卡顿、软件不兼容?Win11 内核隔离一键关闭官方方法
  • 告别暴力搜索:Instant-NGP的多分辨率哈希编码,如何让NeRF训练快了几个数量级?
  • 2026年5月邵阳黄金回收红黑榜:免费上门不扣重的六家良心店盘点 - 余生黄金回收
  • Notepad++ 官方下载+完整安装+必装插件集合【2026.5.31】
  • React与AI融合:构建下一代智能Web组件的架构与实践
  • 从零搭建PX4仿真环境:如何用uORB消息机制连接Gazebo与你的控制算法
  • 用雅特力AT32F413的TMR3定时器驱动LED呼吸灯:从PB5引脚配置到动态调光实战
  • 【分享】万兴PDF专家 v12专业版 国产PDF全套解决方案
  • 济南黄金回收实战指南:卖金时机与上门交易全流程拆解 - 黄金上门回收
  • Boss直聘批量投简历终极指南:5分钟完成100份简历投递的求职神器
  • 别再让WSL2吃光C盘!手把手教你将Ubuntu 20.04搬家到D盘(微软商店版)
  • 红书去水印免费软件手机电脑通用教程详解安全无广告工具用法 - 科技热点发布
  • GESP6级C++考试语法知识(四十二、动态规划----线性DP(三、最长上升子序列(LSI)启蒙))
  • 绍兴黄金回收必看:实时金价、克重、成色三个硬指标 - 专业黄金回收