Navidrome 安装与配置记录:从二进制安装到专辑标签修复

1. 背景

为了在局域网内搭建一个稳定、开放的本地音乐服务器,可以使用 Navidrome。

Navidrome 是一个轻量级的自托管音乐服务器,可以扫描本地音乐目录,并通过 Web 页面或兼容 Subsonic / OpenSubsonic API 的客户端访问音乐库。它适合部署在 NAS、小主机、Aidlux、树莓派等设备上,用来管理本地音乐文件。

本文记录一次在 Linux 盒子(arm64)上使用二进制方式安装 Navidrome 的过程,包括:

  • Navidrome 简介
  • 二进制安装
  • systemd 服务配置
  • 音乐目录和数据目录配置
  • 权限问题处理
  • 专辑显示为“无名”的修复方法
  • 批量设置 Album 标签

2. Navidrome 适合做什么

Navidrome 的定位是“个人流媒体音乐服务器”。

它适合:

  • 扫描本地音乐目录
  • 在浏览器中播放音乐
  • 作为局域网音乐服务器
  • 通过 Subsonic / OpenSubsonic API 给第三方客户端调用
  • 给智能音箱、语音点歌系统提供后端曲库

它不适合:

  • 从网上自动下载音乐
  • 自动绕过各音乐平台版权限制
  • 自动把文件夹名当专辑名
  • 直接替代完整的音乐下载器

简单理解:

Navidrome = 本地音乐库索引 + Web 播放器 + 音乐流服务

它只负责管理和播放你已经放进音乐目录里的音乐。


3. 目录规划

这次使用的目录结构如下:

/home/simon/navidrome/
├── data/      # Navidrome 数据库、缓存、封面等
└── music/     # 本地音乐文件目录

音乐文件放在:

/home/simon/navidrome/music/

其中有一个合辑目录:

/home/simon/navidrome/music/50亿播放合辑/

Navidrome 的数据目录放在:

/home/simon/navidrome/data/

4. 使用 .deb 包安装 Navidrome

推荐使用 Navidrome 官方发布的 .deb 包安装,而不是手动复制二进制文件。这样安装更干净,也会自动处理依赖,例如 ffmpeg

4.1 下载 .deb 安装包

先打开 Navidrome 的 GitHub Releases 页面,找到适合当前系统架构的 .deb 文件。

常见架构选择:

amd64  常见 64 位 x86 电脑 / 服务器
arm64  常见 ARM64 开发板 / 服务器
armv7  部分 32 位 ARM 设备

查看当前系统架构:

dpkg --print-architecture

例如输出:

amd64

就下载 linux_amd64.deb

如果输出:

arm64

就下载 linux_arm64.deb

下载示例:

wget https://github.com/navidrome/navidrome/releases/download/v0.61.2/navidrome_0.61.2_linux_amd64.deb

如果你的系统是 ARM64,则类似:

wget https://github.com/navidrome/navidrome/releases/download/v0.61.2/navidrome_0.61.2_linux_arm64.deb

实际版本号需要以 GitHub Releases 页面为准。

4.2 使用 apt 安装

推荐使用 apt 安装本地 .deb 包:

sudo apt install ./navidrome_0.61.2_linux_amd64.deb

如果是 ARM64 包,则命令类似:

sudo apt install ./navidrome_0.61.2_linux_arm64.deb

使用 apt install ./xxx.deb 的好处是:它会自动检查并安装依赖,例如 ffmpeg

也可以使用 dpkg 安装:

sudo dpkg -i navidrome_0.61.2_linux_amd64.deb

但如果缺依赖,还需要再执行:

sudo apt -f install

或者

sudo apt install ./navidrome_0.61.2_linux_arm64.deb --fix-missing

所以一般优先使用 apt

4.3 检查安装结果

安装完成后检查版本:

navidrome --version

本文环境中运行的版本是:

Navidrome 0.61.2

使用 .deb 安装后,通常会自动创建 systemd 服务文件。可以查看:

sudo systemctl status navidrome --no-pager -l

如果安装后服务还没有正常启动,后面继续配置 navidrome.toml、音乐目录和权限。


5. 创建配置文件

创建配置目录:

sudo mkdir -p /etc/navidrome

编辑配置文件:

sudo nano /etc/navidrome/navidrome.toml

写入:

MusicFolder = "/home/simon/navidrome/music"
DataFolder = "/home/simon/navidrome/data"

Address = "0.0.0.0"
Port = 4533

ScanSchedule = "@every 1h"
LogLevel = "info"

各配置项含义如下:

MusicFolder  音乐文件目录
DataFolder   Navidrome 数据目录
Address      监听地址,0.0.0.0 表示允许局域网访问
Port         Web 访问端口,默认常用 4533

配置好后,后续可以通过浏览器访问:

http://服务器IP:4533

例如:

http://192.168.1.100:4533

注意:首次访问需要输入管理员账号密码

6. 创建 systemd 服务

创建 systemd 服务文件:

sudo nano /etc/systemd/system/navidrome.service

写入:

[Unit]
Description=Your Personal Streaming Service
After=network.target

[Service]
ExecStart=/usr/bin/navidrome service execute -c /etc/navidrome/navidrome.toml
WorkingDirectory=/home/simon/navidrome
User=simon
Group=simon
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

重新加载 systemd:

sudo systemctl daemon-reload

设置开机自启并启动:

sudo systemctl enable --now navidrome

查看状态:

sudo systemctl status navidrome --no-pager -l

7. 如果服务启动失败:permission denied

一开始启动时遇到了类似错误:

