简介
分享一下开发的音乐程序,功能有些多,目前版本稳定,偶尔细节有个bug理解下,后面会修复,如果出现问题请删除重建就行
,值得现体验下,当然有,
为了营造更好的交流环境,请不要把所谓自己的性格和傲娇、情绪的言语,带到这里,影响大家心情。
道理鱼音乐管理平台
自建 NAS 音乐管理与播放系统,提供媒体扫描、元数据补全、**、收藏与队列管理、自动转码等能力,可通过 Docker 或本地环境快速部署。
项目概述
这是一个全栈音乐管理系统,包含后端API服务器和React前端应用。
更新内容
0.1.7更新20251204
针对共享元数据进行了对接,(服务器性能不高,人多歌曲多的可能会出问题,仅供查考使用,如果有能力的可以考虑支持一波,感谢)
• 修复首页概览卡片显示和操作逻辑
• 修复推荐显示方式以及封面不显示的问题
• 修复手机页面的变形问题,播放器显示不全的问题
• 升级后在后端终端执行
npm run prisma:migrate重新针对后端和目录映射更改,重新梳理之前,SQLite数据库转PostgreSQL数据库,历史遗留的脏数据,针对后期迭代升级做了一些优化。
依然建议删除后,重新部署0.1.6版本
• 增加首次部署创建管理员页面
• 增加共建元信息服务器
• 增加共建推荐歌单接口
• 增加播放排行榜
• 移除之前元信息板块
0.1.5更新20251108
如出现后端重启,直接删除原docker compose项目和容器后,重新选择docker compose,重新构建
• 修复ui超出问题
0.1.4更新20251020
• 取消艺术家、专辑、歌单、歌曲库的分页
• 增加增量音乐入库
• 修改艺术家、专辑、歌单、歌曲库的UI,
• 修改歌曲库快速加入播放列表
• 添加有声书和音乐视频菜单
• 增加网页端EQ(需要https协议才可以启用,一般在外网开启)
注意:这次基本和全新部署差不多,最好清理旧的数据后再部署
项目结构
• backend/ - Node.js/Express API服务器(TypeScript)
• frontend/ - React前端应用(TypeScript + Vite)
• media/ - 媒体文件存储
• playlists/ - 播放列表数据
• /app/storage - 后端数据
• /data/audiobooks - 有声书
• /data/music-videos - 音乐视频
功能亮点
• 媒体扫描:支持多目录配置,自动解析 ID3 元数据、封面、歌词并写入数据库。
• 智能播放:Web 前端提供队列、收藏、下一首/上一首、音量与进度控制,支持令牌式音频流与 HLS。
• 账号系统:区分管理员与普通用户,支持注册开关、资料修改、密码变更与头像上传。
• 收藏体系:曲目、专辑收藏与歌单管理一应俱全,可直接加入播放器队列。
• 实时通知:内置 WebSocket 网关,后续可扩展扫描与播放的实时反馈。
• 转码缓存:集成 FFmpeg 实时转码,支持自动生成指定码率的缓存文件并在后台统计与清理。
• 有声书:有声书按目录入库支持绝大部分已刮削
• 音乐视频:音乐视频入库点播
• 插件与元数据:插件清单自动识别目录内 manifest,元数据提供方支持启用、优先级配置与第三方源扩展。
演示内容
目前已完成
• 目录入库
• 歌单按照目录名入库
• 标签读取和在线匹配机制(建议先使用 音乐标签 给音乐做匹配,大佬的工具,免费好用)
• 多用户机制
• 公开歌单其他用户可见
• 用户收藏机制
• 一键匹配歌手信息
• 共享元服务器开发中
• 有声书入库(元信息待匹配)
• 音乐视频入库
后续工作安排
PC端(即将完成)
安卓客户,只能最后做适配,毕竟独立开发个人能力有限。
首页

专辑列表

艺人页

歌曲库

系统设置

EQ均衡器(需要开启https,也就是域名映射后才能开启)

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

开发初心是让自己用着舒服,看着顺眼的,功能基本满足。
docker compose安装
暂时停用latest推送
找到飞牛内的 docker - 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:
- ./docker-data/postgres:/var/lib/postgresql/data
redis:
image: redis:7-alpine
container_name: daoliyu-redis
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes"]
volumes:
- ./docker-data/redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: msmkls/daoliyu-backend:0.1.7
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
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"
LOG_LEVEL: "${LOG_LEVEL:-info}"
DEBUG: "${DEBUG:-true}"
volumes:
- ./backend-storage:/app/storage # 后端数据(左侧为飞牛目录:容器目录勿动)
- ./media:/data/media # 歌曲目录(左侧为飞牛目录:容器目录勿动)
- ./audiobooks:/data/audiobooks # 有声书 (左侧为飞牛目录:容器目录勿动)
- ./music-videos:/data/music-videos # 音乐视频(左侧为飞牛目录:容器目录勿动)
- ./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:0.1.7
build:
context: ./frontend
dockerfile: Dockerfile
container_name: daoliyu-frontend
restart: unless-stopped
depends_on:
backend:
condition: service_started
ports:
- "5173:8080"应用尝鲜下载
Ps:打包有点仓促,实际还是属于docker compose,下载后 应用商店 - 手动安装 (下载取决于的网速,最好有镜像站加速或特殊网络加持)
之前内置的路径,现在都在 文件管理 - 应用文件 - daoliyu-music (这里取决于安装时选择哪个存储分区,安装时注意下,当然安装后,也可以手动编辑docker compose或后端镜像自行添加路径映射,只要映射到容器的 /data/xxx 多媒体库添加 /data/xxx 即可)懒省事就在默认的目录下找


如有问题及时反馈下,感谢这么久兄弟们的支持,下一版本,准备去掉音乐视频,感觉不够纯粹,所以后面准备拿掉,得承认视频还得是飞牛专业的来,留时间搞其他端,另外,尝试搞一台服务器搭建共用的元信息服务器,这个可能需要大家一起来做贡献。敬请期待下!
『来自123云盘用户的分享』道理鱼音乐应用版 20251126
链接:https://www.123865.com/s/8sh9-0aXsh?pwd=azjo# 提取码:azjo
感谢
最后感谢大家的支持,以及几位打赏的网友,感谢支持!
由于支持多用户登录和便于部署,供nas实用为主,严禁未经本人书面允许,从事商业行为。
问题解答
版本还在优化,难免会遇到这样那样的问题
十分抱歉,现在版本只属于功能相对稳定,UI和数据还在修复完善阶段,只要没放出1.0版本,都属于测试阶段,发布出来,也是让大家众测,有好的建议我会采纳,希望能和共同爱好的兄弟交流,对于某些阴阳怪气的兄弟,有意见请保留,因为你不光把负能量带给我,更是伤害了大家。
开源问题(以下废话多 )
这可能是每位开发人都绕不过的坎,因为免费分享,就会有人问要不要开源的问题,还属于正常交流,可以理解。有些兄弟一副说教的嘴脸,上来就说免费你不开源,怎么说呢,都有各自的生活,都在忙,没有精力考虑那么多,我想说,如果您觉得能用就用,不用就算,有时间扯皮我们各自歇会不好吗。
之后版本
之前服务端和pc端同步进行,后来推倒了,因为没有完善服务端其他都不好搞,目前开发元数据服务器,做个共建端,会加入歌词、封面、专辑封面、专辑简介、专辑发行日期、有声书相关,以及共建推荐歌单,下个版本会适配手机web端。
最后,感谢兄弟们(以及B站的兄弟们)的大力支持和建议提交,后期我会更用心的完善每个功能模块。
建议全部在飞牛论坛回帖反馈