私人云音乐平台 - Navidrome 入门指南

还在看着你的网易云/QQ音乐的歌单一点一点变灰吗?想把歌曲下载到所有设备但是无损音乐体积太大设备空间又不够?

来试试 Navidrome 吧!搭建一个专属于你的云音乐平台,再也不用担心突然有一天歌曲被下架了!

Navidrome 是什么

官方的简介是:“这是一个类似于 Spotify / Apple Music 的一款音乐播放软件,同时也能让你更简单的与朋友 / 家人分享你的歌曲和歌单”,其实就是类似于国内网易云 / QQ音乐这样的云音乐平台,但是有几个显著的不同:

  1. 完全私有化部署,没有云服务参与,所有歌曲 / 歌单 / 播放历史都存在你本地。

  2. 完全的 Web 界面,你不需要下载任何客户端只需打开网页即可畅听你的音乐库。

  3. 完全开源免费,你可以在Navidrome GitHub 项目仓库看到所有源代码。

  4. 开放 API,支持自有协议和 Subsonic API,社区有许多精美的客户端可选择,比如 Windows 上就有能把各大厂商软件按在地上吊打的 feishin

那么古尔丹,代价是什么?

首先,你需要有一台家庭服务器,它可以是你的 NAS、你的 all-in-one、捡垃圾的 N5105 等等等等,但是你必须要有这样一台设备才能。其次,音乐库总要有地方保存,所以你的家庭服务器也要确保有足够的存储容量来保存你的音乐库文件。

另外一点是带有双面性的:Navidrome 的设计是为单一音乐库服务的,即使系统中存在用户机制他们之间也只能拥有不同的歌单、不同的播放历史,但是音乐库还是同一份。同时 Navidrome 自身也不具有文件管理,你不能通过 Navidrome 向你的音乐库上传 / 删除文件等。为什么说这一点具有双面性?因为这种极简的设计带来的显著优点是系统占用低,你不需要很强劲的硬件就能安装和使用 Navidrome,而且在你不使用它的时候基本不会占用任何系统资源。

当然这里必须要提到一点,由于 Navidrome 的极简设计思路,其自身并不具有网络安全防护功能,如果你要将它开放到公网使用,则需要在它前面加一层反代或者 WAF 来防止暴力破解或者其他类型的网络攻击。

如何安装 Navidrome

章节对应官方文档索引:Installation

推荐使用 Docker Compose 进行部署。关于 Docker 的使用和详细操作,日后有力气再写一个关于 Docker 的系列文章吧,现在还是先挖个坑在这里......

Docker Compose 部署

示例 Compose 配置如下:

services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000  # 运行用户UID:GID,你需要根据你的音乐库权限进行调整
    ports:
      - 4533:4533    # Web / API 访问端口
    restart: unless-stopped
    environment:
      # Navidrome 配置项,如何设置请参照末尾“拓展章节”里的“Navidrome 配置选项”
      - ND_LOGLEVEL=info
    volumes:
      - "/path/to/data:/data"  # Navidrome 数据保存路径
      - "/path/to/your/music/folder:/music:ro"  # 音乐库路径

如果你不想关心也不想配置 Navidrome 可用配置项,则可以直接参照我的 Docker Compose 按需调整:

services:
  core:
    environment:
      - TZ=Asia/Shanghai
      - ND_LOGLEVEL=info
      - ND_DEFAULTLANGUAGE=zh-Hans       # 默认语言改为中文
      - ND_ENABLECOVERANIMATION=false    # 禁用 Web 界面播放音乐时的封面旋转动画,没什么必要
      - ND_ENABLEDOWNLOADS=false         # 禁用 Web 界面下载音乐的功能
      - ND_ENABLEEXTERNALSERVICES=false  # 禁用外部集成,即使启用你也需要魔法才能用
      - ND_ENABLEGRAVATAR=false    # 禁用 Gravatar 头像集成
      - ND_ENABLEREPLAYGAIN=false  # 禁用 Web 界面调整回放增益的功能
      - ND_ENABLESHARING=false     # 禁用分享功能,如果你需要分享给别人可以打开
      - ND_ENABLESTARRATING=false  # 禁用 Web 界面的五星评级歌曲功能
      - ND_ENABLETRANSCODINGCONFIG=false  # 禁用从 Web 界面调整转码配置的功能
      - ND_ENABLEUSEREDITING=false        # 禁止普通用户更改自身信息与登录凭据,原因稍候解释
      - ND_LASTFM_ENABLED=false           # 禁用 Last.fm 集成
      - ND_LISTENBRAINZ_ENABLED=false     # 禁用 ListenBrainZ 元数据库集成
      - ND_MAXSIDEBARPLAYLISTS=300        # 调整侧边最多显示的播放列表数为 300(默认 100)
      - ND_PASSWORDENCRYPTIONKEY=USE_YOUR_OWN_KEY  # 加密密钥,自己随机按一串字符串来用,一定要换成你自己的!!!
      - ND_SCANNER_GROUPALBUMRELEASES=true         # 禁用按照日期区分专辑,防止 Navidrome 错误的按照日期从专辑中拆分单曲
    image: deluan/navidrome:0.53.3
    networks:
      - 1panel-network
    ports:
      - 38006:4533
    restart: unless-stopped
    volumes:
      - /opt/nfs/navidrome/data:/data
      - /opt/nfs/music/MitsuhaYuki:/music:ro  # 注意音乐文件夹是ro即只读的,Navidrome 不需要也不会对你的音乐库实际文件进行任何修改操作

