编注:本文入选「自力更生」征文活动。本次征文选题灵活,只要围绕「自托管」展开即可,软件推荐、经验分享、技术科普、观点评论均可投稿,入围作品均可获得稿酬、Zeabur 订阅、少数派 PRIME 会员等奖励。了解详情
目前征文投稿已截止,你可以通过 #自力更生 标签查看所有投稿。
前言
作为一位拥有一台 NAS 的普通玩家,自建一个本地音乐库是丰富家庭影音中不可或缺的一环。我也在个人博客《我的音乐库解决方案》一文中,简要地介绍了现阶段我在 NAS 上自建音乐库的一些方案。可无论是 Jellyfin、Emby 还是 Plex,它们都不是专门的音乐媒体程序。即便这些软件都具备播放音乐的功能,界面也十分美观,但它们的核心用途终究还是在视频播放上。因此,我也只建议同时有视频观看需求的朋友部署这类媒体程序,这样才不会在使用时因为程序有太多用不上的功能而感到困扰。
后来,我又发现了一款开源的音乐服务器软件「Navidrome」。只是相比御三家,Navidrome 的界面虽然采用的是 Material Design 设计,但就显示效果来看并不符合我个人的审美需求;网页端虽然全平台通用,但在移动设备上还是需要有一个 App 方便即开即用;即使兼容 Subsonic/Madsonic/Airsonic 等一系列音乐流媒体协议,但市面上的大部分支持这些协议的播放器都是英文,几乎没有汉化,用着也十分不趁手;更别说直到本文发布的现在,Navidrome 还是不支持外挂 LRC 歌词……
如此这番批判下,想必你也能理解我为何没有及时安利 Navidrome 了。可现在推荐的原因又是什么呢?最近在网上冲浪的时候,看到群友推荐了一款国人开发的音乐播放器程序「音流」。界面符合国人审美,设计简洁,功能实用,间接性地解决了 Navidrome 不好看也不好用的痛点。因此,Navidrome 也就值得推荐给大家一试了。
以下操作均于搭载 DSM 7.2.1 的 DS220+ 中进行,Docker Compose 版本为 2.25.0。
安装
首先,在 docker 文件夹中创建一个名为 navidrome
的文件夹,并在其中再创建一个名为 data
的数据文件夹。
接着,准备好若干音乐并上传至 NAS 中,复制该文件夹的完整路径。例如 /volume1/media/music
。
由于官方不建议使用 root
用户运行,因此需要指定容器的运行用户。群晖管理员用户一般是 1026:100
,也可以使用当前用户登录 SSH 终端后,输入 id username
查询。例如我的群晖用户名是 mikusa
:
$ id mikusa
uid=1026(mikusa) gid=100(users) groups=100(users),101(administrators),65537(docker)
那么,在创建 compose.yaml
时,就在 user
配置中填写 1026:100
。
如果实在是无法确定或者懒得查,那就填 1000:1000
。
随后,在电脑上创建一个名为 compose.yaml
的文本,填入以下内容:
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1026:100 #用户id
ports:
- 4533:4533 #左侧端口如有冲突,可随意修改
volumes:
- ./data:/data #数据路径
- /volume1/media/music:/music:ro #音乐路径
environment:
#程序默认语言
- ND_DEFAULTLANGUAGE=zh-Hans
#启用GRAVATAR头像
- ND_ENABLEGRAVATAR=true
#关闭转码,如需要转码请设置为true
- ND_ENABLETRANSCODINGCONFIG=false
#SPOTIFY相关
# - ND_SPOTIFY_ID=
# - ND_SPOTIFY_SECRET=
#LAST.FM相关
# - ND_LASTFM_LANGUAGE=zh
# - ND_LASTFM_APIKEY=
# - ND_LASTFM_SECRET=
#PROXY相关
# - HTTP_PROXY=http://proxy:port
# - HTTPS_PROXY=http://proxy:port
restart: unless-stopped
你也可以在创建项目的时候选择「创建 docker-compose.yml」,粘贴上述配置,免去上传的步骤。
环境变量的部分,虽然官方文档有数十条可供选择的环境变量,但实际上用到的配置不多。除了固定语言、关闭转码外,都是些不影响使用的功能。
如果你想让 Navidrome 显示歌手头像,那么需要配置 Spotify 相关的部分。你需要先创建一个 Spotify 账户,随后在这里 Create app 创建一个应用。
只需填写 App name、App description 以及 Redirect URI 这三处,Redirect URI 需要填写 http://localhost/
,即可保存。
随后返回控制台,点击应用,进入应用设置,即可获取 Client ID 和 Client secret。对应填入环境变量中的 ND_SPOTIFY_ID
和 ND_SPOTIFY_SECRET
。
如果你想让 Navidrome 显示歌手简介、热门歌曲等相关信息,就需要在环境变量中配置 Last.fm。同样先创建一个 Last.fm 帐户,随后创建 API 帐户。只用填写应用名称。提交后在 API 应用程序 页面复制粘贴 Key 和 Secret 到环境变量即可。
上述两项外部功能,视个人网络状况而定。如果无法使用,你可能还需要配置 proxy
项。另外,如果你有增减环境变量的需求,请参考官方文档。
在 DSM 上打开 Container Manger,点击左侧项目,然后新建一个项目。项目名称任意,例如 navidrome
,设置路径选择上述准备步骤中创建的文件夹。
不必要启用网页门户,如有需要可自行配置。
随后即可启动容器。
使用
启动容器后,Navidrome 便可以直接使用了,几乎不需要其他额外的设置。
初次访问 IP:4533,Navidrome 会要求你先创建管理员账户。
因为环境变量中已经配置了默认语言,所以不用再修改用户语言,直接就是中文。
尽管 Navidrome 没有像 Plex 那样严格使用 MusicBrainz 的音乐元数据,但你仍可以参考《MusicBrainz 不完全使用指南》为音乐添加 ID3Tags 信息后,再添加到 Navidrome 中。总之,只要你准备好音乐,Navidrome 就可以做到开箱即用。
在安装 Navidrome 时配置的 Spotify 和 Last.fm,最终会让艺术家页可以显示头像和简介等相关信息。
即使你不配置 Last.fm 相关的环境变量,也可以在个性化设置中勾选「启用 Last.fm 的喜好记录」,通过 Last.fm 记录你听过的音乐。
在跳转的授权页面登录 Last.fm 账户,允许访问即可。Navidrome 中,每个用户都可以配置自己的 Last.fm 账户,记录播放过的音乐。
只要网络没问题,几乎可以实时查看正在播放的音乐。
忘了介绍,这是 Navidrome 显示歌词的样子。目前只能显示内嵌歌词。
移动设备上则是这样的。
顺便一提,我内嵌的是双语歌词,正常来说它应该显示成上下两行。现在诸位知道 Navidrome 在歌词的支持上有多糟糕了吧。
音流
所以,为了能让 Navidrome 变得稍微好用一点点,我的建议是使用第三方客户端。Navidrome 目前支持 Subsonic/Madsonic/Airsonic 协议,市面上已经有许多支持这些协议的客户端,但它们大多数都不支持中文。「音流」的出现,让中文用户多了一种选择。
「音流」是一款国人开发的音乐播放器,支持 Subsonic/Navidrome/Jellyfin/Emby/AudioStation,现已登录 Android、iOS,未来可能支持 Windows 和 tvOS 平台。音流采用 Flutter 开发,界面简洁美观,整体以透明和高斯模糊为主,布局类似于网易云音乐,上手基本没有门槛。你可以在音流官网获取 Android 安装包,或直接在 iOS AppStore 搜索「音流」下载。
使用音流十分简单,我们只要填入 Navidrome 地址、用户名和密码登录后,就可以进入音流首页。
如果你的音乐数量庞大,那音流可能需要先扫描一会儿。
接着,你应该注意到了首页「主线路」这三个字。这是音流中最让我感到惊喜的功能,它支持主备线路切换。也就是说,你可以主线路填内网地址,备用线路填外网地址。这样当你出门的时候,音流可以自动切换到外网地址上,而当你回到家中,又自动切换回内网。由于流媒体有缓存,切换网络的过程播放音乐不会中断。
首页按最新专辑、每日推荐、最近播放、最常播放和随机专辑依次排列。其中,每日推荐是随机的五十首音乐。若是觉得这五十首不合现在的心情,还可以立刻刷新换一批,是个不错的功能。
播放页面可以左滑进入推荐,右滑进入歌词。音流支持读取音乐中内嵌的歌词,并以双语上下两行显示。
总之,音流的各方面都很像我们常用的音乐 App,上手几乎没有门槛。
就到这儿了,关于 Navidrome、音流上其余的功能,就请诸位自行发现和体验吧!
> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