简介
什么是 AudioDock ?
AudioDock(声仓)是一个基于现代 Web 技术构建的音乐和有声书一体化的本地化播放器,支持桌面端、移动端、Web 端、小程序、以及本地化后端服务。它可以帮助用户在同一平台上管理和播放本地音乐和有声书,并支持多端数据同步。
如果你正在寻找一个能统一管理本地媒体资源的解决方案,那么这个项目或许值得一试。接下来,我们将在云栈社区分享一下如何在群晖NAS上通过 Docker Compose 来部署它。
主要特点
- 多端支持:包含移动端、
Web 端、桌面端、小程序、电视端
- 多数据源支持:支持
emby、jellyfin、Navidrome 数据源接入
- 多协议入库:支持
strm、WebDAV 数据源入库
- 双模式切换:有声书、音乐模式一键无缝切换,记忆不同模式下的播放信息
- 支持 Docker 部署:可以通过
Docker 部署服务端和 Web 端
- 多用户支持:支持多用户交互联动
- 设备接力:支持多设备之间无缝切换
- 元数据解析:支持歌词、封面等信息展示
- 开源免费:基于个人免费许可证,可修改和分发(商业使用需授权)
应用场景
- 本地音乐管理:用户可以将本地音乐和有声书文件集中管理,通过
Web 界面随时访问
- 多设备同步:在电脑、手机、平板等设备上同步播放进度和收藏记录
- 家庭共享:支持多用户功能,家庭成员可以各自拥有独立的播放记录和收藏
- 数据源聚合:支持接入
emby、jellyfin、Navidrome 等媒体服务器,统一播放体验

