Jelu 介绍与选型指南

自托管阅读追踪器 Jelu 全景认知:定位、核心能力、单体架构与 SQLite 单文件库取舍、功能特性清单、同类组件(BookWyrm/Calibre-Web/Kavita/Komga/Ryot)量化对比与选型建议,版本与星数均于 2026-10-28 联网核实。

JeluJeluUbuntu24.04Java平台NAS 自托管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 Stars750shields.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 适用场景

  1. 个人阅读记录:替代 Goodreads/微信读书书架,数据 100% 自有,单文件备份随手带走;
  2. 家庭/小圈子共享:多用户互看书库与书评,一家人共用一台小主机(512MB 内存档即可跑);
  3. 博客/笔记嵌入:用 embed 片段把「在读什么」挂到个人主页或 Obsidian 笔记;
  4. 自动化集成: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 量化对比表

维度JeluBookWyrmCalibre-WebKavitaKomgaLazyLibrarianRyot
Stars7502.8k18k12k6.8k2983.6k
许可证MIT仓库含 LICENSE.md(徽章未识别出标准类型)GPL-3.0GPL-3.0MIT徽章显示未标注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)SQLiteSQLiteH2/SQLiteSQLiteSQLite/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 命令与工具详解》》)。

八、参考链接