yanchang
yanchang
发布于 2026-02-06 / 26 阅读
0
0

搭建Navidrome 私人流媒体

碎碎念

故事的起因非常简单,甚至有点俗套:我的 QQ 音乐会员又要到期了。

看着屏幕上那个“续费立享优惠”的弹窗,我下意识地想点关闭,但随即意识到一个尴尬的问题:那些我以前花时间一首首下载到本地的“无损音质”文件,一旦会员过期,瞬间就会变成一堆毫无意义的加密数据。以前我总以为“下载”意味着“拥有”,但现实是,我们只是从平台那里租来了一段缓存的查看权。一旦停止付费,那些存在手机里的歌就像是被施了魔法的石头,看得到,听不了。

虽然我有我的联通套餐可以免费兑换,但是其实还可以兑换腾讯会员或者爱奇艺都可以,同时我的女朋友也需要听歌,因此我打算干脆,自己搭建一个音乐服务器,把要听的歌都汇聚起来。

我看着手里的服务器,又看了看硬盘里多年积攒下来的、真正属于我的 .mp3.flac 本地曲库,突然觉得这种“赛博租房”的日子过不下去了。作为一个 CS 专业的硕士生,手里握着服务器资源,却还要受制于流媒体平台的 DRM(数字版权管理)限制,每个月给平台交“房租”才能听歌,这合理吗?

既然平台给不了我安全感,那我为什么不自己搭建一个专属的音乐流媒体服务呢?

我的目标很明确:

  1. 彻底的数据主权:拒绝 .qmc.ncm 这种专属加密格式。我的歌必须是通用的音频格式,存在我的硬盘里,我想怎么听就怎么听,会员到期?不存在的。

  2. 服务好“甲方”:为了满足女朋友的听歌需求,这个系统不能太极客、太难用。它得有像模像样的 App,界面要好看,操作要像商业软件一样傻瓜,最好能在她点开 App 的瞬间,家里的服务器就已经把无损音频转码好推送到她手机上了。

  3. 物尽其用:反正服务器是现成的,跑个轻量级的音乐服务只是顺手的事。

与其每个月续费当“租客”,不如一次性折腾当“房东”。

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

粘贴以下内容(注意 ExecStartWorkingDirectory 已经指向了你的 /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 编写,稍微有点门槛,但当你戴上耳机,按下播放键的那一刻,所有的折腾都变成了享受。

现在的我,终于可以底气十足地说:只要我的服务器不关机,这首歌就永远属于我。



评论