是什么
家里的音乐文件一直散在硬盘上,电脑上能放,手机就麻烦了。Navidrome 就是解决这件事的:一个自建的音乐流媒体服务,扫一遍音乐目录,把它变成随时可以访问的音乐库,手机、网页都能听。
为什么做
公共云音乐的问题很现实:版权换歌单、会员到期、自己收藏的文件传不上去。与其将就,不如把家里的库直接放出来。数据在自己手里,格式自己定,加歌就丢进目录,不用再折腾同步。
现状
目前状态是「运行中」,就是家里的一台常驻服务。部署上我用 Docker 跑单容器:音乐目录只读挂载,数据目录单独放,备份方便;对外走反向代理路径,定时任务写在 root crontab 里,固定的维护动作交给它。过程中花时间最多的是音乐元数据整理和反向代理路径,记在这页里,以后自己回看。
功能
- 扫描本地音乐目录,自动整理成可浏览的音乐库
- 内置网页播放器,浏览器打开就能听
- 支持 Subsonic 协议,手机端用第三方客户端接入
- Docker 单容器部署,音乐目录与数据目录分开挂载
- 通过反向代理路径对外提供访问入口
- 定时任务挂在 root crontab 上,日常维护有固定节奏
技术栈
DockerNavidromeNginx 反向代理crontabSubsonic API音乐元数据
使用 / 部署教程
1. 准备目录
把音乐和数据分开,音乐目录只读给容器用:
mkdir -p /srv/navidrome/data /srv/navidrome/music
2. 写 docker-compose.yml
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
restart: unless-stopped
ports:
- "4533:4533"
environment:
- ND_MUSICFOLDER=/music
- ND_DATAFOLDER=/data
volumes:
- ./music:/music:ro
- ./data:/data
3. 启动并初始化
docker compose up -d
docker compose logs -f navidrome
首次启动会扫描音乐库,曲库大的话等一会儿。浏览器打开 http://<内网地址>:4533,创建管理员账号,再在设置里确认音乐目录和扫描行为。
4. 反向代理
想在外面听就走反向代理,给一个独立的路径前缀(或子域名),注意 proxy_pass 末尾斜杠和 location 路径要对应,否则前端静态资源和接口路径会错位。改完用手机客户端连一次,确认接口路径也能通。
5. 客户端接入
手机端用支持 Subsonic 协议的播放器,服务器地址填反代后的地址,账号密码用刚才建的管理员账号即可。
6. 定时任务
需要定时执行的动作(例如同步、维护脚本)按现有习惯统一写进 root crontab;这份项目的 etc/root-crontab.txt 就是它的入口,改动直接在该文件里做,再同步到系统。
7. 验证
- 网页能登录、能播放;
- 手机客户端能拉取歌单并播放;
- 重启容器后数据仍在(说明数据目录挂对了)。
注意
- 音乐目录按只读挂载(:ro),避免服务误改文件;媒体文件本身仍要单独备份。
- 4533 端口只在内网用,对外只开反向代理后的 HTTPS 入口。
- 数据目录(数据库与配置)要纳入备份,重建容器前先留一份。