极空间NAS部署『道理鱼』,音乐/MV/有声书全栈管理神器
哈喽小伙伴们好,我是Stark-C~
最近NAS圈有一个新项目非常火,这个项目厉害的地方就在于它是一个全栈音乐管理系统,支持媒体扫描、元数据补全、收藏与队列管理、自动转码等功能。它就是@汪仔饭大佬开发的一个叫做『道理鱼音乐管理』的项目。
该项目支持 Docker 部署,可能因为部署的代码有些复杂,已有几位极空间的小伙伴没有部署成功并向我求助。所以,今天的这篇教程咱们就在极空间NAS上来搞定它。
走起!
关于道理鱼音乐

🔺道理鱼音乐是一套专为NAS打造的本地音乐/MV/有声书管理与播放系统,集自动刮削、元数据补全、无损转码、多用户管理于一体,可以让我们的本地音乐库拥有媲美流媒体的体验。
它的功能亮点有(作者原话):
媒体扫描:支持多目录配置,自动解析 ID3 元数据、封面、歌词并写入数据库。
智能播放:Web 前端提供队列、收藏、下一首/上一首、音量与进度控制,支持令牌式音频流与 HLS。
账号系统:区分管理员与普通用户,支持注册开关、资料修改、密码变更与头像上传。
收藏体系:曲目、专辑收藏与歌单管理一应俱全,可直接加入播放器队列。
实时通知:内置 WebSocket 网关,后续可扩展扫描与播放的实时反馈。
转码缓存:集成 FFmpeg 实时转码,支持自动生成指定码率的缓存文件并在后台统计与清理。
有声书:有声书按目录入库支持绝大部分已刮削
音乐视频:音乐视频入库点播
插件与元数据:插件清单自动识别目录内 manifest,元数据提供方支持启用、优先级配置与第三方源扩展。
道理鱼音乐部署
部署前的说明:

🔺既然道理鱼是主打本地音乐/MV/有声书管理与播放的,所以开始之前咱们先把NAS中的音乐/MV/有声书目录整理在一起,因为在部署的时候需要将目录的路径映射过去,项目才能识别并管理。

🔺并且音乐目录还分两个。一个是我们收集的这种零散音乐,相当于音乐大合集。

🔺还有个就是相当于我们收集的音乐歌单,也就是音乐专辑。道理鱼音乐会分别对这两种目录进行管理与播放。
开始部署:

🔺打开极空间NAS的文件管理器,在Docker目录下新建一个“daoliyu”的文件夹,然后在它下面新建plugins,storage,redis,postgres总共四个子文件夹。

🔺然后点击极空间NAS的“Docker”应用,点击【Compose】 > 【新增项目】。

