通勤听书不想来回切 App?用 Audiobookshelf 搭一个自己的有声书库
前言
我用极空间一段时间以后,慢慢发现它最有意思的地方并不是"还能多存多少文件",而是那些原本只是躺在硬盘里的内容,能不能真正变成每天会用到的服务。对我来说,有声书就是一个很典型的例子:通勤时想接着听,做饭时想随手放一段,睡前又想从上次的位置继续,如果音频只是按文件夹堆在 NAS 里,实际使用体验和普通硬盘没太大区别。真正方便的是,打开一个页面就能看到封面、分类、书籍信息和播放入口。尤其当收藏越来越多以后,"文件还在不在"已经不是问题,"下一本从哪里找、上次听到哪"才开始影响日常使用。与其不断换播放器,我更想先把自己的音频整理成一个长期能用的书库。
这次我把 Audiobookshelf 部署到极空间上,先通过 SSH 和 Docker Compose 建好 audiobooks、podcasts、config、metadata 目录,再把 Web 服务映射到宿主机 13378 端口。随后完成账号设置、中文界面、创建图书媒体库、网页上传本地资源、填写书籍信息并开始播放。局域网这一套用顺以后,再安装 cpolar,把 13378 页面提供到公网,先验证随机地址,最后配置固定二级子域名 audio。我更看重的是"书库能不能整理清楚、打开后能不能马上接着听",而不是把 NAS 包装成什么万能娱乐中心。

1. Audiobookshelf 适合放在 NAS 上做什么?
Audiobookshelf 是一套面向有声书和播客的自托管管理工具。
它和直接把 MP3、M4B 文件扔进 NAS 文件夹最大的区别,是多了一层"媒体库"逻辑:书籍不再只是文件名,而是可以配合封面、作者、分类、播放进度等信息集中管理。
当前介绍里提到的能力包括:
- 管理有声书和播客;
- 多设备播放进度同步;
- 封面和分类管理;
- 播客自动更新;
- 浏览器访问。
这些能力很适合长期整理自己的音频内容。
不过这次真正操作到的是:
创建图书媒体库 → 上传本地资源 → 填写信息 → 书架显示 → 编辑 → 播放。
播客库、自动更新以及多设备续听属于项目能力,这次并没有逐项继续演示,所以不把它们都写成已经实测完成。
对我来说,Audiobookshelf 最实际的价值是:让 NAS 里的音频从"存着"变成"能按书库方式使用"。
2. 先通过 SSH 进入极空间
先在极空间里开启 SSH 服务。
然后通过 Windows PowerShell 或 Mac Terminal 登录:
shell
ssh root@IP
如果还没有配置 SSH,可以先按设备设置开启。

后面的目录准备和 Docker Compose 部署都需要在终端里完成。
3. 检查 Docker 是否已经开启
执行:
shell
docker -v
systemctl status -v

当前命令里同时出现了:
docker -vsystemctl status -v
这里按现有技术步骤保留。
确认 Docker 环境可以使用以后,再继续准备 Audiobookshelf 目录。
4. 创建 Audiobookshelf 所需目录
当前操作是在 Docker 目录下先创建:
audiobooksshelf
然后在这个目录里继续创建:
audiobookspodcastsconfigmetadata

这几个目录分别对应后面的有声书、播客、配置和元数据。
目录结构先准备好以后,再创建 Compose 文件会更清楚。
5. 创建 docker-compose.yml
把当前配置保存为:
docker-compose.yml
内容如下:
shell
version: "3.7"
services:
audiobookshelf:
image: gcr.io/advp lyr/audio bookshelf:latest
container_name: audiobookshelf
ports:
- "13378:80"
volumes:
- ./audiobooks:/audiobooks
- ./podcasts:/podcasts
- ./config:/config
- ./metadata:/metadata
restart: unless-stopped
这里几个关键参数是:
- 服务名:
audiobookshelf - 容器名:
audiobookshelf - 宿主机端口:
13378 - 容器端口:
80 - 有声书目录:
./audiobooks:/audiobooks - 播客目录:
./podcasts:/podcasts - 配置目录:
./config:/config - 元数据目录:
./metadata:/metadata - 重启策略:
unless-stopped
这里还要特别看一眼镜像字段。
当前配置中写的是:
gcr.io/advp lyr/audio bookshelf:latest
这个字符串中包含空格,按当前技术内容原样保留。真正照着部署时,应先核对自己实际使用的镜像地址是否与当前镜像源一致,不要直接把这处字符串当成已经校验过的镜像名。
6. 启动 Audiobookshelf
执行:
shell
docker-compose up -d

部署完成以后,在浏览器访问:
http://极空间IP:13378

页面能够正常打开以后,Audiobookshelf 的本地 Web 服务就已经跑起来。
这一层先验证的是:
极空间 Docker → Audiobookshelf → 13378:80 → 浏览器访问。
7. 第一次登录先把账号和语言处理好
第一次进入以后,先设置登录密码。