总的来说,AudioDock 是一个功能完善的本地媒体播放解决方案,特别适合 NAS 用户构建自己的私有音乐和有声书库。
安装
本文介绍在群晖上通过 Docker 方式安装 AudioDock。
该项目包含 API 后端和 Web 前端两个服务,需要使用 docker-compose 进行部署。
本文写作时, 两个服务的 latest 版本对应为 1.0.84;
创建目录
首先,我们需要为项目创建工作目录。
# 新建文件夹 audiodock 和 子目录
mkdir -p /volume1/docker/audiodock/{audio,covers,data,music}
# 进入 audiodock 目录
cd /volume1/docker/audiodock
目录结构
| 文件夹 |
说明 |
audio |
存放有声书文件 |
music |
存放音乐文件 |
covers |
存放封面缓存 |
data |
存放数据库文件 |
nginx.conf |
Nginx 配置文件(需手动复制) |
nginx.conf
该文件用于 Nginx 配置,主要用于确保前端能正常访问后端服务,原则上不需要做任何修改。你可以从 https://github.com/NasDock/AudioDock/blob/master/nginx.conf 获取。
只需将 nginx.conf 文件复制到群晖中项目的根目录(即 /volume1/docker/audiodock/)即可。
worker_processes 1;
events { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 9958;
server_name localhost;
# 1. 静态文件 (前端 SPA)
location / {
root /usr/share/nginx/html;
index index.html index.htm;
# 针对 index.html: 永远不缓存,确保用户总是获取最新版本
if ($request_filename ~* ^.*?\.(html|htm)$) {
add_header Cache-Control "no-store, no-cache, must-revalidate";
}
# 针对静态资源 (JS/CSS/Images): 长期缓存,因为文件名带有 hash
if ($request_filename ~* ^.*?\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$) {
add_header Cache-Control "public, max-age=31536000, immutable";
}
try_files $uri $uri/ /index.html;
}
# 2. 可选代理:仅在后端地址配置时使用
location /api/ {
# 这里假设前端配置的后端地址在环境变量 BACKEND_URL
# 需要在构建或运行容器时替换
set $backend "http://api:3000";
# 去掉 /api 前缀
rewrite ^/api/(.*)$ /$1 break;
proxy_pass $backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
docker-compose 安装
接下来,将下面的内容保存为 docker-compose.yml 文件,同样放在 /volume1/docker/audiodock/ 目录下。
version: "3.8"
services:
# 1. API 后端服务 (Node.js)
api:
image: mmdctjj/audiodock-api:latest
container_name: audiodock-api
restart: unless-stopped
# 容器内部端口 (3000) 默认对内部网络开放,无需 ports 字段映射到宿主机
# 如果要直接测试 API,可以加上 ports: - "3000:3000"
ports:
- "8858:3000"
environment:
- AUDIO_BOOK_DIR=/audio
- MUSIC_BASE_DIR=/music
- CACHE_DIR=/covers
- DATABASE_URL=file:/data/dev.db
- JWT_SECRET=96d3a8befe2e2fbcc12341a2403b6ce448631c946c7019b076515528a79ca5a09 # JWT 密钥
# - STRM_ADDRESS=http://192.168.0.197:5244 # Strm 服务地址,如果不需要可以不配置
# - WEBDAV_MUSIC_URL=http://192.168.0.197:5005/音乐 # WebDAV 服务地址,如果不需要可以不配置
# - WEBDAV_AUDIOBOOK_URL=http://192.168.0.197:5005/有声书 # WebDAV 服务地址,如果不需要可以不配置
# - WEBDAV_USER=admin # WebDAV 用户名
# - WEBDAV_PASSWORD=123456 # WebDAV 密码
# 挂载数据文件和缓存,使用 Docker 命名卷更安全
volumes:
- ./audio:/audio
- ./music:/music
- ./covers:/covers
- ./data:/data
# 2. Web 前端服务 (Nginx) - 用于托管静态文件和反向代理
web:
image: mmdctjj/audiodock-web:latest
container_name: audiodock-web
restart: unless-stopped
ports:
- "9958:9958" # <--- 将 Web 服务的 80 端口映射到宿主机的 8080 端口
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- api # 确保 API 容器先启动
环境变量说明
| 变量 |
值 |
说明 |
AUDIO_BOOK_DIR |
/audio |
有声书目录 |
MUSIC_BASE_DIR |
/music |
音乐目录 |
CACHE_DIR |
/covers |
封面缓存目录 |
DATABASE_URL |
file:/data/dev.db |
数据库路径 |
JWT_SECRET |
96d3a8b... |
JWT 密钥,用于用户认证 |
可选环境变量
以下环境变量可根据需要配置:
| 变量 |
值 |
说明 |
STRM_ADDRESS |
http://IP:端口 |
Strm 服务地址 |
WEBDAV_MUSIC_URL |
http://IP:端口/音乐 |
WebDAV 音乐服务地址 |
WEBDAV_AUDIOBOOK_URL |
http://IP:端口/有声书 |
WebDAV 有声书服务地址 |
WEBDAV_USER |
用户名 |
WebDAV 用户名 |
WEBDAV_PASSWORD |
密码 |
WebDAV 密码 |
一切准备就绪后,通过 SSH 登录到你的群晖,执行下面的命令启动服务:
# 将 docker-compose.yml 和 nginx.conf 放入当前目录
# 一键启动
docker-compose up -d

运行
在浏览器中访问 http://<群晖IP>:9958 即可进入 Web 界面。
首次使用需要设置数据源类型。因为我们部署的后端是 AudioDock 官方服务端,所以直接选择第一个 “AudioDock” 即可。

接下来需要设置后端服务地址:
- 内网地址:
/api
- 外网地址:
http://192.168.0.197:8858 (请替换为你自己群晖的IP地址和映射的端口)

因为是首次使用,你需要先注册一个账号。

登录成功后,你就能看到 AudioDock 的主界面了。

为了测试,我们往之前创建的 music 目录里导入了一些 mp3 文件。

最初,系统可能只识别到一张专辑。

将包含中文的目录名改为英文后,识别就正常了。

不过,目前封面的自动识别可能还不是很精准,但这不影响基本的播放功能。

注意事项
- 端口冲突:确保本地端口
8858 和 9958 未被其他服务占用。
- 文件路径:请根据你实际的
NAS 路径修改 docker-compose.yml 中的卷挂载路径。
- JWT_SECRET:生产环境建议使用更复杂的密钥,并妥善保管。文中示例密钥仅用于演示。
- 数据备份:定期备份
./data 目录中的数据库文件。
- WebDAV 配置:这是可选配置项,用于从远程
WebDAV 服务器同步媒体文件,如无需要可不配置。
- 中文目录:建议媒体文件目录使用英文命名,以避免可能出现的编码或识别问题。这也是一个在运维/DevOps实践中常见的最佳做法。
参考文档
NasDock/AudioDock: 声仓(AudioDock)一款音乐和有声书一体的本地化播放器,支持多端同步
地址:https://github.com/NasDock/AudioDock