🔺在新增项目页面自定义项目名称,输入以下 Docker Compose 配置信息后点“创建”按钮:
services:
postgres:
image: postgres:16-alpine
container_name: daoliyu-postgres
restart: unless-stopped
environment:
POSTGRES_DB: "daoliyu"
POSTGRES_USER: "daoliyu"
POSTGRES_PASSWORD: "daoliyupassword"
PGDATA: "/var/lib/postgresql/data/pgdata"
command:
- "postgres"
- "-c"
- "max_connections=200"
- "-c"
- "shared_buffers=256MB"
- "-c"
- "work_mem=32MB"
- "-c"
- "maintenance_work_mem=256MB"
- "-c"
- "checkpoint_completion_target=0.9"
- "-c"
- "wal_buffers=16MB"
- "-c"
- "port=5433"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U daoliyu -d daoliyu -p 5433"]
interval: 10s
timeout: 5s
retries: 6
start_period: 30s
ports:
- "5433:5433" # postgres数据库端口,冒号前面请勿本地冲突
volumes:
- ./docker-data/postgres:/var/lib/postgresql/data # 冒号前面映射postgres子文件夹本地路径
redis:
image: redis:7-alpine
container_name: daoliyu-redis
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes"]
volumes:
- ./docker-data/redis:/data # 冒号前面映射redis子文件夹本地路径
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: msmkls/daoliyu-backend:0.2.0
build:
context: ./backend
dockerfile: Dockerfile
container_name: daoliyu-backend
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
environment:
NODE_ENV: production
DATABASE_URL: "postgresql://daoliyu:daoliyupassword@postgres:5433/daoliyu?schema=public&connection_limit=25&pool_timeout=10&statement_timeout=60000&idle_in_transaction_session_timeout=60000"
APP_PORT: 4000
ADMIN_DISPLAY_NAME: "${ADMIN_DISPLAY_NAME}"
ADMIN_EMAIL: "${ADMIN_EMAIL}"
ADMIN_PASSWORD: "${ADMIN_PASSWORD}"
LIBRARY_ROOT: "/data/media"
AUDIOBOOK_LIBRARY_ROOT: "/data/audiobooks"
VIDEO_LIBRARY_ROOT: "/data/music-videos"
VIDEO_TRANSCODE_CACHE: "/app/storage/transcoded/videos"
VIDEO_THUMBNAIL_CACHE: "/app/storage/thumbnails/videos"
PLAYLISTS_IMPORT_ROOT: "/data/playlists"
REGISTRATION_OPEN: "${REGISTRATION_OPEN:-true}"
PLUGINS_DIR: "/plugins"
REDIS_URL: "redis://redis:6379/0"
ACOUSTID_API_KEY: "${ACOUSTID_API_KEY}"
LASTFM_API_KEY: "${LASTFM_API_KEY}"
LASTFM_API_SECRET: "${LASTFM_API_SECRET}"
SPOTIFY_TOKEN: "${SPOTIFY_TOKEN}"
SPOTIFY_CLIENT_ID: "${SPOTIFY_CLIENT_ID}"
SPOTIFY_CLIENT_SECRET: "${SPOTIFY_CLIENT_SECRET}"
LOG_LEVEL: "${LOG_LEVEL:-info}"
DEBUG: "${DEBUG:-true}"
volumes:
- ./backend-storage:/app/storage # 冒号前面映射storage子文件夹本地路径
- ./media:/data/media # 冒号前面映射本地歌曲目录
- ./audiobooks:/data/audiobooks # 冒号前面映射本地有声书目录
- ./music-videos:/data/music-videos # 冒号前面映射本地音乐视频目录(MV)
- ./playlists:/data/playlists # 冒号前面映射本地歌单目录(音乐专辑)
- ./plugins:/plugins # 冒号前面映射plugins子文件夹本地路径
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:4000/health"]
interval: 30s
timeout: 5s
retries: 5
frontend:
image: msmkls/daoliyu-frontend:0.2.0
build:
context: ./frontend
dockerfile: Dockerfile
container_name: daoliyu-frontend
restart: unless-stopped
depends_on:
backend:
condition: service_healthy
ports:
- "5173:8080" # 项目Web页面打开端口,冒号前面请勿本地冲突
以上代码确实很多,不过需要修改的地方我都用中文注释标注出来了,其它的直接保持默认即可。如果说你没有音乐专辑,MV,或者有声书,直接把volumes下面对应的容器映射给注释掉即可。
镜像的拉取需要自行解决网络问题,粘贴到自己的NAS这边之前建议使用AI工具优化一下,以防止格式问题造成的部署失败。
顺便说一下,volumes映射的路径需要在当前界面使用“查询路径”查找到真实路径直接复制粘贴就可以了,个人觉得极空间这里对于新手小白已经是相当友好的操作了。

🔺部署好的项目总共有4个容器运行。项目第一次启动运行数据库需要的时间较久,大概需要三分钟左右,小伙伴们耐心等待即可。
道理鱼音乐体验

🔺道理鱼的打开方式并没有什么特别,浏览器输入【IP:端口号】,或者直接在容器后面点“远程连接”即可。

🔺首次使用需要创建一个管理员账号,这里没啥要求,大家随意创建一个即可。

🔺项目主页看上去还是很专业的,不过它默认并没有添加我们映射的媒体库。点击右上角的用户图像,选择“多媒体库”。

🔺然后点击歌曲歌单后面的“全量扫描”。

🔺如果说你部署的时候映射了MV和有声书,同样需要点击“全量扫描”。

🔺这个时候在打开首页,就可以显示正常的展示效果了。非常牛的是,和咱们搭建影视库一样,所有音乐信息它都给自动刮削好了。

🔺艺人的展示界面,想听谁的歌直接点进去就都是他的歌。

🔺专辑展示界面,我映射的所有专辑他都准确无误的展示出来了,还是很强大的。

🔺然后是歌曲的展示界面,显示的是所有映射过来的歌曲,包括歌单(专辑)中的内容。

🔺播放也是完全OK,并且还有歌词展示。

🔺有声书也是完全没有问题,并且展示的列表也很规整,开箱既听,非常给力。

🔺最后是MV(音乐视频),看起来确实是赏心悦目,韩流的暖意我们已经感受到了!

🔺播放也是非常可爱,哦,说错了,非常流畅。

🔺如果碰到刮削有误也可以在媒体库设置里面手动“修正”,非常人性化。
功能还有很多,建议有想法的小伙伴可以自行挖掘。
外网移动端

🔺道理鱼更绝的是支持外网移动端使用,外网首先肯定是要搞定外网的连接方式。有公网IP的可以将部署的道理鱼音乐使用Lucky做个反向代理(比如说我为大家演示的就是这种),没公网IP的自己想办法搞下内网穿透什么的。

🔺而移动端直接推荐“箭头音乐”APP,原生支持道理鱼音乐,连接起来也很方便,服务器地址直接填写Lucky的反向代理链接地址,然后输入注册的邮箱和密码就可以直接连接了。

🔺不得不说,“箭头音乐”APP也是非常的赞,界面好看,排版舒服,功能还全面,甚至都给到了驾驶模式!和道理鱼音乐简直就是完美组合,双璧生辉!
最后
就目前来看,道理鱼音乐确实算是NAS用户生态里当前最值得关注的Super Star。从整理、刮削,到播放,以及专属的移动APP,道理鱼音乐也确实为NAS用户带来了媲美流媒体的体验。并且这个项目作者更新和优化的热情也很高,未来的价值也极具潜力,强烈大家各位NAS小伙伴深入部署体验!
好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家

不到史低不出手
校验提示文案
伢子
校验提示文案
昆山土狼
校验提示文案
alex0772
校验提示文案
FuSoo
校验提示文案
踏浪逐风
校验提示文案
长腿老爸
校验提示文案
正月的你
校验提示文案
拒绝消费主义呀
校验提示文案
这里有莫桑比克
校验提示文案
Anshion
校验提示文案
没有摩托车的摩托车手
校验提示文案
西木头008
校验提示文案
CC的世界
校验提示文案
jhybest
校验提示文案
Elvasu
校验提示文案
小豆紫
校验提示文案
今天爱吃鱼
校验提示文案
alex0772
校验提示文案
小豆紫
校验提示文案
Elvasu
校验提示文案
jhybest
校验提示文案
CC的世界
校验提示文案
西木头008
校验提示文案
今天爱吃鱼
校验提示文案
没有摩托车的摩托车手
校验提示文案
Anshion
校验提示文案
这里有莫桑比克
校验提示文案
拒绝消费主义呀
校验提示文案
昆山土狼
校验提示文案
正月的你
校验提示文案
伢子
校验提示文案
长腿老爸
校验提示文案
FuSoo
校验提示文案
踏浪逐风
校验提示文案
不到史低不出手
校验提示文案