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

第三步:首次登录与导入书籍

  1. 浏览器打开 http://NAS的IP:8080。
  2. 用默认管理员账号 admin、密码 admin123 登录。首次登录必须先修改密码,改完才能使用其他功能。
  3. 进入「书库」,点右上角的「扫描导入」。扫描在后台进行,书多时需要几分钟,期间可以离开页面。
  4. 默认是「暂存审核」模式:扫描结果先列出来,确认无误后再写入书库。重复的书、编码无法识别的书会单独标出。

导入后在书架上点开任意一本就能阅读。阅读进度按账号保存,换到手机上打开会回到同一段。

可选设置

  • 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)即可,书库目录按你平时的方式备份。

还有问题可以到留言板反馈,或者在 GitHub 提 Issue。

其他教程