如何使用 Navidrome

Web UI

最简单的方式也就是直接使用 http://你的Navidrome服务器IP:4533 来访问 Navidrome 的 WebUI 了,操作方式不需要过多赘述,很简单也很符合使用直觉的界面。

2025-01-04_15-27-10.png

第三方客户端

对于 Navidrome,你可以选择任意支持 Subsonic 协议的客户端进行连接,当然如果原生支持 Navidrome 的协议的话性能和体验会更好。以下仅为个人常用客户端,仅供参考。

Windows / MacOS / Web - Feishin

项目地址:https://github.com/jeffvli/feishin

Web界面地址:https://feishin.vercel.app

用法非常简单,下载对应的安装包或者访问网页客户端后,点击“Open Menu”-“Manage Servers”

2025-01-04_15-35-28.png

然后点击“Add Server”,按照图示填写你的服务器信息

2025-01-04_15-41-28.png

点击“Add”即可添加服务器,点击“Go back”返回主界面,随后点击左上角的三条横线的按钮进入设置

2025-01-04_15-46-10.png

之后即可在“Language”选项中切换到简体中文

2025-01-04_15-47-41.png

之后的用法就符合一般客户端的操作逻辑了,不再赘述

iOS - 音流

在 AppStore 搜索“音流”即可,无广告,不付费也能使用。自带中文以及对 Navidrome 的支持,非常好用。

2025-01-04_15-53-32.png2025-01-04_15-53-41.png2025-01-04_15-53-17.png

拓展章节

音乐库管理软件

你可以使用各种常用的音乐库管理软件来组织你自己的音乐库,但是通常情况下音乐库的结构应该是:

根目录
  - 艺术家A
    - 专辑A
    - 专辑B
  - 艺术家B
    - 专辑A
    - 专辑B

你可以借助许多软件来实现对于音乐库的自动化管理,比如我常用的 MusicBrainz Picard

2025-01-04_16-04-55.png

这款软件可以一步到位给你的音乐文件补全专辑信息、封面信息,美中不足的是 MusicBrainz 的数据库架设在国外,国内访问会非常非常慢需要你自备一些魔法手段就是了。

Navidrome 有两种设置模式,分别是通过环境变量设置和通过配置文件设置。一般通过环境变量即可完成配置,若通过配置文件进行配置则需要在应用程序运行目录提供navidrome.toml 文件,或者通过环境变量ND_CONFIGFILE来指定一个路径加载外部配置文件。

基础配置

ND_CONFIGFILE
  外部配置文件路径
  默认值:"./navidrome.toml"

ND_MUSICFOLDER(在配置文件中:MusicFolder)
  音乐库路径,可以为制度文件夹
  默认值:"./music"

ND_DATAFOLDER(在配置文件中:DataFolder)
  Navidrome 数据保存路径
  默认值:"./data"

ND_CACHEFOLDER(在配置文件中:CacheFolder)
  缓存数据(转码、元数据封面图等)保存路径
  默认值:"<DataFolder>/cache"

ND_LOGLEVEL(在配置文件中:LogLevel)
  日志等级,可用选项: error, warn, info, debug, trace
  默认值:"info"

ND_ADDRESS(在配置文件中:Address)
  绑定地址,可以为 IPv4 或 IPv6,支持 Unix Socket 如 unix:/path/to/file
  默认值:0.0.0.0 和 :: (绑定全部IP)

ND_BASEURL(在配置文件中:BaseUrl)
  设置 BaseURL,在使用反向代理时很有用,示例: /music, https://music.example.com
  默认值:Empty

ND_PORT(在配置文件中:Port)
  监听端口
  默认值:4533

