简介
分享一下开发的音乐程序,强不强大不知道,功能有些多,如果感觉不错,记得支持下,目前版本稳定,偶尔细节有个bug理解下,后面会修复,值得现体验下,当然有好的建议,我也会悉心接受,感谢的支持!
PS:希望交流是愉快的,为了营造更好的交流环境,请不要把所谓自己的性格和傲娇、情绪的言语,带到这里,影响大家心情。
道理鱼音乐管理平台
自建 NAS 音乐管理与播放系统,提供媒体扫描、元数据补全、**、收藏与队列管理、自动转码等能力,可通过 Docker 或本地环境快速部署。
项目概述
这是一个全栈音乐管理系统,包含后端API服务器和React前端应用。
项目地址
目前仅作为问题建议提交和pc端(完成后我会上传到这个位置)下载使用
https://gitee.com/wangzaifan/daoliyu-music.git
项目结构
backend/
- Node.js/Express API服务器(TypeScript)frontend/
- React前端应用(TypeScript + Vite)media/
- 媒体文件存储playlists/
- 播放列表数据
功能亮点
- 媒体扫描:支持多目录配置,自动解析 ID3 元数据、封面、歌词并写入数据库。
- 智能播放:Web 前端提供队列、收藏、下一首/上一首、音量与进度控制,支持令牌式音频流与 HLS。
- 账号系统:区分管理员与普通用户,支持注册开关、资料修改、密码变更与头像上传。
- 收藏体系:曲目、专辑收藏与歌单管理一应俱全,可直接加入播放器队列。
- 实时通知:内置 WebSocket 网关,后续可扩展扫描与播放的实时反馈。
- 转码缓存:集成 FFmpeg 实时转码,支持自动生成指定码率的缓存文件并在后台统计与清理。
- 插件与元数据:插件清单自动识别目录内 manifest,元数据提供方支持启用、优先级配置与第三方源扩展。
版本更新
- 增加对redis的支持
- 优化网格模式下的排版问题(太小的分辨率1080P以下懒得适配了)
- 增加对当前播放列表内歌曲一键添加歌单
- 增加一键匹配歌手简介
- 至于扩展方面增加了几个匹配机制,感觉可以根据后台自行调试选择。
- 优化界面逻辑
- 修复右侧播放列表因歌曲名称过长导致UI变形
- 增加播放列表显示效果
- 增加快捷收藏按键
- 增加歌曲、艺人、专辑的简单编辑
演示内容
目前已完成
- 目录入库
- 歌单按照目录名入库
- 标签读取和在线匹配机制(建议先使用 音乐标签 给音乐做匹配,大佬的工具,免费好用)
- 多用户机制
- 公开歌单其他用户可见
- 用户收藏机制
- 声音指纹技术(待验证)
- 一键匹配歌手信息
后续工作安排
以下是0.1.3版本的docker compose,增加最新版标签latest,后期更新会有提示。
由于之前一直是预览(已全部清除),这个版本开始基本是稳定下来了,可以长期使用。
首页
专辑列表
系统设置
默认歌单路径(子文件夹为单位,文件夹名为歌单名)
还有很多就不一一截图了,体验版本,个人时间精力有限,有些细节还没那么完美,至少够用了,后期的话,可能会对接或者开发pc端和安卓端。
docker-compose
开发初心是让自己用着舒服,看着顺眼的,功能基本满足。
以下是docker-compose.yml的内容,只注意中文注释的地方,其他都不用修改
services: backend: image: msmkls/daoliyu-backend:latest container_name: daoliyu-backend restart: unless-stopped environment: DATABASE_PROVIDER: "sqlite" DATABASE_URL: "file:/app/data/dev.db" 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: "true" PLUGINS_DIR: "/plugins" 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}" REDIS_URL: "redis://redis:6379/0" LOG_LEVEL: "debug" DEBUG: "true" volumes: # 下面冒号左侧是本地数据库文件夹,右侧是容器内路径,不要改动容器内路径 - ./backend-data:/app/data # 下面冒号左侧是本地数据文件夹,右侧是容器内路径,不要改动容器内路径 - ./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 container_name: daoliyu-frontend restart: unless-stopped depends_on: - backend ports: # 5173是本地访问端口,可以自行修改,8080是容器内端口,不要改动 - "5173:8080" redis: image: redis:7-alpine container_name: daoliyu-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redis_data:/datavolumes: 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 客户端 IDSPOTIFY_CLIENT_ID=""# Spotify 客户端秘密SPOTIFY_CLIENT_SECRET=""
感谢
最后感谢大家的支持,以及几位打赏的网友,感谢支持!
由于支持多用户登录和便于部署,供nas实用为主,严禁未经本人书面允许,从事商业行为。
问题解答
**问:**后端频繁重启,需要重新删除数据重新扫描的问题
答: 随着功能不断的添加,导致开启后端容器时,读取数据库文件的进程并发过多,处于SQLite数据库的限制,SQLite不支持多线程并发读写,所以下一步采取更换更好性能的数据库,届时也会带来解决扫描入库满和开机重启的问题,一并解决掉。
**问:**版本更新了什么
答: 目前没精力去做详细解答(目前重心在pc端,基本完成,自查细节),后期正式版本发布后再去完善
**问:**为什么我要删除重建又要重新扫
**答:**十分抱歉,现在版本只属于功能相对稳定的版本,UI和数据还在修复完善阶段,只要没放出1.0版本,都属于测试阶段,发不出来也是让大家众测,有好的建议我会采纳,相对的,对于个人喜欢来让我改变道理鱼音乐的定位,我也不会去做的。
最后,感谢兄弟们(以及B站的兄弟们)的大力支持和建议提交,后期我会更用心的完善每个功能模块。