用 Legejo 把书库和进度搬进一个容器,读到哪都能接着读

简介

什么是 Legejo ?

Legejo 是一个自托管的电子书库,用 Rust 和 SvelteKit 写成,内置 SQLite,一个容器就能跑起来。把 EPUB 上传进去、放进书架,可以在浏览器、Kobo、KOReader 或任意 OPDS 阅读 App 里接着读,阅读进度会跟着你跨设备同步。

主要特点

  • 以 EPUB 为核心:上传时每本 EPUB 都会做检查并自动修复,元数据从文件读取或从 Open Library、Libris 补全,再写回 EPUB 文件。支持系列、标签、评分、全文检索和重复检测。
  • 内置 Web 阅读器:主题、字体、页边距可调,支持高亮、笔记、书内搜索、Wiktionary 查词和朗读。PDF 和 CBZ 漫画也能在浏览器里打开,安装成 PWA 后可离线阅读。
  • 阅读器同步:原生支持 Kobo 同步(书籍、书架、进度、高亮)、KOReader 同步服务、OPDS 1.2 以及 Send to Kindle。
  • 书架分享:可分享给本实例的其他用户,通过私有链接分享给另一个 Legejo 实例或阅读 App,免费书籍还能通过 ActivityPub 联邦到 Mastodon 等 fediverse 平台。
  • 词汇分析:统计每本书的高频词、人名地名和特征词,给出难度对比;世界语书籍还能按词频生成学习清单、附带英文释义并导出到 Anki。
  • 可选能力按需开启:有声书会变成私有播客源,交给已有的播客 App 播放;可接入 Project Gutenberg 等外部 OPDS 目录一键取书;AI 部分默认关闭,提供只读 MCP 端点和书架推荐「图书管理员」。
  • 多用户与账号体系:支持邀请注册、OpenID Connect 单点登录、完整数据导出,界面提供英语、瑞典语、挪威语、芬兰语、德语、法语、西班牙语和世界语共 8 种语言。
  • 单容器轻量部署:一个进程同时提供 API 和静态前端,SQLite 内置,空闲内存约 30 MB;需要时也可换 PostgreSQL,或把书籍文件放到 S3 / Cloudflare R2。
  • 开源免费:基于 AGPL-3.0 协议开源,无付费层、无广告、无遥测。

应用场景

  • 个人电子书库:把散落在各处的 EPUB 集中管理,用标签、系列、书架整理,上传时顺带修好有问题的 EPUB。
  • 多设备续读:电脑浏览器读到一半,出门用手机 PWA 或 Kobo 继续,进度、高亮和笔记双向同步。
  • 家庭 / 小团体共用:开多个账号,把书架分享给家人或朋友,也可以用私有链接分享给使用其他 Legejo 实例的人。
  • OPDS 阅读器接入:把 Legejo 作为 OPDS 目录挂到任意支持 OPDS 的阅读 App 上,统一供书。
  • 有声书收听:把一个音频文件夹变成私有播客订阅源,在常用的播客 App 里听,进度也能保留。
  • 语言学习:利用词频统计和难度对比挑适合自己水平的外语原版书,世界语学习者还能直接导出 Anki 词表。
  • 开发者测试:单容器、无外部依赖,适合快速起一个实例验证 OPDS、Kobo 同步或 ActivityPub 联邦行为。

Legejo 书库界面(浅色主题)

Legejo 是一个把「藏书、阅读、跨设备同步、分享」收进一个轻量容器里的自托管电子书库。

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 slurvdjur/legejo,选择第一个 slurvdjur/legejo,版本选择 latest。

本文写作时,最新发布版本 latest为 v1.47.2(2026-11-11),镜像同时提供 linux/amd64 和 linux/arm64 架构。

卷

在 docker 文件夹中,创建一个新文件夹 legejo,并在其中建一个子文件夹 data

文件夹 装载路径 说明
docker/legejo/data /data 存放书籍文件、封面和 SQLite 数据库 legejo.db

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 3000
本地端口 容器端口
3795 3000

环境

可变 值
LEGEJO_PUBLIC_URL 最终对外访问地址,如 http://192.168.0.197:3795
LEGEJO_ADMIN_PASSWORD 自定义管理员密码
LEGEJO_ADMIN_USER admin(可选,默认 admin)

环境变量说明:本项目的环境变量全部可选,不填任何变量也能正常运行;邮件、公开地址、全文检索、有声书和图书管理员都能在 Admin 页面里配置。但 LEGEJO_PUBLIC_URL 关系到 Kobo 同步、邮件里的链接和 ActivityPub 联邦,建议一开始就填对;LEGEJO_ADMIN_PASSWORD 只在数据库为空时生效,用来在启动时直接创建管理员。环境变量优先级高于 Admin 页面,用变量设置的项目在页面上不可修改。

更多可选变量:LEGEJO_SECURE_COOKIES(纯 HTTP 下设为 false)、LEGEJO_CLIENT_IP_HEADER(反代后设为 X-Forwarded-For)、LEGEJO_MAX_UPLOAD_MB(默认 200)、LEGEJO_FULLTEXT、LEGEJO_MCP、LEGEJO_SMTP_HOST 等,完整列表见官方配置文档。

命令行安装

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 新建文件夹 legejo 和 子目录
mkdir -p /volume1/docker/legejo/data

# 进入 legejo 目录
cd /volume1/docker/legejo

