Navidrome自建音源
部署
systemctl管理服务
下载文件:
1 | sudo mkdir -p /opt/navidrome |
配置文件navidrome.toml:
1 | sudo vim /etc/navidrome/navidrome.toml |
1 | # Navidrome 配置文件 |
创建一个名为 navidrome 的系统用户
1 | sudo useradd --system --shell /sbin/nologin --no-create-home navidrome |
创建服务:
1 | sudo vim /etc/systemd/system/navidrome.service |
navidrome.service
1 | [Unit] |
docker部署
docker-compose.yaml
1 | services: |
音乐上传至/path/to/music,重启navidrome容器,自动扫描
访问4533端口,可以网页播放音乐
客户端
Navidrome支持多种协议,比如Subsonic ,Airsonic ,Madsonic这些,支持这些协议的客户端都可以使用。
- iOS: play:Sub, substreamer, Amperfy and iSub
- Android: DSub, Subtracks, substreamer, Ultrasonic and Audinaut
- Web: Subplayer, Airsonic Refix, Aurial, Jamstash and Subfire
- Desktop: Sublime Music (Linux) and Sonixd (Windows/Linux/macOS)
- CLI: Jellycli (Windows/Linux) and STMP (Linux/macOS)
- Connected Speakers:
- Other:
api
上传
miniserve
navidrome不支持上传歌曲,可以部署miniserve来上传,或者用ftp等方式
1 | ./miniserve -a $USER:$PASSWD -D -u -U -p $PORT -z -W /path/to/music |
各个参数的含义分别为:
- -a 设置访问用户名与密码
- -D 将目录展示到文件之上
- -u 允许上传文件
- -U 允许创建子目录
- -p 指定端口
- -z 支持将整个目录通过 zip 下载
- -W 在页面下方显示 wget 命令
- –route-prefix 指定路径前缀
- t 指定页面 title
启动服务后,可以通过localhost:$PORT访问 miniserve 的 web 页面
使用curl上传文件,其中 $FILE 是文件的路径
1 | curl -F "path=@$FILE" http://localhost:8080/upload\?path\=/ |
使用curl创建目录,其中 $DIR_NAME 是目录的名称
1 | curl -F "mkdir=$DIR_NAME" http://localhost:8080/upload\?path=\/ |
cdn加速
缓存配置
| 类型 | 值 | 过期时间 | 遵循源站缓存 | 权重 |
|---|---|---|---|---|
| 目录 | /api |
0秒 | 否 | 100 |
| 目录 | /auth/login |
0秒 | 否 | 100 |
| 目录 | /rest/stream |
30天 | 否 | 100 |
| 文件后缀名 | .js;.css;.png;.jpg |
7天 | 否 | 100 |
| 文件后缀名 | .mp3;.flac;.wav |
30天 | 否 | 100 |
| 目录 | /rest |
0秒 | 否 | 50 |
| 文件后缀名 | .php;.jsp;.asp |
0秒 | 否 | 3 |
| 目录 | / |
1小时 | 否 | 2 |
处理流媒体分片请求(Range)
Navidrome 播放音乐文件时,客户端通常会发起带有 Range 请求头的请求,这要求 CDN 节点能够回源获取文件的部分内容。
- 检查
Range回源设置:在 CDN 配置的高级设置中,确保Range回源 功能是开启的。这能保证播放器请求音乐文件片段时,CDN 可以高效地只拉取所需的部分。
保留指定参数
| 配置项 | 建议设置 | 说明 |
|---|---|---|
| 规则类型 | 文件后缀 或 URL | 最好是配合你上一条设置的 文件后缀 规则(.mp3, .flac 等),或针对 /rest/stream 路径(音乐文件路径)。 |
| 参数状态 | 保留指定参数 | 明确告诉 CDN 哪些参数对缓存是重要的。 |
| 指定参数 | id |
Navidrome 的 id 参数代表了唯一的音乐文件。只有 id 不同的请求才应该视为不同的缓存资源。 |
| 结果 | 除了 id 之外的所有参数(如 u, t, _ 等)都会被 忽略。这样请求 id=ABC 的文件时,无论你的 Token 是什么,都会命中同一份缓存,极大地提高命中率。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Meng's blog!
