一. 前言


作为一位拥有一台 NAS 的普通玩家,自建一个本地音乐库是丰富家庭影音中不可或缺的一环。

在这之前,曾在 Emby 中自建了一个音乐库的方案,emmmm,感觉不是很近人意,勉强能用。

可是,无论是 Emby、Jellyfin、还是 Plex,它们都不是专门的音乐媒体程序。即使这些软件都具备播放音乐的功能,界面也十分美观,但它们的核心用途终究还是在视频播放上。因此,我也只建议同时有视频观看需求的朋友部署这类媒体程序,这样才不会在使用时因为程序有太多用不上的功能而感觉到困惑。

后来,我又发现了一款开源的音乐服务器软件Navidrome」。配合 Music tag web 刮削歌词与封面,体验还是非常不错的。

二. 介绍


Niavdrome 是一个基于网络的开源音乐收藏服务器和流媒体支持多平台客户端访问,适合搭建私有音乐库。

它让您可以通过任何浏览器或移动设备自由收听您收藏的音乐

三. 效果预览


2025/04/08/navidrome-private-music-library-01.png

四. 相关地址


待补充

五. 部署教程


1. Docker Compose:

version: '3'

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    networks:
      - lee-bridge
    deploy:
      resources:
        limits:
          cpus: '1'
          memory: 1G
    environment:
      ND_DEFAULTLANGUAGE: zh-Hans       # 默认语言
      ND_DEFAULTTHEME: Spotify-ish      # 默认主题
      ND_ENABLEGRAVATAR: true           # GRAVATAR 头像
      ND_SCANNER_EXTRACTOR: ffmpeg      # 元素局提取器实现 音乐转码
      ND_ENABLETRANSCODINGCONFIG: true  # 转码配置
      ND_TRANSCODINGCACHESIZE: 100M     # 转码缓存的大小。设置"0"为禁用缓存 默认"100MB"
      ND_IMAGECACHESIZE: 100M           # 图像(艺术作品)缓存的大小。设置"0"为禁用缓存,默认"100MB"
      ND_LASTFM_ENABLED: true           # last.fm 集成
      ND_ENABLEMEDIAFILECOVERART: true  # 媒体文件封面艺术
      # ND_SCANNER_ARTISTSEPARATORS: "/"
      ND_ENABLESHARING: true            # 启用共享
      # Last.fm 部分
      ND_LASTFM_LANGUAGE: zh            # 设定 last.fm 语言为中文
      ND_LASTFM_APIKEY: ***             # last.fm 的 apikey
      ND_LASTFM_SECRET: ***             # last.fm 的 SECRET
      # Spotify 部分
      ND_SPOTIFY_ID: ***     # spotify Client ID
      ND_SPOTIFY_SECRET: *** # spotify Client secret
      ND_SCANSCHEDULE: 1h    # 扫描音乐文件周期
      ND_LOGLEVEL: info
      ND_SESSIONTIMEOUT: 24h
      HTTP_PROXY: http://192.168.31.2:7890    # 更换为自己的 http 代理
      HTTPS_PROXY: http://192.168.31.2:7890   # 更换为自己的 http 代理
      ND_BASEURL: ""                           # 空值
    ports:
      - '4533:4533'
    volumes:
      - /volume1/docker/navidrome:/data
      - /volume1/music:/music:ro

networks:
  lee-bridge:
    external: true

六. 使用教程


1. 网页管理

浏览器打开 NAS_IP:4533,就可以访问项目界面了,首次访问项目地址,Navidrome 会要求你先创建管理员账户。

配置好用户名和密码登录成功后可以先修改配置语言为中文,但是前边我们环境变量中已经配置了默认语言,所以不用再修改用户语言,直接就是中文。

2. 音乐管理

把音乐源文件放到映射的 /io/music 目录后,点击右上角扫描就出来音乐了

2025/04/08/navidrome-private-music-library-06.png

3. Last.fm 喜好记录

在安装 Navidrome 时配置的 Spotify 和 Last.fm,最终会让艺术家页可以显示头像和简介等相关信息。

2025/04/08/navidrome-private-music-library-03.png

即使你不配置 Last.fm 相关的环境变量,也可以在个性化设置中勾选 「启用 Last.fm 的喜好记录」,通过 Last.fm 记录你听过的音乐。

注意:需要给容器设定网络代理后,才能正常授权访问