FATAL: Error creating cache path: mkdir /home/simon/navidrome/data/cache: permission denied

手动创建 cache 后,又出现:

FATAL: Error creating artwork path: mkdir /home/simon/navidrome/data/artwork: permission denied

这说明 Navidrome 运行用户没有权限写入 DataFolder

先检查目录权限:

ls -ld /home /home/simon /home/simon/navidrome /home/simon/navidrome/data

示例输出:

drwxr-xr-x  4 root  root  4096 /home
drwxr-xr-x 27 simon simon 4096 /home/simon
drwxr-xr-x  4 simon simon 4096 /home/simon/navidrome
drwxr-xr-x  3 simon simon 4096 /home/simon/navidrome/data

再查看 simon 用户所属组:

groups simon

示例输出:

simon : simon sudo docker

或者:

id -a simon

示例输出:

uid=1001(simon) gid=1001(simon) 组=1001(simon),27(sudo),111(docker)

所以 simon 的主组就是 simon

如果 systemd 服务不是以 simon 用户运行,可以执行:

sudo systemctl edit navidrome

打开后里面大部分是 # 开头的注释,这是正常的。直接添加:

[Service]
User=simon
Group=simon

保存后执行:

sudo systemctl daemon-reload
sudo systemctl restart navidrome
sudo systemctl status navidrome --no-pager -l

确认 override 是否生效:

sudo systemctl cat navidrome

应该能看到:

# /etc/systemd/system/navidrome.service.d/override.conf
[Service]
User=simon
Group=simon

如果目录归属不对,可以重新设置:

sudo chown -R simon:simon /home/simon/navidrome/data
sudo chown -R simon:simon /home/simon/navidrome/music

然后重启:

sudo systemctl restart navidrome

8. Navidrome 有没有下载功能

Navidrome 有下载功能,但这里的“下载”指的是:

从 Navidrome 服务器下载已有音乐文件到浏览器或客户端

不是:

从酷我、网易云、QQ 音乐、YouTube 自动下载新歌到服务器

9. 专辑显示为“无名”的原因

我在音乐目录下创建了:

/home/simon/navidrome/music/50亿播放专辑/

里面放了很多歌曲。Navidrome 扫描后,Web 页面里专辑名显示为:

无名

原因是:Navidrome 主要根据音频文件里的 metadata tags 组织音乐,而不是根据文件夹名推断专辑名。

也就是说,即使文件夹叫:

50亿播放专辑

如果音频文件里的 Album 标签是空的,Navidrome 仍然可能显示为:

无名

解决方法是:批量给这些文件写入 Album 标签。


10. 安装 kid3-cli

使用 kid3-cli 可以批量修改音频标签:

sudo apt update
sudo apt install kid3-cli

11. 批量设置 Album 标签

目标目录:

/home/simon/navidrome/music/50亿播放合辑

给目录下的所有常见音频文件设置专辑名:

find "/home/simon/navidrome/music/50亿播放合辑" -type f \( \
  -iname "*.mp3" -o \
  -iname "*.flac" -o \
  -iname "*.m4a" -o \
  -iname "*.ogg" -o \
  -iname "*.wav" \
\) -exec kid3-cli -c "set album '50亿播放合辑'" {} \;

如果这是各种歌手的合集,建议同时设置 AlbumArtist

find "/home/simon/navidrome/music/50亿播放合辑" -type f \( \
  -iname "*.mp3" -o \
  -iname "*.flac" -o \
  -iname "*.m4a" -o \
  -iname "*.ogg" -o \
  -iname "*.wav" \
\) -exec kid3-cli \
  -c "set album '50亿播放合辑'" \
  -c "set albumartist 'Various Artists'" \
  -c "set compilation 1" \
  {} \;

这样可以避免 Navidrome 把不同歌手的歌曲拆成多个专辑。


12. 检查标签是否写入成功

找一首歌测试:

kid3-cli -c "get album" "/home/simon/navidrome/music/50亿播放合辑/某首歌.mp3"

查看专辑艺术家:

kid3-cli -c "get albumartist" "/home/simon/navidrome/music/50亿播放合辑/某首歌.mp3"

如果返回:

50亿播放合辑

说明标签已经写入成功。


13. 重新扫描 Navidrome

修改标签后,需要让 Navidrome 重新扫描音乐库。

可以在 Web 页面里触发扫描,也可以直接重启服务:

sudo systemctl restart navidrome

查看服务状态:

sudo systemctl status navidrome --no-pager -l

如果还没有刷新,可以再看日志:

journalctl -u navidrome -n 100 --no-pager

14. 小结

这次安装和配置的关键点如下:

1. Navidrome 适合做本地音乐服务器
2. MusicFolder 放音乐文件
3. DataFolder 放数据库、缓存和封面
4. systemd 服务用户必须有 DataFolder 写权限
5. 音乐目录可以只读,但数据目录必须可写
6. Navidrome 按音频标签组织专辑,不按文件夹名自动生成专辑
7. 专辑显示“无名”时,需要批量写入 Album 标签
8. 合集类音乐建议设置 AlbumArtist = Various Artists

最终配置示例:

MusicFolder = "/home/simon/navidrome/music"
DataFolder = "/home/simon/navidrome/data"
Address = "0.0.0.0"
Port = 4533
ScanSchedule = "@every 1h"
LogLevel = "info"

systemd override 示例:

[Service]
User=simon
Group=simon

访问地址:

http://服务器IP:4533

这样 Navidrome 就可以作为一个稳定的局域网音乐服务器使用。后续还可以继续接入 R1 音箱、Subsonic API 或自定义语音点歌服务。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