easy-Reader(简单书房)是一个 Docker 镜像:把 NAS 上的书库目录映射进容器,就能在电脑、平板和手机的浏览器里阅读 TXT、EPUB、PDF、UMD。这篇教程用 Docker Compose 部署,同一份配置适用于群晖、威联通、飞牛 fnOS、Unraid 和普通 Linux 服务器,只是填写配置的地方不同。
部署前确认
- CPU 架构:镜像同时提供 x86_64(amd64) 和 ARM64(aarch64) 两个版本,拉取时自动选择,不用改配置。Intel / AMD 处理器的 NAS、ARM 处理器的 NAS 和装 64 位系统的树莓派都可以;32 位 ARM 设备不支持。不确定时用 SSH 登录执行
uname -m,显示x86_64或aarch64即可。ARM64 从 1.2.0 版本开始提供。 - Docker:NAS 系统里已安装 Docker 应用(群晖叫 Container Manager,威联通叫 Container Station)。
- 能拉取镜像:镜像发布在 Docker Hub(
dls7788/easy-reader)。如果拉取一直超时,在 Docker 应用的设置里配置一个可用的镜像加速地址再试。 - 一个空闲端口:下面的配置使用
8080,被占用时可以换成其他端口。
第一步:准备两个目录
| 用途 | 建议位置 | 说明 |
|---|---|---|
| 书库 | 已有的小说目录,如 books 共享文件夹 |
放 .txt、.epub、.pdf、.umd 文件,可以有多层子目录 |
| 数据 | 新建,如 docker/easy-reader |
保存数据库、封面、听书缓存。升级、迁移时只要保留这个目录 |
书库目录需要可写:扫描时会把 GBK、BIG5 等编码的 TXT 原地转换为 UTF-8(先写临时文件再替换,不会截断原文件),以后打开不再需要转码。
容器里需要填写的是 NAS 上的完整路径。各系统的路径格式大致如下,以你在文件管理器里看到的为准:
| 系统 | 路径示例 |
|---|---|
| 群晖 DSM | /volume1/books |
| 威联通 QTS / QuTS | /share/books |
| 飞牛 fnOS | /vol1/1000/books |
| Unraid | /mnt/user/books |
| 普通 Linux | /srv/books 等任意目录 |
第二步:编写 docker-compose.yml
把下面的配置中两个路径换成你自己的:
services:
easy-reader:
image: dls7788/easy-reader:latest
container_name: easy-reader
restart: unless-stopped
ports:
- "8080:3000" # 左边是访问端口,可以改;右边不要改
volumes:
- /volume1/books:/app/books # 书库目录
- /volume1/docker/easy-reader:/app/data # 数据目录
# 使用 NAS 本机上的 Ollama 本地模型时需要;不用可以删掉这两行
extra_hosts:
- "host.docker.internal:host-gateway"
各系统填写这份配置的位置:
- 群晖 DSM 7.2 及以上:Container Manager →「项目」→ 新增,选择一个空文件夹作为项目路径,来源选「创建 docker-compose.yml」,粘贴配置。
- 威联通:Container Station →「应用程序」→ 创建,粘贴配置。
- 飞牛 fnOS:Docker 应用中的 Compose 功能,新建项目并粘贴配置。
- Unraid:安装社区插件 Compose Manager 后新建 stack;也可以不用 compose,直接在终端运行下面的
docker run。 - 普通 Linux:把配置保存为
docker-compose.yml,在同一目录执行docker compose up -d。
不方便使用 compose 时,等价的 docker run 命令:
docker run -d --name easy-reader --restart unless-stopped \
-p 8080:3000 \
-v /volume1/books:/app/books \
-v /volume1/docker/easy-reader:/app/data \
--add-host host.docker.internal:host-gateway \
dls7788/easy-reader:latest
第三步:首次登录与导入书籍
- 浏览器打开
http://NAS的IP:8080。 - 用默认管理员账号
admin、密码admin123登录。首次登录必须先修改密码,改完才能使用其他功能。 - 进入「书库」,点右上角的「扫描导入」。扫描在后台进行,书多时需要几分钟,期间可以离开页面。
- 默认是「暂存审核」模式:扫描结果先列出来,确认无误后再写入书库。重复的书、编码无法识别的书会单独标出。
导入后在书架上点开任意一本就能阅读。阅读进度按账号保存,换到手机上打开会回到同一段。
可选设置
- AI 补全书籍信息、前情提要、问书:在「设置 → AI 设置」中填写 DeepSeek 或 MiniMax 的 API Key,或者连接本机的 Ollama(Base URL 填
http://host.docker.internal:11434)。不配置也能正常阅读。 - 听书:不配置时使用浏览器自带的语音朗读;需要更自然的 AI 语音时,在「设置 → AI 设置」的 MiniMax 中开启听书。
- 家人账号:在「设置 → 用户管理」生成邀请码,每个人有自己的书架和进度。
外网访问
在外面也想读书时,推荐用 NAS 自带的反向代理或你已有的 Nginx、Caddy,把一个域名转发到 8080 端口,并加上 HTTPS。经过反向代理访问时,在配置里加上环境变量,登录限流才会按访问者的真实 IP 计算:
environment:
- TRUST_PROXY=1 # 经过一层反向代理
直接把端口暴露到公网时不要设置这个变量。
升级到新版本
数据都在映射的目录里,升级只需拉取新镜像并重建容器:
docker compose pull
docker compose up -d
NAS 的图形界面里一般是对项目执行「拉取镜像」后再「重新部署 / 重新构建」。数据库结构会在启动时自动迁移。每个版本的变化见更新日志。
想固定在某个版本,把 latest 换成具体版本号,如 dls7788/easy-reader:1.0(只接收 1.0.x 的修复更新)。
常见问题
打开页面显示无法访问:确认容器状态为运行中;8080 是否被其他服务占用(换一个端口后重新部署);NAS 防火墙是否放行了该端口。
扫描后书库是空的:多半是书库路径映射错了。确认 compose 里冒号左边是 NAS 上的真实路径,右边是 /app/books,并且书文件就在这个目录或其子目录里。
TXT 显示乱码:重新扫描一次,扫描时会自动识别并转换编码。无法识别编码的书会在扫描审核结果中标为乱码,这类文件多半本身已经损坏。
数据怎么备份:备份数据目录(上例中的 /volume1/docker/easy-reader)即可,书库目录按你平时的方式备份。