ND_ENABLEINSIGHTSCOLLECTOR(在配置文件中:EnableInsightsCollector)
  允许收集使用数据以优化产品体验
  默认值:true

高级配置

ND_ALBUMPLAYCOUNTMODE(在配置文件中:AlbumPlayCountMode)
  设置专辑播放次数计算方式,设为"normalized"时用专辑播放次数除以专辑音轨数后的结果作为专辑播放次数
  默认值:"absolute"

ND_AUTHREQUESTLIMIT(在配置文件中:AuthRequestLimit)
  在 AuthWindowLength 时间单一IP允许的最大登录失败次数,设为0时禁用登录频率限制
  默认值:5

ND_AUTHWINDOWLENGTH(在配置文件中:AuthWindowLength)
  登录频率限制时间窗口,与上一项搭配使用实现“阻止20s内登录失败5次的IP继续访问此服务器”
  默认值:"20s"

ND_AUTOIMPORTPLAYLISTS(在配置文件中:AutoImportPlaylists)
  是否自动导入 .m3u 播放列表
  默认值:true

ND_DEFAULTPLAYLISTPUBLICVISIBILITY(在配置文件中:DefaultPlaylistPublicVisibility)
  将导入的播放列表自动设为所有用户可访问的播放列表
  默认值:false

ND_ARTISTARTPRIORITY(在配置文件中:ArtistArtPriority)
  歌手/演奏家图像来源
  默认值:artist.*, album/artist.*, external

ND_COVERARTPRIORITY(在配置文件中:CoverArtPriority)
  专辑/音轨封面图来源,embedded 代表从音频文件内嵌标签数据搜索
  默认值:cover.*, folder.*, front.*, embedded, external

ND_COVERJPEGQUALITY(在配置文件中:CoverJpegQuality)
  专辑/音轨封面图质量
  默认值:75

ND_DEFAULTDOWNSAMPLINGFORMAT(在配置文件中:DefaultDownsamplingFormat)
  当客户端请求转码时所使用的转码格式(若指定 maxBitrate 则可不指定格式)
  默认值:opus

ND_DEFAULTLANGUAGE(在配置文件中:DefaultLanguage)
  默认系统语言,简体中文设为 zh-Hans(注意大小写敏感)
  默认值:"en"

ND_DEFAULTTHEME(在配置文件中:DefaultTheme)
  默认 Web 界面主题
  默认值:Dark

ND_ENABLEARTWORKPRECACHE(在配置文件中:EnableArtworkPrecache)
  是否启用音乐库新增音乐文件时预加载图像(若不启用则在读取到对应歌曲/专辑时才会加载其图像)
  默认值:true

ND_ENABLECOVERANIMATION(在配置文件中:EnableCoverAnimation)
  Web 界面音乐播放时的封面旋转动画
  默认值:true

ND_ENABLEDOWNLOADS(在配置文件中:EnableDownloads)
  是否允许从 Web 界面下载音乐/专辑/播放列表,建议关闭
  默认值:true

ND_ENABLEEXTERNALSERVICES.(在配置文件中:EnableExternalServices)
  启用外部拓展集成,包括匿名数据收集以及自动更换登录界面背景,建议禁用
  默认值:true

ND_ENABLEFAVOURITES(在配置文件中:EnableFavourites)
  是否允许从 Web 界面星标或收藏 歌曲/专辑/艺术家
  默认值:true

ND_ENABLEGRAVATAR(在配置文件中:EnableGravatar)
  启用 Gravatar 用户头像,需要用户填写邮件地址,建议禁用
  默认值:false

ND_ENABLELOGREDACTING(在配置文件中:EnableLogRedacting)
  记录日志时对用户敏感信息(如 token 或密码等)进行脱敏处理
  默认值:true

ND_ENABLEMEDIAFILECOVERART(在配置文件中:EnableMediaFileCoverArt)
  当播放器请求音轨封面时,设置为 true 返回音轨封面,为 false 时返回专辑封面
  默认值:true

ND_ENABLEREPLAYGAIN(在配置文件中:EnableReplayGain)
  允许 Web 界面使用播放增益,建议禁用
  默认值:true

ND_ENABLESHARING(在配置文件中:EnableSharing)
  允许创建分享链接
  默认值:false

ND_ENABLESTARRATING(在配置文件中:EnableStarRating)
  是否在 Web 界面启用5星评分机制
  默认值:true

ND_ENABLETRANSCODINGCONFIG(在配置文件中:EnableTranscodingConfig)
  允许在 Web 界面修改转码设置
  默认值:false

ND_ENABLEUSEREDITING(在配置文件中:EnableUserEditing)
  允许一般用户修改自己的用户信息以及修改密码
  默认值:true

