Skip to content

Latest commit

 

History

438 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Readest Lite

Single-container, self-hostable fork of Readest — Supabase + R2/S3 replaced with SQLite + local filesystem, Pro/paywall removed, signup disabled, per-user AES-GCM encrypted vault, quota enforce, proxy toggle.

💬 NodeByte 社区(最重要)

所有问题、建议、讨论请优先前往 NodeByte 社区:https://nodebyte.cn 这是 Readest Lite 的官方社区,作者亲自在社区回答问题、收集反馈、发布更新。

NodeByte 官网 部署教程

开源重要声明(必看)

本项目基于上游仓库 readest/readest(AGPL-3.0 协议)二次开发,本人衍生版完整开源仓库地址: https://github.com/cshdotcom/readest-lite

1. 免费获取说明

全套源码永久公开免费下载,内置一键化部署脚本,安装流程极简,完全不需要付费购买源码、付费找人代安装。 任何平台(闲鱼、淘宝、各类资源站)以“源码收集费、独家源码、付费代部署”为由收费,均属于商家自主盈利行为,与本作者无关。

2. AGPL-3.0 分发强制要求

任何个人/商家转发、打包、售卖本源码,必须同时满足以下全部条件,缺一不可:

  1. 商品页面、压缩包内完整标注本开源仓库地址;
  2. 完整保留源码内所有版权注释、LICENSE 协议文件;
  3. 不得添加额外限制:禁止标注「独家源码、禁止转发、买断商用」等违规条款;
  4. 不得隐瞒源码免费开源事实,虚构付费专属资源。

3. 侵权警示

若商家存在以下行为,均违反 AGPL-3.0 开源协议,构成软件著作权侵权,本人将固定全套证据发起平台投诉、版权维权:

  • 商品全程不标注本开源仓库地址,隐瞒免费开源来源;
  • 谎称源码独家闭源,收取高额源码倒卖费用;
  • 限制买家二次转发、分享源码;
  • 删除源码内版权、协议、项目来源信息。

🔀 与上游 Readest 分道扬镳声明(v8.23.2 起)

自 v8.23.2 起,Readest Lite 不再与上游 readest/readest 自动同步。

历史背景

  • v8.0 → v8.23.2:本仓库以「持续合并上游 + Lite 自定义改造」的方式迭代,每次上游发版(v0.11.x → v0.12.6)都会做一次三方合并。
  • v8.24.0 尝试合并上游 v0.12.10 时遇到严重的回归问题(多次合并失败、功能丢失),消耗了大量精力。

新策略

  • 不再跟踪上游:上游的新版本(v0.12.7+)不会再合并到本仓库。
  • 基于 v8.23.2 + 上游 v0.12.6 长期维护:当前代码基线稳定,功能完整,作为 Lite 的长期版本。
  • 只在以下情况更新:
    1. 用户在 NodeByte 社区或 GitHub Issues 提交 bug 报告
    2. 用户提交 PR 增加自己想要的特色功能
    3. 安全漏洞修复
  • 不再追求功能与上游对齐:上游新增的 iOS CarPlay / Android Auto / BookOrbit / KOReader / RSS / OPDS / localsend 等功能不会进入 Lite。
  • Lite 现有功能保留:JWT 多用户、Prisma storage、回收站、跨用户文件管理、Notion 同步、ReadEra 导入、带登录网页小说导入、Edge TTS、字体本地化等全部保留。

用户建议

  • 想要上游最新功能的用户:请使用官方 readest/readest 或其云服务。
  • 想要稳定自托管 + 多用户管理 + 中国网络友好(代理翻译/词典、字体本地化、无外部依赖)的用户:请使用本仓库。
  • 想给 Lite 加新功能:欢迎在 GitHub 提 PR,或到 NodeByte 社区讨论。

版本号策略

  • 后续版本号从 v8.23.3 开始递增(v8.23.3、v8.23.4...),仅用于标记 Lite 自己的修复/特色功能更新。
  • 不再使用 v8.24+ 以避免与上游版本号混淆。

📜 源与许可

Readest-Lite 完全开源,遵循 AGPL-3.0 协议,源码可免费获取、部署、商用。 在遵守 AGPL-3.0 协议前提下,个人、商业场景的使用与分发都是自由的; 若你需要闭源商用(不公开衍生源码),则必须联系作者获取独立商业授权,否则视为侵权。 详见: 关于Readest-Lite商业授权要求

CI Docker Version

快速开始

