前言

听到几首比较好听的歌,就想把他们收藏起来。其实绿联云 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 菜单里切换成中文简体。还有登录用户和客户端的列表显示。

Navidrome web 端页面

后续有时间,再考虑将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

Navic 安卓客户端界面

文章目录