碎碎念
故事的起因非常简单,甚至有点俗套:我的 QQ 音乐会员又要到期了。
看着屏幕上那个“续费立享优惠”的弹窗,我下意识地想点关闭,但随即意识到一个尴尬的问题:那些我以前花时间一首首下载到本地的“无损音质”文件,一旦会员过期,瞬间就会变成一堆毫无意义的加密数据。以前我总以为“下载”意味着“拥有”,但现实是,我们只是从平台那里租来了一段缓存的查看权。一旦停止付费,那些存在手机里的歌就像是被施了魔法的石头,看得到,听不了。
虽然我有我的联通套餐可以免费兑换,但是其实还可以兑换腾讯会员或者爱奇艺都可以,同时我的女朋友也需要听歌,因此我打算干脆,自己搭建一个音乐服务器,把要听的歌都汇聚起来。
我看着手里的服务器,又看了看硬盘里多年积攒下来的、真正属于我的 .mp3 和 .flac 本地曲库,突然觉得这种“赛博租房”的日子过不下去了。作为一个 CS 专业的硕士生,手里握着服务器资源,却还要受制于流媒体平台的 DRM(数字版权管理)限制,每个月给平台交“房租”才能听歌,这合理吗?
既然平台给不了我安全感,那我为什么不自己搭建一个专属的音乐流媒体服务呢?
我的目标很明确:
彻底的数据主权:拒绝
.qmc、.ncm这种专属加密格式。我的歌必须是通用的音频格式,存在我的硬盘里,我想怎么听就怎么听,会员到期?不存在的。服务好“甲方”:为了满足女朋友的听歌需求,这个系统不能太极客、太难用。它得有像模像样的 App,界面要好看,操作要像商业软件一样傻瓜,最好能在她点开 App 的瞬间,家里的服务器就已经把无损音频转码好推送到她手机上了。
物尽其用:反正服务器是现成的,跑个轻量级的音乐服务只是顺手的事。
与其每个月续费当“租客”,不如一次性折腾当“房东”。
1. 基础环境
我的环境是 Ubuntu Server,音乐文件存储在挂载的数据盘 /DATA/openlistdata/Music/song 下。为了安全,我专门使用非 root 用户 yanchang 来运行服务。
2. 安装
首先下载最新的 release 包,解压到 /opt:

1. 确认架构(Architecture) 在服务器终端输入:
uname -m
如果输出
x86_64(最常见,Intel/AMD CPU):选择文件名带amd64的。如果输出
aarch64(树莓派、Mac M系列芯片的虚拟机):选择文件名带arm64的。
然后下载部署安装
wget https://github.com/navidrome/navidrome/releases/download/v0.60.0/navidrome_0.60.0_linux_amd64.tar.gz
sudo mkdir -p /opt/navidrome
sudo tar -xvzf navidrome_0.60.0_linux_amd64.tar.gz -C /opt/navidrome/
# 权限归还给我的运行用户
sudo chown -R yanchang:yanchang /opt/navidrome这里踩过一个坑:文件权限。 因为我的音乐存放在额外挂载的数据盘里,起初服务启动后扫描不到歌曲,查看日志全是 Permission denied。哪怕服务跑起来了,读不到数据也是白搭。
解决办法很简单但容易被忽视:必须确保运行 Navidrome 的用户(yanchang)对那块数据盘有读取权限。
3. 创建配置文件
在 /opt/navidrome/ 下新建 navidrome.toml:
# 音乐存放路径(根据你实际情况修改)
MusicFolder = "/path/to/your/music"
# 数据库和缓存路径(建议就放在 /opt 下,方便管理)
DataFolder = "/opt/navidrome/data"
# 其它配置
LogLevel = "info"
Port = 4533
3. 配置 Systemd
为了让它像正经服务一样开机自启、崩溃重启,我手写了一个 systemd 配置文件。
既然不用 .deb,我们需要自己告诉系统怎么通过 systemd 守护进程来启动它。
sudo nano /etc/systemd/system/navidrome.service
粘贴以下内容(注意 ExecStart 和 WorkingDirectory 已经指向了你的 /opt):
[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/opt/navidrome
[Service]
# 指定运行用户
User=navidrome
Group=navidrome
# 核心路径配置
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/opt/navidrome/navidrome.toml"
WorkingDirectory=/opt/navidrome
# 进程保护配置(保持默认即可)
TimeoutStopSec=20
KillMode=process
Restart=on-failure
# 安全增强(可选,Navidrome官方推荐)
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=full
[Install]
WantedBy=multi-user.target配置后进行启动
# 重新加载服务配置
sudo systemctl daemon-reload
# 启动并设置开机自启
sudo systemctl enable --now navidrome
# 查看状态
sudo systemctl status navidrome
4. Nginx 反向代理
最后一步,为了能用我的域名优雅地访问,我在 Nginx 里加了一段反代配置,通过 HTTPS 访问,安全性拉满。
sudo vim /etc/nginx/sites-available/navidrome.conf内容为
server {
# listen 4534 ssl http2;
listen 4534 ssl;
server_name www.yanchang.cc;
ssl_certificate /etc/nginx/ssl/www.yanchang.pem;
ssl_certificate_key /etc/nginx/ssl/www.yanchang.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_buffer_size 4k;
# 设置为 0 表示“不限制大小”,或者设置为具体数值如 10240m (10GB)
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:4533; # 音乐服务的端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 关键配置:避免大文件/预览被掐掉
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 大文件超时设置
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}
}启用配置
sudo ln -s /etc/nginx/sites-available/navidrome.conf /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置有没有写错
sudo systemctl reload nginx放行端口
sudo ufw allow 4534
尝试访问,初始化账号后就可以登录了。

(四) 客户端:这才是灵魂
服务端部署好只是第一步,真正让我感到“折腾值了”的瞬间,是在手机上装好 App 连接上服务器的那一刻。
由于 Navidrome 支持 Subsonic API,不管是 iOS 还是 Android 都有绝佳的客户端:
Android 端:我强烈推荐 Symfonium。它的作者是 Kodi 的维护者,功能强大到令人发指。它能自动把服务器上的 FLAC 无损转码成适合移动端播放的码率,还能智能缓存接下来的几首歌。在地铁上没信号也能无缝播放。
iOS 端:Amperfy 是个不错的开源选择,界面非常原生,像极了 Apple Music。
PC 端:Sonixd,跨平台,长得像 Spotify。
当我在手机上看到那个加载出的“专辑墙”,看着熟悉的歌词滚动,听着无损的音质,那种**“这才是我的数据”**的掌控感,是任何月费会员都给不了的。
(五) 结语
在这个万物皆云、万物皆订阅的时代,Self-hosted(自托管)不仅仅是为了省钱,更是一种对数字生活的态度。
虽然部署的过程涉及 Linux 权限、Nginx 配置、Systemd 编写,稍微有点门槛,但当你戴上耳机,按下播放键的那一刻,所有的折腾都变成了享受。
现在的我,终于可以底气十足地说:只要我的服务器不关机,这首歌就永远属于我。