# 一条命令拉起
docker run -d \
  --name readest-lite \
  -p 8225:8225 \
  -v readest-data:/data \
  -e ADMIN_EMAIL=admin@example.com \
  -e ADMIN_PASSWORD=changeme \
  -e ADMIN_USERNAME=Admin \
  -e SUPER_ADMIN_EMAIL=admin@example.com \
  --restart unless-stopped \
  ghcr.io/cshdotcom/readest-lite:latest

# 30 秒后访问 http://localhost:8225

请务必修改默认密码,生产环境使用 16 位以上随机字符串。

Docker Compose 部署(推荐)

git clone https://github.com/cshdotcom/readest-lite.git
cd readest-lite
cp .env.example .env
# 编辑 .env:设置 ADMIN_EMAIL / ADMIN_PASSWORD / ADMIN_USERNAME
docker compose up -d

详细配置见 部署教程。

环境变量

变量 必填 默认 说明
ADMIN_EMAIL ✅ — 管理员邮箱,首次启动自动创建账号
ADMIN_PASSWORD ✅ — 管理员密码,建议 16+ 位随机字符
ADMIN_USERNAME 可选 — v8.1:管理员显示名
SUPER_ADMIN_EMAIL 可选 — 超级管理员邮箱,设为与 ADMIN_EMAIL 相同的值即可获得 super_admin 角色(可创建/降级 admin),重启容器后自动生效
ADMIN_AVATAR_URL 可选 — v8.18.9:管理员头像 URL(http(s):// 或 data:image/*,拒绝 SVG)。优先级高于 DB 里手动设置的头像
PORT 可选 8225 容器内监听端口
JWT_SECRET 可选 派生值 JWT 签名密钥,不设时由 ADMIN_EMAIL+ADMIN_PASSWORD 派生
PUBLIC_BASE_URL 可选 http://localhost:8225 对外访问 URL,反向代理场景下必填
DEEPL_ENABLED 可选 false 设为 true 启用 DeepL 翻译
DEEPL_FREE_API_KEYS 可选 — DeepL Free API key,逗号分隔
DEEPL_PRO_API_KEYS 可选 — DeepL Pro API key,逗号分隔
AI_GATEWAY_API_KEY 可选 — AI 聊天网关 key

指定特定版本:ghcr.io/cshdotcom/readest-lite:8.13.1(每个版本都有对应 git tag)。

完整说明见 部署教程 - 环境变量。

v8.0 → v8.13 功能列表

版本 核心改动
v7.0 多用户管理 · 远程书籍下载 · Edge TTS · 字体本地化 · DeepL 可选
v8.0 所有翻译/词典代理强制登录
v8.1 远程下载写 Book 表(修复书架不显示)· ADMIN_USERNAME env · 删除 WebSearchPopup
v8.2 代理开关 proxyEnabled · 全站 Readest Lite 品牌 · GET health check
v8.3 账号切换数据隔离(登出清空 library/settings/cursor)
v8.4 Per-user 加密 vault(服务端托管密钥 + AES-GCM 加密 library/settings)
v8.5 配额真正 enforce · 真实配额 UI · SSRF 黑名单 · fire-and-forget 下载
v8.6 合并上游 0.11.12 · 图片保存/分享 · 永久分享 + 自定义有效期 · 下载任务队列
v8.7 跨设备下载任务队列(DownloadTask 表 · 暂停/恢复/重试 · 5s 轮询)
v8.8 分块上传规避 Cloudflare 524 超时(大文件自动切 5MB · 流式合并)
v8.9 下载进度条/速度/ETA/用时 · 点击任务看完整日志 · 批量下载 · 自动重命名 · Cookie/Headers 高级选项
v8.10 中文汉化 · 笔记链接手机默认走 web reader · 登出清空残留 library.json · 阅读统计(总/今日/本周 + 书榜) · 下载记录折叠
v8.10.1 批量下载 per-URL Cookie/Headers 语法(URL | cookie:VALUE | header:Key: VALUE)
v8.10.2 笔记导出链接绝对 URL(站外可点击) · Reader 书不在库里时自动重试加载 · 用户管理折叠
v8.10.3 登出后隐藏全部书籍(修复 demo books 残留) · 移出分组不再踢出用户
v8.10.4 恢复跨设备视图设置同步(可选开关,默认关)
v8.11 合并上游 v0.11.17(Markdown 渲染 · PDF/CBZ 对比度 · TTS 高亮粒度 · 最近阅读书架 · foliate-js 自动更新)
v8.12 上游 v0.11.17 全量同步(163 文件复制 + 21 新文件 + 58 Lite 自定义保留 · 排除 Google Drive/payment/tests · 手动同步 30+ 类型字段)
v8.12.1 紧急修复 v8.12.0 误覆盖 Lite 自定义:恢复 getRemoteBookFilename 在 'local' 存储类型返回正确文件名(修复下载报 File not found)· 恢复 AboutWindow Lite 品牌(修复「关于」弹官方页面)
v8.12.2 防御性文件名生成(即使 getStorageType/book.format/book.title 异常也永不返回空串)· 上传/下载失败响应体加 hint+received 字段方便诊断 · 放宽 download fallback parts.length 检查
v8.13 上游 Readest v0.11.18 非覆盖式合入:Auto Scroll 阅读模式 · 中键自动滚动 · 翻页动画 · PDF 暗色模式页眉页脚 · 两指滚动 vs 捏合 · View Transitions API gating · TTS 大改版(无缝 Web Audio + 关书继续播放 + mini player + 词典朗读按钮)· 主题分段控件 · 校对规则开关 · OPDS 子目录爬取 + 自托管认证 · Calibre 自定义列 · 按阅读进度排序
v8.13.1 翻页动画补全(幻灯片/卷页 JS-only port)· 修复「关于」页面版本号显示(package.json 0.11.4 → 8.13.1)· bookService 并发导入崩溃修复(createDir 幂等)
v8.18.x 上游 v0.12.1 → v0.12.6 批量合入 + v8.18.x 一系列 Lite 自定义:feed:// 分享 · 加密设置同步 · 用户头像 URL · 阅读统计加密同步 · ABS/LocalSend/Audiobook stubs 非阻塞 · Admin 用户详情 Modal
v8.19.x 回收站 + 文件去重 + 角色层级 super_admin > admin > user + 审计日志与回滚 + 分组管理 v1(在 SelectModeActions 加「更多」下拉)+ 创建用户时角色选择 + SVG 头像支持 + 隐藏头像文件
v8.21.0 回收站批量选择(每行 checkbox + 批量恢复/批量删除/全选)· 管理员跨用户文件管理(list 支持 ?userId= 与 ?allUsers=1 + 移动/复制端点 + AdminFileTransfer 组件)· 分组管理 Modal(在书库三点菜单底部:搜索/添加/编辑/删除/上下移排序/滚动)· 49 个简体中文键补全
v8.22.0 上游 v0.12.7/v0.12.8 适配移植:ReadEra 注释导入(API + ImportAnnotationsDialog 入口)· Notion 笔记同步(代理路由 + IntegrationsPanel + NotionForm)· 带登录的网页小说导入(novel/proxy 端点 + 高级选项 cookie/headers)· 修复分组管理点击无响应(createPortal 渲染到 body)· 修复有声书点击闪退(useSearchParams Suspense 包裹)· 修复创建用户无角色选择(永远显示 disabled select)· AdminFileTransfer 用户列表可搜索(datalist)· 32 个新简体中文键
v8.22.2 关键修复:reader 页面 CORS 错误(download.readest.com / storage.readest.com)— updater 检查在 web 平台直接 short-circuit,constants.ts URL 全部本地化,新增 /public/releases/release-notes.json · 有声书点击改为「3 种播放方式」教程页(本地 MP3/M4A · Audiobookshelf 流式 · EPUB 内嵌朗读)· 用户中心布局:阅读统计卡片移到第一位 · AdminFileTransfer 默认折叠(与回收站一致)· 移动/复制到自身时友好提示
v8.22.3 内置 HTML5 有声书播放器(无需外部服务)· 已在 v8.23 移除
v8.23.0 删除有声书内置播放器(加到 TODO 待办)· 删除 RSS 自动 favicon 识别 · 修复超级管理员 ENV 识别(init-admin.mjs 不再降级 super_admin)· 分组管理与书库 GroupBy 融合 · README 更新

📋 TODO 待办(规划中)

  • 有声书播放:自研内置 HTML5 播放器(v8.22.3 曾实现但因稳定性问题暂时移除,计划重新开发)
  • RSS 站点 favicon 自动识别:v8.23 移除,计划用更稳定的方式重新实现
  • 官方网站 cshdotcom.github.io/readestl 内容更新

数据持久化

所有数据存储在容器 /data 目录:

data/
├── db/             SQLite 数据库(用户、书籍、进度、批注)
│   └── readest.db
├── books/          书籍文件
│   ├── uploads/    上传的电子书
│   └── covers/     自动生成的封面
├── inbox/          Send to Readest 入站文件
└── config.json     运行时配置(自动生成)

通过卷挂载(-v ./data:/data 或 -v readest-data:/data)确保容器重建不丢失。

安全模型(v8.4+)

登录:密码 → KE → 解密 K_enc → K → 解密本地 .enc 文件
活跃:K 在内存,library/settings 自动 AES-GCM 加密写盘
登出:清 K(内存),加密数据保留磁盘,K_enc 在服务端
切换:不同 userId → 不同 .enc 文件 → 天然隔离
改密码:admin 清 K_enc → 用户下次登录生成新 K
  • 密码不存客户端
  • 浏览器存储只有密文
  • 跨账号数据彻底隔离

What changed vs upstream

关注点 上游 Readest Readest Lite
数据库 Supabase Postgres + RLS SQLite via Prisma
对象存储 R2/S3 预签名 URL 本地文件系统 + HMAC 签名 URL
鉴权 Supabase GoTrue(邮箱/OAuth/Magic Link) 本地 JWT 多用户系统,/auth/v1/* 兼容 shim
Pro/付费 Stripe + Apple IAP + Google IAP 完全删除,所有功能无条件开放
注册 开放 禁用 — 管理员通过用户管理面板创建用户
数据加密 — v8.4:Per-user AES-GCM 加密 vault
配额 Pro 体系限制 v8.5:管理员分配配额,真正 enforce
代理 直连 v8.2:服务器代理 + 用户可关代理走直连
同步协议 — 1:1 复刻(books/configs/notes/stats + CRDT replicas)
分享协议 — 1:1 复刻(create/list/import/revoke/download/cover/og)
阅读器内核 foliate-js 完全一致(零改动)

文档

架构

┌──────────────────────────────────────────────────────────┐
│ Browser (Next.js web app, port 8225)                     │
│  └── utils/supabase.ts → pseudo client → /auth/v1/*      │
│  └── context/VaultContext → AES-GCM key (in-memory)      │
└──────────────────────────────────────────────────────────┘
                            │
                            ▼
┌──────────────────────────────────────────────────────────┐
│ Next.js standalone server (single container)             │
│  ├── /auth/v1/*           — Supabase Auth compat shim    │
│  ├── /auth/v1/vault-key   — v8.4: encrypted vault key    │
│  ├── /api/sync            — books/configs/notes/stats    │
│  ├── /api/sync/replicas   — CRDT replicas (HLC merge)    │
│  ├── /api/storage/*       — files + HMAC-signed PUT/GET  │
│  ├── /api/usage           — v8.5: quota usage             │
│  ├── /api/share/*         — book shares + OG image       │
│  ├── /api/admin/users     — v7: multi-user management    │
│  ├── /api/translate/google— v8: proxy + v8.5: enforce    │
│  ├── /api/proxy/{wiki,resource} — v8.5: SSRF blacklist   │
│  ├── /api/books/download-url — v8.1: remote download     │
│  ├── /api/deepl/translate — v8.5: quota enforce           │
│  └── /api/{ai,tts,metadata,opds,hardcover,kosync}        │
└──────────────────────────────────────────────────────────┘
          │                              │
          ▼                              ▼
┌─────────────────────┐       ┌──────────────────────────┐
│ SQLite (Prisma)     │       │ Local filesystem         │
│  /data/db/readest.db│       │  /data/books/uploads/    │
│  14 tables +        │       │  /data/books/covers/     │
│  User.encryptedVaultKey│    │  /data/inbox/            │
└─────────────────────┘       └──────────────────────────┘

升级

docker compose pull      # 拉取最新镜像
docker compose up -d     # 重建容器(数据在 ./data 不受影响)
docker image prune -f    # 清理旧镜像

启动时自动检测数据库版本并执行迁移,无需手动操作。SQLite 自动迁移、数据卷持久化,旧数据无损。

License

Inherited from upstream Readest — see LICENSE. LICENSE_NOTICE.md

☕ 支持作者

如果你觉得这个项目对你有帮助,可以请作者喝杯咖啡,支持后续 Readest-Lite 的开发: Support Author

About

Single-container self-hostable Readest fork — SQLite + local FS, no Supabase, no paywall. Community: https://nodebyte.cn

Topics

Resources

Contributing

Security policy

Stars

35 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages