简介
分享一下开发的音乐程序,强不强大不知道,功能有些多,如果感觉不错,记得支持下,目前版本稳定,偶尔细节有个bug理解下,后面会修复,值得现体验下,当然有好的建议,我也会悉心接受,感谢的支持!
PS:希望交流是愉快的,为了营造更好的交流环境,请不要把所谓自己的性格和傲娇、情绪的言语,带到这里,影响大家心情。
道理鱼音乐管理平台
自建 NAS 音乐管理与播放系统,提供媒体扫描、元数据补全、**、收藏与队列管理、自动转码等能力,可通过 Docker 或本地环境快速部署。
项目概述
这是一个全栈音乐管理系统,包含后端API服务器和React前端应用。
项目地址
目前仅作为问题建议提交和pc端(完成后我会上传到这个位置)下载使用
https://gitee.com/wangzaifan/daoliyu-music.git
更新内容
0.1.4更新20251020
后端
• 修改SQLite数据库(修复后端重启不支持并发读写的问题,导致后端频繁重启)为PostgreSQL数据库
前端
• 取消艺术家、专辑、歌单、歌曲库的分页
• 增加增量音乐入库
• 修改艺术家、专辑、歌单、歌曲库的UI,
• 修改歌曲库快速加入播放列表
• 添加有声书和音乐视频菜单
• 增加网页端EQ(需要https协议)
注意:这次基本和全新部署差不多,最好清理旧的数据后再部署
项目结构
backend/ - Node.js/Express API服务器(TypeScript)
frontend/ - React前端应用(TypeScript + Vite)
media/ - 媒体文件存储
playlists/ - 播放列表数据
功能亮点
- 媒体扫描:支持多目录配置,自动解析 ID3 元数据、封面、歌词并写入数据库。
- 智能播放:Web 前端提供队列、收藏、下一首/上一首、音量与进度控制,支持令牌式音频流与 HLS。
- 账号系统:区分管理员与普通用户,支持注册开关、资料修改、密码变更与头像上传。
- 收藏体系:曲目、专辑收藏与歌单管理一应俱全,可直接加入播放器队列。
- 实时通知:内置 WebSocket 网关,后续可扩展扫描与播放的实时反馈。
- 转码缓存:集成 FFmpeg 实时转码,支持自动生成指定码率的缓存文件并在后台统计与清理。
- 插件与元数据:插件清单自动识别目录内 manifest,元数据提供方支持启用、优先级配置与第三方源扩展。
版本更新
- 增加对redis的支持
- 优化网格模式下的排版问题(太小的分辨率1080P以下懒得适配了)
- 增加对当前播放列表内歌曲一键添加歌单
- 增加一键匹配歌手简介
- 至于扩展方面增加了几个匹配机制,感觉可以根据后台自行调试选择。
- 优化界面逻辑
- 修复右侧播放列表因歌曲名称过长导致UI变形
- 增加播放列表显示效果
- 增加快捷收藏按键
- 增加歌曲、艺人、专辑的简单编辑
演示内容
目前已完成
- 目录入库
- 歌单按照目录名入库
- 标签读取和在线匹配机制(建议先使用 音乐标签 给音乐做匹配,大佬的工具,免费好用)
- 多用户机制
- 公开歌单其他用户可见
- 用户收藏机制
- 声音指纹技术(待验证)
- 一键匹配歌手信息
后续工作安排
以下是0.1.4版本的docker compose,增加最新版标签latest,后期更新会有提示。
由于之前一直是预览(已全部清除),这个版本开始基本是稳定下来了,可以长期使用。
首页

专辑列表

系统设置

默认歌单路径(子文件夹为单位,文件夹名为歌单名)

还有很多就不一一截图了,体验版本,个人时间精力有限,有些细节还没那么完美,至少够用了,后期的话,可能会对接或者开发pc端和安卓端。
docker-compose
开发初心是让自己用着舒服,看着顺眼的,功能基本满足。
以下是docker-compose.yml的内容,只注意中文注释的地方,其他都不用修改
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"
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
container_name: daoliyu-redis
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: msmkls/daoliyu-backend:latest
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"
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
- ./media:/data/media # 歌曲库
- ./playlists:/data/playlists # 歌单库
- ./plugins:/plugins
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:4000/health"]
interval: 30s
timeout: 5s
retries: 5
frontend:
image: msmkls/daoliyu-frontend:latest
build:
context: ./frontend
dockerfile: Dockerfile
container_name: daoliyu-frontend
restart: unless-stopped
depends_on:
backend:
condition: service_started
ports:
- "5173:8080"
volumes:
postgres_data:
redis_data:
.env
为了安全整洁在docker-compose.yml 同目录下创建文件存储账号等敏感信息的 .env 文件
# 管理员用户显示名称
ADMIN_DISPLAY_NAME="Administrator"
# 管理员用户邮箱
ADMIN_EMAIL="admin@example.com"
# 管理员用户密码 (请务必修改为强密码)
ADMIN_PASSWORD="ChangeMe123"
# AcoustID API 密钥,用于音乐识别
ACOUSTID_API_KEY=""
# Last.fm API 密钥,用于获取音乐元数据
LASTFM_API_KEY=""
# Last.fm API 密钥的秘密
LASTFM_API_SECRET=""
# Spotify Token,用于 Spotify 集成 (如果使用)
SPOTIFY_TOKEN=""
# Spotify 客户端 ID
SPOTIFY_CLIENT_ID=""
# Spotify 客户端秘密
SPOTIFY_CLIENT_SECRET=""
感谢
最后感谢大家的支持,以及几位打赏的网友,感谢支持!
由于支持多用户登录和便于部署,供nas实用为主,严禁未经本人书面允许,从事商业行为。
问题解答
**问:**后端频繁重启,需要重新删除数据重新扫描的问题
答: 已更换数据库
**问:**版本更新了什么
答: 目前没精力去做详细解答(目前重心在pc端,基本完成,自查细节),后期正式版本发布后再去完善
**问:**为什么我要删除重建又要重新扫
**答:**十分抱歉,现在版本只属于功能相对稳定的版本,UI和数据还在修复完善阶段,只要没放出1.0版本,都属于测试阶段,发不出来也是让大家众测,有好的建议我会采纳,相对的,对于个人喜欢来让我改变道理鱼音乐的定位,我也不会去做的。
最后,感谢兄弟们(以及B站的兄弟们)的大力支持和建议提交,后期我会更用心的完善每个功能模块。