# 一键启动
docker run -d \
--name=legejo \
--restart=unless-stopped \
-p 3795:3000 \
-v /volume1/docker/legejo/data:/data \
-e LEGEJO_PUBLIC_URL=http://192.168.0.197:3795 \
-e LEGEJO_ADMIN_PASSWORD=laosu123 \
slurvdjur/legejo

请把 192.168.0.197 换成你的群晖 IP、把 laosu123 换成自己的强密码。

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
legejo:
image: slurvdjur/legejo
container_name: legejo
restart: unless-stopped
ports:
- "3795:3000" # 容器端口固定 3000,反代场景可删除此映射,改由平台转发到 3000
volumes:
- ./data:/data # 书籍、封面、SQLite 数据库;官方默认使用 named volume legejo-data
# - ./import:/import # 可选:监视导入目录,需配合 LEGEJO_IMPORT_DIR=/import
environment:
LEGEJO_PUBLIC_URL: "" # 对外 https 地址,留空可在 Admin 页面设置
# LEGEJO_ADMIN_USER: admin
LEGEJO_ADMIN_PASSWORD: laosu123 # 建议设置,避免第一个访客抢注管理员
# LEGEJO_CLIENT_IP_HEADER: X-Forwarded-For
# LEGEJO_SMTP_HOST: smtp.example.org
# LEGEJO_MAIL_FROM: "Legejo <[email protected]>"
# LEGEJO_IMPORT_DIR: /import

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

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 legejo 和 子目录
mkdir -p /volume1/docker/legejo/data

# 进入 legejo 目录
cd /volume1/docker/legejo

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

新版 Docker 可以用 docker compose up -d。如果书库规模较大、想换 PostgreSQL,官方还提供了 docker-compose.postgres.yml(多一个 postgres:17-alpine 服务),并附带 import-sqlite 工具迁移已有 SQLite 数据;那属于多容器部署,需要单独配置。

运行

在浏览器中访问 http://<群晖IP>:3795 即可进入登录界面

登录成功后的主界面

首次使用需要:

  1. 创建管理员账号。第一个访问新实例的访客会成为管理员,所以如果实例能被公网访问,请立刻完成注册,或提前设置 LEGEJO_ADMIN_PASSWORD 让账号在启动时就建好。
  2. 用管理员登录,进入 Admin 页面补全公开地址、邮件(自助注册 / 邀请 / 密码重置)、全文检索、有声书等开关;页面上的设置会先「测试」再保存。
  3. 上传 EPUB 书籍。新实例自带一本《The Legejo Cookbook》用户手册,可以直接在库里读,也可以下载 EPUB。

  1. 按需接入客户端:Kobo 同步、KOReader 同步服务、OPDS 目录地址,或把 PWA 添加到手机主屏离线阅读。

如果前面反代终止了 TLS,务必把 LEGEJO_PUBLIC_URL 设为最终的 https:// 地址,否则 Kobo 同步、邮件链接和联邦功能都会用错地址。

注意事项

  1. 管理员抢注风险:未设置 LEGEJO_ADMIN_PASSWORD 时,第一个打开页面的人就是管理员。公网部署务必先设密码再启动,或启动后立刻注册。
  2. 公开地址与反代:LEGEJO_PUBLIC_URL 必须与实际外网地址一致;反代环境下再设置 LEGEJO_CLIENT_IP_HEADER=X-Forwarded-For,登录限流才能按真实客户端 IP 生效。经过 Cloudflare 时改用 CF-Connecting-IP。
  3. 纯 HTTP 登录掉线:若出现登录后立刻掉线,可设置 LEGEJO_SECURE_COOKIES=false;正式使用仍建议 HTTPS。
  4. 数据备份:/data 里同时放着书、封面、缩略图、KEPUB 副本和 SQLite 数据库,备份这一个目录即可(也可用账号页的完整导出)。使用 S3/R2 后数据库仍在 /data,别把卷删了。
  5. 格式边界:EPUB 才是一等公民;PDF 和 CBZ 主要作为同库文件分发,不支持 CBR 或 webtoon 模式;有声书靠播客 App 播放,Legejo 本身不是播放器;项目不读取你已有的书目录,而是自己保存一份副本以便修复和写回修改。
  6. 界面暂无中文:目前只有英、瑞典、挪威、芬兰、德、法、西和世界语 8 种语言,介意的话先试用再决定。
  7. 上传体积:单个文件默认上限 LEGEJO_MAX_UPLOAD_MB=200,导入大部头或有声书前可按需调大;反代也要相应放开 client_max_body_size。
  8. 端口冲突:3000 常被其他容器占用,启动前用 netstat -tunlp | grep 3000 确认,或改用其他本地端口。
  9. 安全建议:不要直接把 3000 暴露到公网,套一层带 HTTPS 的反向代理;AI 图书管理员和 MCP 端点默认关闭,开启前确认密钥与访问范围;项目较新(2026-10 创建),升级前先看 Changelog。

参考文档

jularboolean/legejo: A self-hosted e-book library with OPDS, Kobo sync, KOReader sync and ActivityPub federation
地址:https://github.com/jularboolean/legejo

slurvdjur/legejo - Docker Image | Docker Hub
地址:https://hub.docker.com/r/slurvdjur/legejo

Legejo – a self-hosted library for your e-books(项目官网)
地址:https://legejo.se

Configuring Legejo(官方配置文档,含全部环境变量)
地址:https://github.com/jularboolean/legejo/blob/main/docs/configuration.md

Deploy Legejo on Dokploy(第三方部署模板)
地址:https://dokploy.com/templates/legejo

Legejo | TrueNAS Community Apps(社区应用模板)
地址:https://apps.truenas.com/catalog/legejo_community