然后登录。

登录成功以后进入主页面。

接着把界面语言修改为中文。

这些基础设置完成以后,再开始建媒体库。
8. 创建自己的有声书媒体库
当前示例创建的是图书媒体库。
配置为:
- 媒体类型:
图书 - 媒体库名称:自定义
- 文件夹:
audiobooks

这里最重要的是把媒体库真正指向前面准备好的:
audiobooks
目录。
这样后面上传和整理的内容才能进入同一个书库逻辑中。
9. 上传一本自己的有声书
当前示例使用网页端单独上传本地资源。

上传以后继续填写基础信息。

这些信息可以帮助后面的书架展示更清楚。
上传完成后,书籍会出现在书架中。

到这里,Audiobookshelf 已经不只是一个文件目录,而是开始以"书"的方式组织音频内容。
10. 书籍信息还可以继续编辑
进入对应书籍以后,可以继续编辑。

例如修改基本信息。

然后开始播放。
当前操作已经跑通了:
上传 → 书架显示 → 编辑 → 播放
这一条最核心的使用链。
如果只是想把 NAS 里的有声书整理成一个浏览器书库,到这里已经能感受到它和普通文件夹播放的区别。
11. 局域网能听以后,再考虑外网访问
前面已经可以通过:
http://极空间IP:13378
在局域网访问 Audiobookshelf。
如果只在家里听,到这里已经够用。
但通勤、出差或者手机不在家里 Wi‑Fi 下时,局域网地址就不能直接使用。
这时候再增加公网入口。
cpolar 在这里的职责很明确:
只把极空间上的 Audiobookshelf
13378Web 页面提供到公网。
有声书文件、媒体库、书籍信息和播放逻辑仍然由 Audiobookshelf 自己负责。
12. 在极空间安装 cpolar
执行当前安装命令:
shell
sudo curl https://get.cpolar.sh | sh

安装完成以后检查服务状态:
shell
sudo systemctl status cpolar

服务正常以后,通过主机 IP + 9200 打开 cpolar Web 管理页面。
当前页面同时写到:
http://ip:9200
以及链接目标:
http://localhost:9200/
实际访问时,以当前设备真正能够打开的地址为准。

13. 给 Audiobookshelf 创建随机公网地址
进入【隧道管理 → 创建隧道】。
当前配置为:
- 隧道名称:
audio - 协议:
http - 本地地址:
13378 - 域名类型:随机域名
- 地区:
China Top

创建成功以后,进入在线隧道列表查看生成的公网地址。

从其他电脑或者移动设备访问。

页面能够正常打开。
这一层真正验证的是:
Audiobookshelf 13378 → cpolar 随机公网地址 → 外部浏览器。
14. 长期听书再配置固定二级子域名
随机地址适合先确认公网访问是否正常。
如果 Audiobookshelf 准备长期从手机、平板或外部电脑访问,固定入口会更方便。
进入预留页面。

选择保留二级子域名。
当前记录为:
- 地区:
china Top - 二级子域名:
audio

然后回到【隧道管理 → 隧道列表】,找到对应隧道并编辑。

修改为:
- 域名类型:二级子域名
Sub Domain:填写已经保留的二级子域名- 地区:
China Top
点击更新。

更新以后,在线隧道列表里的随机公网地址会切换成固定二级子域名形式。

最后再从任意设备浏览器访问。

页面能够正常打开。
这里实际访问的是 Audiobookshelf 页面,而不是极空间系统首页。
总结
Audiobookshelf 对我来说最有价值的地方,不是"让 NAS 变成万能影音中心",而是把原本只是躺在文件夹里的有声书真正整理成了一个能长期使用的书库。
这次实际跑通的主线是:
极空间 SSH → Docker → audiobooksshelf 目录 → audiobooks / podcasts / config / metadata → Docker Compose → 13378:80 → 设置账号 → 中文界面 → 创建图书媒体库 → 上传资源 → 编辑信息 → 播放 → cpolar → 13378 → 随机公网 → 固定二级子域名 audio。
几个边界也需要分清:
- 这次真正实测的是图书媒体库、单独上传、书架展示、编辑和播放;
- 播客管理、多设备进度同步、自动更新等属于项目能力,这次没有逐项继续验证;
- 当前 Compose 的镜像字符串按现有记录保留为
gcr.io/advp lyr/audio bookshelf:latest,实际部署时应核对; - cpolar 只负责公网 Web 入口,不参与 Audiobookshelf 的媒体管理和播放逻辑;
- 固定二级子域名解决的是长期访问入口问题,不会改变 Audiobookshelf 自己的账号和媒体库逻辑。
如果极空间里已经存了不少有声书,与其继续在文件夹里一层层翻,我更愿意先把最常听的内容放进 Audiobookshelf。真正好用的地方,不是"从此彻底摆脱所有平台",而是自己的音频终于有了一个固定、清楚、随手能打开的入口。