Navidrome 使用 docker compose 部署和使用 - 自托管音乐流媒体服务器
前言
听到几首比较好听的歌,就想把他们收藏起来。其实绿联云 Nas 已经提供了这一解决方案,之前也使用过,使用洛雪音乐助手 (LX Music)下载音乐,然后上传到 Nas music 目录下。只不过 Nas 客户端访问非常卡,一般只做本地相册自动备份,可能跟日益增长的使用人数有关吧。所以想做一个服务器端的在线音乐播放器,当然如果有源更好,没有源搭配一些下载工具(比如洛雪)也OK。
让 deepseek 给我推荐几个,然后选择了 Navidrome,因为它 Subsonic API兼容性好(不知道什么东西,大概类似 Restful API 这样的标准接口),还有很多开源的客户端支持可以连接使用。它的 官方文档 已经写好了 docker compose 配置,主要是增加一个共享网络,方便 https-portal 代理访问,还有一个健康监测。
安装过程
以下为完整的 /root/navidrome_project/docker-compose.yml 内容
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000
expose:
- "4533"
restart: unless-stopped
environment:
# Optional: put your config options customization here. Examples:
- ND_LOGLEVEL=debug
- ND_COVERARTPRIORITY=embedded, cover.*, folder.*, external
volumes:
- "/root/navidrome_project/data:/data"
- "/root/navidrome_project/music:/music:ro"
networks:
- internal
- shared
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4533/ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
networks:
internal:
driver: bridge
shared:
external: true
name: shared-services因为版本是 latest,所以可以直接拉取不需要本地下载。
创建数据目录和音乐文件存放目录:
mkdir -p data music
# 需要修改权限一致,不然启动之后容器无法访问
chown 1000:1000 data
chown 1000:1000 music端口映射做了修改,不需要映射到宿主机,expose 标注一下服务端口就够了。
环境变量默认不用加,ND_COVERARTPRIORITY 是应对后面出现问题加上的, ND_LOGLEVEL 是默认的,可以去掉。
之后启动看到状态为 healthy,表示服务没有问题。
然后解析域名到服务器,之后添加 https-portal 配置 music.seasidecrab.com -> http://navidrome:4533,重新生成 https-portal。日志检查可以看到新域名的申请和验证过程。
音乐资源下载
deepseek 推荐了几个,洛雪音乐助手 (LX Music) 比较熟悉了,然后选择了 COCO音乐下载站。
COCO音乐下载站可以在线播放,也可以下载到本地,资源表全。下载了两首歌,然后上传到服务器的 music 目录下。可以点击右上角刷新,也可以等系统自动扫描。语言在右上角的 personal 菜单里切换成中文简体。还有登录用户和客户端的列表显示。

后续有时间,再考虑将COCO音乐下载站跟 Navidrome 部署到一起,当然现在也够用了。
客户端 & 播放器
除了默认的 web 服务端,还可以下载支持 Subsonic API 协议的 客户端 & 播放器。这里选择了 下载 Navic 安卓客户端,然后通过微信保存到华为手机里。之后通过文件管理进行安装。
安装之后进入登录页面,需要输入服务器地址,用户名和密码。Navidrome 安装后第一个访问的用户注册之后就是管理员,也可以添加一些其他账号登录。
登录时报错了:
ws2: Illegal input: Field 'coverArt' is required for type with serial name 'dev.zt64.subsonic.api.model.Album', but it was missing at path: $Navic 客户端要求你服务器上的每个专辑都必须有封面图片(coverArt 字段),而你服务器上的音乐文件可能缺少这个信息,导致登录时解析失败。
使用 MusicTag 添加封面,或者添加统一的默认的封面。这里选择添加默认封面:
为整个音乐文件夹统一添加:如果想让 music 文件夹下的所有音乐都有一张默认封面,可以将一张图片命名为 cover.jpg 或 folder.jpg 放在音乐根目录(/root/navidrome_project/music/)。Navidrome 会自动识别并优先使用。
不确定是否还需要添加下面的配置,但我都加了之后重启就可以读到封面了,登录也OK了
environment:
- ND_COVERARTPRIORITY=embedded, cover.*, folder.*, external
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
海滨擎蟹
微信
支付宝