2025/04/08/navidrome-private-music-library-04.png

选择 YES, ALLOW ACCESS,成功后就会跳回设置页

2025/04/08/navidrome-private-music-library-05.png

只要网络没有问题,几乎可以实时查看正在播放的音乐

4. Last.fm 密钥设置

4.1 注册 Last.fm

打开 https://www.last.fm/zh 注册一个账号。

4.2 申请 API

打开 https://www.last.fm/zh/api/account/create 申请 API Key 和 Secret。

2025/04/08/navidrome-private-music-library-07.png

表单里,只有一个 程序描述「Application name」 是必填项。

确定后随后页面将会显示专属的 API 信息,将 API Key 和 Shared secret 保存下来。

也可以在 https://www.last.fm/zh/api/accounts 中查看。

将得到的值复制到环境变量

  • ND_LASTFM_APIKEY Last.fm 获取的 API Key

  • ND_LASTFM_SECRET Last.fm 获取的 Shared Secret

  • ND_LASTFM_LANGUAGE 用于从 Last.fm 检索的语言的两个字母代码,简体中文为 zh

5. Spotify 密钥设置

5.1 注册 Spotify

打开 https://open.spotify.com 注册一个账号。

5.2 申请 API

打开 https://developer.spotify.com/dashboard ,然后 Create app ,按要求填写表单信息。

2025/04/08/navidrome-private-music-library-09.png

其中,Redirect URIs 填写 http://localhost/ 即可

将生成的 app 的 Client IDClient secret 保存下来

将得到的值复制到环境变量

  • ND_SPOTIFY_ID Spotify 客户端 ID

  • ND_SPOTIFY_SECRET Spotify 客户端 Secret

6. 客户端使用

为了能让 Navidrome 变得稍微好用一点点,我的建议是使用第三方客户端。Navidrome 目前支持 Subsonic / Madsonic / Airsonic 协议,市面上已经有许多支持这些协议的客户端,但它们大多数都不支持中文,「https://music.aqzscn.cn」的出现,让中文用户多了一种选择。

https://music.aqzscn.cn」是一款国人开发的音乐播放器,支持 Subsonic / Navidrome / Jellyfin / Emby / AudioStation,现已登录 Android、iOS、macOS,未来可能支持 Windows 和 tvOS 平台。音流采用 Flutter 开发,界面简洁美观,整体以透明和高斯模糊为主,布局类似于网易云音乐,上手基本没有门槛。你可以在 音流官网 获取 Android 安装包,或者直接在 iOS App Store 搜索「音流」下载

使用音流十分简单,我们只要填入 Navidrome 地址、用户名和密码登录后,就可以进入音流首页。

2025/04/09/navidrome-private-music-library-10.webp2025/04/09/navidrome-private-music-library-11.webp

2025/04/09/navidrome-private-music-library-12.webp2025/04/09/navidrome-private-music-library-13.webp

如果你的音乐数量庞大,那音流可能需要先扫描一会儿。

接着,你应该注意到了首页「主路线」这三个字。这是音流中最让我感到惊喜的功能,它支持主线路切换。也就是说,你可以主线路填内网地址,备用路线填外网地址。这样当你出门的时候,音流可以自动切换到外网地址上,而当你回到家中,又自动切换回内网。由于流媒体有缓存,切换网络的过程播放音乐不会中断。

2025/04/09/navidrome-private-music-library-14.webp

首页按最新专辑、每日推荐、最近播放、最长播放和随机专辑依次排列。其中,每日推荐是随机的五十首音乐。若是觉得这五十首不符合现在的心情,还可以立刻刷新换一批,是个不错的功能。

2025/04/09/navidrome-private-music-library-15.webp

播放页面可以左滑进入推荐,右滑进入歌词。音流支持读取音乐中内嵌的歌词,并以双语上下两行显示。

总之,音流的各方面都很像我们常用的音乐 App,上手几乎没有门槛。

七. 常见问题及注意点


1. 音乐刮削

音乐如果没有内嵌的标签,需要配合 music tag web 一起使用,将刮削好后的文件映射给 Navidrome 即可。

2. 歌词不显示

Navidrome 目前仅支持内嵌歌词,可以使用音流等第三方客户端进行连接 Navidrome

参考资料


https://sspai.com/post/89420

https://post.smzdm.com/p/akldn384

https://www.huanhq.com/archives/Navidrome