ND_FFMPEGPATH(在配置文件中:FFmpegPath)
  ffmpeg 可执行文件路径,如果你要使用特定版本的 ffmpeg 或者 Navidrome 报错无法定位系统 ffmpeg 时可设置此项
  默认值:Empty (search in the PATH)

ND_GATRACKINGID(在配置文件中:GATrackingID)
  设置 Google Analytics 信息,格式必须为 UA-XXXXXXXX
  默认值:Empty (disabled)

ND_HTTPSECURITYHEADERS_CUSTOMFRAMEOPTIONSVALUE(在配置文件中:HTTPSecurityHeaders.CustomFrameOptionsValue)
  设置 X-Frame-Options,如"SAMEORIGIN",按需设置
  默认值:"DENY"

ND_IGNOREDARTICLES(在配置文件中:IgnoredArticles)
  自动索引禁用词列表,比如以“%”或一些奇葩符号开头的音乐/专辑名可以在这里禁用他们防止他们出现在快速索引列表里
  默认值:"The El La Los Las Le Les Os As O A"

ND_IMAGECACHESIZE(在配置文件中:ImageCacheSize)
  媒体图像缓存大小,设为0时禁用媒体图像缓存
  默认值:"100MB"

ND_JUKEBOX_ENABLED(在配置文件中:Jukebox.Enabled)(注意,关于点唱机模式请参阅 https://www.navidrome.org/docs/usage/jukebox/)
  是否启用点唱机模式,即在服务器端播放音频(你可以把 Navidrome 接入家庭音响来远程遥控播放音乐)
  默认值:false

ND_JUKEBOX_ADMINONLY(在配置文件中:Jukebox.AdminOnly)
  (点唱机模式相关)默认只有管理员可以在服务器端播放音乐,禁用此项则所有用户都可以在服务器端播放音乐
  默认值:true

Jukebox.Devices(此项只能使用配置文件设置,不能通过环境变量设置)
  (点唱机模式相关)服务器端可用的音频设备列表
  默认值:Empty(自动检测)

ND_JUKEBOX_DEFAULT(在配置文件中:Jukebox.Default)
  (点唱机模式相关)如果服务器端可用音频设备存在多个,则需在此配置要默认使用的播放设备
  默认值:Empty (auto detect)

ND_LASTFM_ENABLED(在配置文件中:LastFM.Enabled)
  是否启用 Last.fm 集成
  默认值:true

ND_LASTFM_APIKEY(在配置文件中:LastFM.ApiKey)
  Last.fm API Key,默认为空不启用
  默认值:Empty

ND_LASTFM_SECRET(在配置文件中:LastFM.Secret)
  Last.fm API Secret,默认为空不启用
  默认值:Empty

ND_LASTFM_LANGUAGE(在配置文件中:LastFM.Language)
  Last.fm 电台语言选项
  默认值:"en"

ND_LISTENBRAINZ_ENABLED(在配置文件中:ListenBrainz.Enabled)
  是否启用 ListenBrainz(在线音乐元数据库)集成
  默认值:true

ND_LISTENBRAINZ_BASEURL(在配置文件中:ListenBrainz.BaseURL)
  设置 ListenBrainz(在线音乐元数据库)的地址,如果你有自建类似服务比如 Maloja 则可以在此设置。
  默认值:https://api.listenbrainz.org/1/

ND_MAXSIDEBARPLAYLISTS(在配置文件中:MaxSidebarPlaylists)
  设置 Web 界面侧边栏最大能显示的播放列表数,该数字过大可能会影响 Web 界面性能。
  默认值:100

ND_MPVPATH(在配置文件中:MPVPath)
  (点唱机模式相关)mpv 可执行文件路径
  默认值:Empty (search in PATH)

ND_MPVCMDTEMPLATE(在配置文件中:MPVCmdTemplate)
  (点唱机模式相关)调用 mpv 的命令行模板
  默认值:mpv --audio-device=%d --no-audio-display --pause %f --input-ipc-server=%s

ND_PASSWORDENCRYPTIONKEY(在配置文件中:PasswordEncryptionKey)
  密码加密密钥
  默认值:-

ND_PLAYLISTSPATH(在配置文件中:PlaylistsPath)
  搜索并自动导入播放列表的路径,可以是文件夹或资源路径,路径必须是相对于 MusicFolder 的才能识别
  默认值:".:**/**" (meaning MusicFolder and all its subfolders)

ND_PREFERSORTTAGS(在配置文件中:PreferSortTags)
  允许使用 Sort_* 标签来在 Web 界面中对歌曲进行排序
  默认值:false

ND_PROMETHEUS_ENABLED(在配置文件中:Prometheus.Enabled)
  启用 Prometheus 性能数据监测
  默认值:false

ND_PROMETHEUS_METRICSPATH(在配置文件中:Prometheus.MetricsPath)
  Prometheus 性能数据监测端点
  默认值:"/metrics"

ND_RECENTLYADDEDBYMODTIME(在配置文件中:RecentlyAddedByModTime)
  使用文件的“修改时间”进行排序生成“最近添加”歌单,设置为否则使用 Navidrome 导入时间进行排序
  默认值:false

ND_REVERSEPROXYUSERHEADER(在配置文件中:ReverseProxyUserHeader)
  通过反代访问时,若使用三方身份登录时的用户身份识别字段设置,参照 https://www.navidrome.org/docs/usage/security/#reverse-proxy-authentication
  默认值:"Remote-User"

ND_REVERSEPROXYWHITELIST(在配置文件中:ReverseProxyWhitelist)
  通过反代访问 Navidrome 时反代服务器白名单列表,格式为使用英文逗号分隔的CIDR,不设置默认为 “deny all”
  默认值:Empty

ND_SCANNER_EXTRACTOR(在配置文件中:Scanner.Extractor)
  元数据解析实现,可以使用 taglib 或者 ffmpeg
  默认值:"taglib"

ND_SCANNER_GENRESEPARATORS(在配置文件中:Scanner.GenreSeparators)
  类型标签分隔符设置,如果音乐存在类型标签则多个类型是使用什么作为分隔的
  默认值:";/,"

ND_SCANNER_GROUPALBUMRELEASES(在配置文件中:Scanner.GroupAlbumReleases)
  专辑分组策略,true 则将同艺术家+专辑名的专辑分组为同一张专辑,false 将会识别发行日期,若不同发行日期将会分成独立的专辑
  默认值:false

ND_SCANSCHEDULE(在配置文件中:ScanSchedule)
  音乐库新增文件扫描时间计划,格式为 cron 表达式,设为0时禁用新增文件扫描
  默认值:"@every 1m"

ND_SEARCHFULLSTRING(在配置文件中:SearchFullString)
  启用按字搜索,默认按词搜索
  默认值:false

ND_SESSIONTIMEOUT(在配置文件中:SessionTimeout)
  会话时间,当用户会话无活动指定时间后注销会话
  默认值:"24h"

ND_SHAREURL(在配置文件中:ShareURL)
  用于分享时的服务器地址
  默认值:Empty (使用服务器地址)

ND_SMARTPLAYLISTREFRESHDELAY(在配置文件中:SmartPlaylistRefreshDelay)
  只能播放列表的自动刷新间隔
  默认值:"5s"

ND_SPOTIFY_ID(在配置文件中:Spotify.ID)
  Spotify Clietn ID,需要从 Spotify 获取艺术家图像时设置
  默认值:Empty

ND_SPOTIFY_SECRET(在配置文件中:Spotify.Secret)
  Spotify Client Secret,需要从 Spotify 获取艺术家图像时设置
  默认值:Empty

ND_SUBSONICARTISTPARTICIPATIONS(在配置文件中:SubsonicArtistParticipations)
  当查询指定艺术家的专辑时,包括该艺术家参演的专辑(如 V.A. 这种一群人合作发行的专辑)
  默认值:false

ND_TLSCERT(在配置文件中:TLSCert)
  TLS certificate 文件路径,需要包含 signature chain
  默认值:Empty (disable TLS)

ND_TLSKEY(在配置文件中:TLSKey)
  TLS key 文件路径
  默认值:Empty (disable TLS)

ND_TRANSCODINGCACHESIZE(在配置文件中:TranscodingCacheSize)
  转码缓存大小,设置0禁用转码缓存
  默认值:"100MB"

ND_UILOGINBACKGROUNDURL(在配置文件中:UILoginBackgroundUrl)
  自定义登陆界面背景图像,可设置为链接
  默认值:随机 Unsplash.com 图像,如果之前禁用了外部集成则只会使用内置图像

ND_UIWELCOMEMESSAGE(在配置文件中:UIWelcomeMessage)
  在登录界面显示欢迎信息
  默认值:Empty

ND_UNIXSOCKETPERM(在配置文件中:UnixSocketPerm)
  Unix Socket 文件权限,一般无需设置
  默认值:"0660"


私人云音乐平台 - Navidrome 入门指南
https://blog.tihus.com//archives/4f279815-d541-4978-b2b5-7c7f37566cb9
作者
MitsuhaYuki
发布于
2025年01月04日
更新于
2025年01月04日
许可协议