音乐和有声读物播放器AudioDock

简介

什么是 AudioDock ?

AudioDock(声仓)是一个基于现代 Web 技术构建的音乐和有声书一体化的本地化播放器,支持桌面端、移动端、Web 端、小程序、以及本地化后端服务。它可以帮助用户在同一平台上管理和播放本地音乐和有声书,并支持多端数据同步。

主要特点

  • 多端支持 :包含移动端、Web 端、桌面端、小程序、电视端
  • 多数据源支持 :支持 embyjellyfinNavidrome 数据源接入
  • 多协议入库 :支持 strmWebDAV 数据源入库
  • 双模式切换:有声书、音乐模式一键无缝切换,记忆不同模式下的播放信息
  • 支持 Docker 部署 :可以通过 Docker 部署服务端和 Web
  • 多用户支持:支持多用户交互联动
  • 设备接力:支持多设备之间无缝切换
  • 元数据解析:支持歌词、封面等信息展示
  • 开源免费:基于个人免费许可证,可修改和分发(商业使用需授权)

应用场景

  • 本地音乐管理 :用户可以将本地音乐和有声书文件集中管理,通过 Web 界面随时访问
  • 多设备同步:在电脑、手机、平板等设备上同步播放进度和收藏记录
  • 家庭共享:支持多用户功能,家庭成员可以各自拥有独立的播放记录和收藏
  • 数据源聚合 :支持接入 embyjellyfinNavidrome 等媒体服务器,统一播放体验

总的来说,AudioDock 是一个功能完善的本地媒体播放解决方案,特别适合 NAS 用户构建自己的私有音乐和有声书库。

安装

在群晖上以 Docker 方式安装。

该项目包含 API 后端和 Web 前端两个服务,需要使用 docker-compose 进行部署

本文写作时, 两个服务的 latest 版本对应为 1.0.84

创建目录

需要为项目先创建工作目录

bash 复制代码
# 新建文件夹 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 复制到,群晖中项目的根目录

nginx 复制代码
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 文件:

yaml 复制代码
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 登录到您的群晖,执行下面的命令:

bash 复制代码
# 将 docker-compose.yml 和 nginx.conf 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中访问 http://<群晖IP>:9958 即可进入 Web 界面

首次使用需要设置数据类型。因为后端用的 AudioDock,所以数据源用第一个

接下来后端服务地址设置

  • 内网地址: /api
  • 外网地址:http://192.168.0.197:8858

第一次要注册

登录成功后的主界面

导入了测试用的 mp3

开始只识别到一张专辑

把目录名改为英文就好了

只是封面识别看起来还不是很准

注意事项

  1. 端口冲突 :确保本地端口 88589958 未被其他服务占用
  2. 文件路径 :请根据实际 NAS 路径修改 docker-compose.yml 中的卷挂载路径
  3. JWT_SECRET:生产环境建议使用更复杂的密钥,并妥善保管
  4. 数据备份 :定期备份 ./data 目录中的数据库文件
  5. WebDAV 配置 :可选配置项,用于从远程 WebDAV 服务器同步媒体文件
  6. 中文目录:建议媒体文件目录使用英文命名,避免编码问题

参考文档

NasDock/AudioDock: 声仓(AudioDock)一款音乐和有声书一体的本地化播放器,支持多端同步

地址:https://github.com/NasDock/AudioDock

相关推荐
gordon~93 小时前
Windows 11 wsl 中安装的Ubuntu-24.04 中装docker
windows·ubuntu·docker
进击切图仔3 小时前
Docker + tmux + ROS:持久化的机器人开发环境
docker·容器·机器人
春日见6 小时前
E2E自驾规控30讲:环境搭建
开发语言·驱动开发·matlab·docker·计算机外设
.生产的驴7 小时前
1Panel实战|SpringColud微服务部署生产环境一键部署Docker+Nacos+MySQL 数据定时备份 控制台 安全高效易维护
服务器·后端·mysql·spring cloud·docker·微服务·信息可视化
Exquisite.8 小时前
Docker容器技术
docker·容器·eureka
ai产品老杨8 小时前
异构计算时代的架构突围:基于 Docker 的 AI 视频平台如何实现 X86/ARM 与 GPU/NPU 全兼容(源码交付)
人工智能·docker·架构
Riemann~~8 小时前
dockerfile解析
docker·dockerfile
Sephiroth.Ma9 小时前
Mac 提示“Docker 已损坏,无法打开”?我这样排查后 10 分钟修好
macos·docker·容器
是店小二呀10 小时前
Docker部署EasyNode+内网穿透:轻松实现服务器远程管理
服务器·docker·容器