音乐版权四分五裂,NAS 上部署 HollyMusic 聚合在线音源
在线听歌的体验其实挺割裂:周杰伦的歌,SVIP7 的网易云账号也听不了;版权分散在好几个 App,想分享一首歌还得先确认对方装了哪个软件、有没有会员。
NAS 玩家的思路一般是:照片、电影、小说、KTV 都能自己搭,音乐播放器为什么不试试?Navidrome、Jellyfin 这类工具适合管理本地曲库,前提是你手里已经有整理好的音乐文件,还得长期维护歌手、专辑、封面和歌词。
HollyMusic 是另一条路:一套自部署的在线音乐聚合播放器,直接兼容洛雪音乐的自定义音源。音源分散在各处没关系,在 NAS 上聚合起来,账号、收藏、歌单和播放历史都留在自己的服务器里。
- 镜像:
ghcr.milu.moe/redcath/hollymusic:latest
功能完成度比预想高
PC 和手机都有单独适配,搜索、收藏、播放历史、歌词、歌单这些基础功能齐全。兼容 LX Music 自定义源 API 2.0.0,手里已有的洛雪 .js 音源大多能直接复用,不需要重新找一套。
几个值得说的点:
- 服务端音频缓存 + HTTP Range:暂停、恢复、拖动进度都完整;多用户共享缓存,容量到限后自动清理旧文件,不会一直占硬盘
- 多用户隔离:每个人的收藏、歌单、播放历史互相独立,部署一次可以给家里人分开用
- PWA 支持:配好 HTTPS 后能添加到桌面,锁屏和通知栏可直接控制播放
- Subsonic 协议兼容:可以接 DSub、Ultrasonic 等第三方客户端
- AI 歌单:配置 OpenAI 兼容接口后可用自然语言辅助生成歌单,属于附加玩法,不配不影响正常听歌
- 下载支持:音源支持的情况下,可直接下载 FLAC 格式 Hi-Res 文件
Docker Compose 部署
项目提供 Docker 镜像,NAS 上用 Compose 最方便。打开 NAS 的 Compose 界面,新建并粘贴以下内容:
services:
app:
image: ghcr.milu.moe/redcath/hollymusic:latest
container_name: holly-music
ports:
- "3099:3000"
env_file:
- .env
environment:
- NODE_ENV=production
- DATABASE_URL=file:./prisma/data/music.db
- ENABLE_FILE_CACHE=true
- AUDIO_CACHE_DIR=/app/.cache/audio-cache
- AUDIO_CACHE_QUOTA_GB=10
volumes:
- ./custom-sources:/app/custom-sources
- ./config:/app/config
- ./prisma_data:/app/prisma/prisma/data
- ./cache_data:/app/.cache
- ./app_logs:/app/logs
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
默认映射宿主机 3099 端口,已被占用就改前面的数字。Compose 文件放在某个目录下运行时(比如 ~/hollymusic),./custom-sources、./config 这些相对路径的目录需要先创建好,或者让 Compose 自动创建后保证目录可写。
极空间用户可以直接选择添加 .env 文件,其中需要填入 AUTH_SECRET,用任意随机字符串生成器生成一个即可。
默认用户名是 admin。首次启动会在容器日志中生成一次性密码,只在日志里出现一次,登录后立即修改。日志里搜 password 也能找到。
和本地曲库不是替代关系
HollyMusic 不是 Navidrome 这类本地音乐服务器的替代品,两者适合的人不一样。手里有完整 FLAC 曲库、喜欢自己整理音乐的,本地音乐库方案依然更合适。
如果平时习惯「搜到就听」,又希望收藏、歌单和账号数据留在自己手里,HollyMusic 在线的音源聚合加自建音乐服务的思路确实挺适合 NAS。
注意:该项目仅供学习交流使用,不提供内置音源,音源文件需要自备。