Jelu 介绍与选型指南
自托管阅读追踪器 Jelu 全景认知:定位、核心能力、单体架构与 SQLite 单文件库取舍、功能特性清单、同类组件(BookWyrm/Calibre-Web/Kavita/Komga/Ryot)量化对比与选型建议,版本与星数均于 2026-10-28 联网核实。
Jelu 介绍与选型指南
目标:为「自托管阅读追踪」场景讲清 Jelu 是什么、能做什么、与同类开源组件的差异,并给出可落地的选型建议;全部版本号、星数、发布信息均于 2026-10-28 联网核实(来源标注见文内与文末),并在 Ubuntu 24.04 + Java 21 + Jelu 0.88.2 环境完成实机验证(部署实测见《Ubuntu 24.04 安装 Jelu 0.88.2 指南》,配置与命令实测见《Jelu 0.88.2 配置参数详解》《Jelu 0.88.2 常用 CLI 命令与工具详解》)。
一、环境信息
本文引用的版本与社区数据均为查询日期 2026-10-28 的实查结果,取证渠道如下:
| 项目 | 值 | 取证方式 |
|---|---|---|
| 组件仓库 | github.com/bayang/jelu | 官方仓库页 |
| 最新版本 | v0.88.2(2026-10-07 发布) | GitHub Releases |
| 许可证 | MIT(LICENSE 文件,Copyright (c) 2021) | 仓库 raw LICENSE 文件 |
| GitHub Stars | 750 | shields.io 徽章(img.shields.io/github/stars/bayang/jelu) |
| 运行形态 | Spring Boot fat jar(java -jar 直跑) | 官方文档与实测 |
| 数据库 | SQLite 单文件库(jelu.db) | 仓库 application.yml(main 分支) |
| 默认端口 | 11111 | 仓库 application.yml(main 分支) |
| 官方文档站 | bayang.github.io/jelu-web | 官方 README |
| 发布节奏 | 2026-10-05 至 10-07 三天发布 5 个版本 | GitHub Releases |
💡 说明:GitHub 星数统一取自 shields.io 徽章而非 api.github.com 接口,徽章值随查询日期波动,引用时请注明查询日期;本专栏其他篇目亦沿用同一口径。
二、软件概述
2.1 Jelu 是什么
Jelu 是一款自托管阅读追踪器(reading tracker),核心用途是记录「你读过什么、正在读什么、想读什么」。作者 bayang 的原始动机写在 README 里:厌倦了每次在线书评服务关闭都要迁移数据、导出再导入还丢数据,于是做了一个数据完全由自己掌控的「个人 Goodreads」。项目名 Jelu 取自作者个人喜好,2021 年开始开发,MIT 许可证开源。
它的定位与「电子书库管理」有本质区别:Jelu 不管电子书文件本身(不存书、不解析 epub 正文、不提供在线阅读器),它管理的是阅读行为与书单数据——某本书的状态(在读/读完/弃读)、阅读进度、评分书评、标签书架、按年月的阅读历史与统计。数据全部落在一个 SQLite 单文件库中,备份即拷贝文件。
2.2 核心能力速览
- 书目追踪:已读/在读/想读/弃读四种状态,按年份和月份回看阅读历史;
- 元数据自动抓取:输入 ISBN 或题名/作者即可在线拉取书名、作者、封面、简介等元数据(默认走 calibre 的
fetch-ebook-metadata工具,可配置 google、inventaire.io 等插件提供方); - 导入导出:支持从 Goodreads 导出的 CSV 或「每行一个 ISBN」的纯文本导入历史,支持 CSV 导出全量数据;
- 标签与自定义书架:书籍打标签,标签页聚合展示,可用标签自建书架;
- 阅读进度:记录页码/百分比进度,产生事件时间线,配合手机端摄像头扫描 ISBN 快速录入;
- 书评与多用户:写书评并分享,同实例多用户互相查看书库;支持 LDAP 登录、反向代理认证、OAuth2/OIDC;
- 开放 API:提供 REST API(
/api/v1端点族),可脚本化对接第三方; - 嵌入片段:生成 embed 代码,把「在读什么」嵌入博客或 Markdown 笔记;
- 作者数据:自动从维基百科抓作者简介,自动合并重复作者条目。
2.3 技术栈与部署形态
| 层 | 选型 | 说明 |
|---|---|---|
| 后端 | Java(Spring Boot fat jar) | 单 jar 内嵌依赖与 Web 前端,java -jar 直跑 |
| 数据库 | SQLite(JDBC 直连) | 单文件 jelu.db,支持 delete/wal 两种 journal mode |
| 库结构管理 | Liquibase | 启动时自动迁移表结构,升级 jar 后自动变更 |
| 前端 | 内嵌 Web UI | 与 API 同端口(默认 11111) |
| 元数据抓取 | calibre fetch-ebook-metadata + 插件 | java 部署需自备 calibre 工具或改用插件提供方 |
部署形态官方支持三种:jar 直跑(官方 Releases 发布 fat jar,配 systemd 托管最常见)、官方预构建发行(wabayang/jelu,已内置 fetch-ebook-metadata)、非官方 Helm Chart(artifacthub 上的 tibuntu/jelu)。本专栏以 jar + systemd 为主线(最贴近自托管服务器场景),编排形态不在本篇展开。
💡 技术拓展:自托管阅读/书库类应用按「管理对象」可分为三类——书单追踪型(Jelu、BookWyrm、Ryot:管理阅读行为数据,不碰书文件)、书库管理型(Calibre-Web:管理已有电子书文件与目录)、阅读服务器型(Kavita、Komga:把电子书/漫画做成流媒体在线阅读)。选型先分清你要管的是「行为」还是「文件」,Jelu 属于第一类。
三、核心架构
3.1 单体架构与数据流
Jelu 是典型 Spring Boot 单体应用,一个 JVM 进程包揽 API、前端静态资源、元数据抓取与持久化:
浏览器/手机 ──HTTP──▶ Jelu(11111) ──┬──▶ SQLite jelu.db(书目/用户/事件/书评)
├──▶ files/images(封面与作者图落盘)
├──▶ files/imports(CSV/ISBN 导入文件落盘)
└──▶ 元数据提供方(calibre CLI / google / inventaire.io …)
- 对外:一个端口同时服务 Web UI 与 REST API,反向代理只需转发一个 upstream;
- 对内:所有业务数据写 SQLite,JDBC URL 内直接带
journal_mode、busy_timeout参数(如jdbc:sqlite:<path>/jelu.db?journal_mode=wal&busy_timeout=10000); - 抓取:元数据请求按提供方 order 优先级依次调用,calibre 走本机 CLI 子进程,google/inventaire.io 走 HTTP 插件。
3.2 SQLite 单文件库的取舍
这是 Jelu 区别于同类产品最鲜明的架构决策:个人/小家庭场景不引入独立数据库服务。收益是备份极简(拷 jelu.db 即可)、迁移极简(换机器拷文件)、资源占用低;代价是并发写能力有限——为此 0.88.0 版本专门引入 journalMode 配置(delete 兼容性最好、wal 允许读写并发)并调优 busy_timeout 与连接池(delete 模式池大小固定 1,wal 模式默认 Hikari 的 10)。
💡 技术拓展:SQLite 的 journal mode 决定写事务的落盘方式——
模式 原理 适用 delete(回滚日志) 写前把原页拷入 .journal 文件,写完删除;写时阻塞读 兼容性最好,U 盘/网络盘可用 wal(预写日志) 写入 .db-wal,读不等待写 本地盘多读者并发;NFS/SMB 上不安全 memory 日志只留内存,崩溃即损 仅测试 Jelu 默认
delete(任何文件系统都稳),本地磁盘建议切wal(配置实测见《Jelu 0.88.2 配置参数详解》第六章);本文选用默认delete起步、wal作为本地盘优化项。
四、功能特性
以下特性清单逐项对照官方 README 整理(github.com/bayang/jelu,查询日期 2026-10-28),其中标注 ✅ 的项在本专栏实测环境验证过:
| 特性域 | 功能点 |
|---|---|
| 书目管理 | 已读历史(按年/月)、想读清单、在读/读完/弃读状态、手动录入、在线搜索导入(题名/作者/ISBN)✅ |
| 元数据 | calibre fetch-ebook-metadata 抓取、可插拔提供方(google/inventaire.io/databazeknih/debug)、epub/opf 文件导入元数据、ISBN 摄像头扫码 ✅(ISBN 抓取端到端) |
| 数据进出 | Goodreads CSV 导入、ISBN 逐行文本导入、CSV 导出 ✅(导出) |
| 组织 | 标签、标签页、自定义书架、作者页、维基百科作者简介、作者自动合并 |
| 进度 | 页码/百分比进度、事件时间线、阅读统计 |
| 社交 | 多用户、书评与分享、查看他人书库、embed 嵌入片段 |
| 接入 | REST API(/api/v1)、LDAP、反向代理认证、OAuth2/OIDC ✅(API 实测) |
| 运维 | 单文件库备份、日志滚动、会话时长/CORS/端口可配 ✅ |
关键差异解读:Jelu 的功能重心是「记录与召回」(读史、书单、统计),而非「阅读本身」——它不渲染电子书内容,没有在线阅读器,也不管理书文件目录。这是它与后面对比组里书库/阅读服务器类产品的分水岭。
五、快速开始(最小可用示例)
以 jar 直跑为例,三步拉起一个实例(完整安装与 systemd 托管见《《Ubuntu 24.04 安装 Jelu 0.88.2 指南》》):
# 1. 准备 Java 21 与目录(Ubuntu 24.04 默认源直接安装)
sudo apt-get install -y openjdk-21-jre-headless
sudo mkdir -p /opt/jelu && cd /opt/jelu
# 2. 下载官方发布 jar(约 103MB,v0.88.2)
sudo wget https://github.com/bayang/jelu/releases/download/v0.88.2/jelu-0.88.2.jar
# 3. 前台启动验证(生产建议改用 systemd,见安装指南)
java -jar jelu-0.88.2.jar
启动后浏览器访问 http://<服务器IP>:11111,首次进入会要求创建账户——第一个注册的用户自动成为管理员(官方《First login / login》文档原文,查询日期 2026-10-28)。录入一本书的最短路径:登录 → 右上角「添加书籍」→ 填 ISBN(如 9787532776413)→ 触发元数据抓取 → 保存。API 侧最小验证——Jelu 采用 HTTP Basic 认证换取访问令牌 的机制,不是表单登录:
# 1. 用 Basic 认证换取访问令牌(示例账号 admin/q1w2e3r4)
curl -s -u admin:q1w2e3r4 http://127.0.0.1:11111/api/v1/token
# 2. 携带 X-Auth-Token 头调用受保护接口
curl -s -H "X-Auth-Token: 1fdea51c-f746-4d25-99dd-c91ed6c6a746" \
http://127.0.0.1:11111/api/v1/users/me
实测回显(本专栏实验环境,Jelu 0.88.2,token 每次请求都会重新生成):
{"token":"1fdea51c-f746-4d25-99dd-c91ed6c6a746"}
{"user":{"id":"8ab5893d-6f33-3ebd-0a80-539927125ff7","creationDate":null,"login":"admin","password":"****","modificationDate":null,"admin":true,"provider":"JELU_DB"},"token":"9b93e72a-b757-4654-92f8-335410448463"}
更多命令行与 API 操作的逐条实测见《《Jelu 0.88.2 常用 CLI 命令与工具详解》》。
六、适用场景与限制
6.1 适用场景
- 个人阅读记录:替代 Goodreads/微信读书书架,数据 100% 自有,单文件备份随手带走;
- 家庭/小圈子共享:多用户互看书库与书评,一家人共用一台小主机(512MB 内存档即可跑);
- 博客/笔记嵌入:用 embed 片段把「在读什么」挂到个人主页或 Obsidian 笔记;
- 自动化集成:REST API + CSV 导入导出,可对接 calibre 书库、Kindle 采购清单或自建脚本。
6.2 限制与不适用
- 不管理电子书文件:没有在线阅读器、不做格式转换、不提供 OPDS 下载——管文件请用 Calibre-Web/Kavita/Komga;
- 无社交网络:不是 BookWyrm 那种联邦宇宙社区,书评只在实例内可见;
- 并发写有限:SQLite 单写者模型,几十人以上同时写入不合适(
wal模式可缓解读阻塞); - 元数据源依赖外部:calibre 工具或第三方 API 可用性直接影响自动抓取(可配多提供方回退);
- jar 体积约 103MB:首次下载与升级需要带宽(官方源慢时可用代理镜像渠道,见安装指南的网络说明)。
七、同类选型对比
7.1 对比对象与口径
对比组按 §2.1 的三类划分选取:书单追踪型(BookWyrm、Ryot)、书库管理型(Calibre-Web)、阅读服务器型(Kavita、Komga)、下载自动化型(LazyLibrarian,补充说明其定位差异)。星数/许可证/主语言均取自 shields.io 徽章(img.shields.io/github/<stars|license|languages/top>/<repo>),查询日期 2026-10-28;定位差异依据各项目官方 README。
7.2 量化对比表
| 维度 | Jelu | BookWyrm | Calibre-Web | Kavita | Komga | LazyLibrarian | Ryot |
|---|---|---|---|---|---|---|---|
| Stars | 750 | 2.8k | 18k | 12k | 6.8k | 298 | 3.6k |
| 许可证 | MIT | 仓库含 LICENSE.md(徽章未识别出标准类型) | GPL-3.0 | GPL-3.0 | MIT | 徽章显示未标注 | GPL-3.0 |
| 主语言 | Java(Spring Boot) | Python 75.3%(Django) | Python(Flask) | C# 64.0%(.NET) | Kotlin 42.4%(JVM) | Python 81.8% | TypeScript 50.4%(前端)+ Rust 后端 |
| 数据库 | SQLite 单文件 | PostgreSQL(依赖 Celery/Redis) | SQLite | SQLite | H2/SQLite | SQLite | SQLite/PostgreSQL |
| 核心定位 | 个人阅读追踪 + 书单/进度/书评 | 社交化阅读追踪(联邦宇宙互关、书评互动) | Calibre 书库 Web 化(OPDS、格式转换、在线阅读) | 电子书/漫画/杂志在线阅读服务器 | 漫画/电子书媒体服务器(OPDS、多用户进度) | 图书下载自动化(NZB/种子→Calibre) | 全媒体进度追踪(书/影/音/游戏/播客) |
| 依赖重量 | 极低:1 个 jar + Java 21 | 高:Python+PostgreSQL+Redis+Celery | 低:Python 单进程 | 中:.NET 运行时 | 低:1 个 jar + Java | 低:Python 单进程 | 中:Rust 后端单进程 |
| 部署形态 | jar / 预构建包 / 非官方 Helm | 预构建包/官方编排 | 预构建包/jar | 预构建包/jar | 预构建包/jar | 预构建包/jar | 预构建包 |
| ISBN 元数据抓取 | ✅(calibre + 可插拔提供方) | ✅(多源) | ✅(借 Calibre 库) | ✅(扫描入库时) | ✅(扫描入库时) | ✅(Goodreads 等源) | ✅(多源) |
| 在线阅读器 | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
| 多用户 | ✅(LDAP/代理认证/OAuth2) | ✅(注册审批) | ✅(可选) | ✅ | ✅ | 单用户为主 | ✅ |
关键差异解读:Stars 不等于适用——Calibre-Web(18k)、Kavita(12k)星数远超 Jelu(750),但它们管的是「电子书文件」;若你手里没有成规模的电子书文件库,只想记「读了什么、读到哪」,引入它们属于用错工具。Jelu 在书单追踪这一细分里,以「最低依赖 + 单文件备份 + 开放 API」取胜;BookWyrm 强在社交(联邦宇宙),Ryot 强在覆盖媒体面(书影音游戏一把抓),但两者都重依赖。
7.3 选型建议
- 只要记录书单/进度/书评,数据随身走 → Jelu(单文件库,备份即拷贝,API 齐全);
- 要社交书评、联邦宇宙互关、公开书架页 → BookWyrm(代价是 PostgreSQL + Redis + Celery 全家桶);
- 已有 Calibre 书库要 Web 化、OPDS 推送、在线读书 → Calibre-Web;
- 要把电子书/漫画做成家庭流媒体阅读站 → Kavita(叙事类/杂志体验好)或 Komga(漫画/归档文件强项,OPDS 成熟);
- 要自动化追下载新书喂进书库 → LazyLibrarian(与 Jelu 可互补:一个管下载、一个管记录);
- 追踪的不止书(含影视/游戏/播客) → Ryot。
与 Jelu 组合而非互斥的典型搭配:Calibre-Web/Komga 管「书文件」+ Jelu 管「阅读行为」,两者数据经 API 或 CSV 互通(互操作实测与 API 细节见《《Jelu 0.88.2 常用 CLI 命令与工具详解》》)。
八、参考链接
- 官方仓库(bayang/jelu,README/Releases/特性清单,查询日期 2026-10-28):https://github.com/bayang/jelu
- 官方文档站(安装/配置/使用):https://bayang.github.io/jelu-web/
- 官方配置文档(元数据提供方/认证/CORS):https://bayang.github.io/jelu-web/configuration/
- 官方 Java 安装文档:https://bayang.github.io/jelu-web/installation/jar/
- v0.88.2 发布页(jar 资产与修复项):https://github.com/bayang/jelu/releases/tag/v0.88.2
- 默认配置源文件(application.yml,main 分支,查询日期 2026-10-28):https://raw.githubusercontent.com/bayang/jelu/main/src/main/resources/application.yml
- 星数/许可证/语言徽章取证(shields.io,查询日期 2026-10-28):https://img.shields.io/github/stars/bayang/jelu
- 站内延伸:《Ubuntu 24.04 安装 Jelu 0.88.2 指南》、《Jelu 0.88.2 配置参数详解》、《Jelu 0.88.2 常用 CLI 命令与工具详解》