本站的家庭数字生活版图已经相当完整:照片进了 Immich、影音进了 Jellyfin、密码进了 Vaultwarden、笔记进了 Memos、账本进了 Firefly III——但有一个陪伴我们时间最长的需求一直藏在角落里没写:听歌。QQ音乐、网易云、Apple Music 的 VIP 一年比一年贵,更难受的是版权大战把曲库拆得七零八落:今天这首歌在这家、明天就下了架;免费听要忍耐几十秒的广告和“猜你喜欢”的投喂。你有没有想过,把自己下载好的音乐全部装进一台属于自己的服务器,用一个从头到尾不弹广告、不分析你听歌习惯的播放器把它们串起来,全家人在任何设备上都能随时听?这就是 Navidrome 要解决的事。这篇文章把它从零到一讲透。
一、为什么自建音乐服务
先说痛点。听歌这件事,几乎人人都是“会员 + 下架焦虑”的组合:想听周杰伦要开某家会员,想听另一个歌单要开另一家,追的歌手哪天版权到期,收藏夹里立刻灰一片。更隐蔽的问题是隐私:音乐平台知道你几点听歌、反复听哪首、在哪个歌单停过——这些数据换算成广告和“猜你喜欢”,换走的其实是你的注意力。而把曲库拿回自己手里之后,你拥有的是一份永远不会下架、永远不会因为没有 VIP 而被砍掉音质的私人音乐硬盘。
自建音乐服务最现实的价值是“一次整理,全家受益”:你买过的 CD、从合法渠道下载的无损、你亲手抓轨的收藏,统统放进一台小服务器,手机、电脑、电视、车载蓝牙的耳机都能点开就放,不用再纠结“这个文件在哪个设备上”。
二、Navidrome 是什么,为什么选它
自托管音乐服务圈的方案主要有三派:一类是 funkwhale 这种全能社交型,功能全但资源吃得多、配置复杂;一类是 gonic、Airsonic 这种极简派,轻得不能再轻但界面干瘪;Navidrome 则站在一个很舒服的中间位置——它用 Go 语言写成,512MB 内存的小鸡就能稳健跑起来,又实现了完整的 Subsonic API,这意味着市面上几乎所有音乐客户端都能直接连它。
选 Navidrome 的具体理由很实在:单二进制 + 一个 SQLite 数据库就能跑,几乎没有依赖焦虑;部署方式就是一个 docker compose 文件;自带一个清爽的 Web 端,颜值和体验在线;更关键的是它对中文曲库的支持相当成熟,标签乱码问题远少于同类方案。
三、准备工作
开工前先准备好三样东西:一台内存不低于 512MB 的 Linux VPS(1G 内存体验更从容)、一个已经解析到你服务器的域名(纯粹想内网自用可以跳过)、以及一堆你希望被统一管理的音乐文件。
需要说明的是,音乐文件本身建议放在一个独立的目录里,比如 /mnt/music。这样以后做备份、迁移都干净,Navidrome 本身不拥有曲库拷贝,只是“指路”。
四、用 Docker Compose 部署 Navidrome
在服务器上先建好目录结构,然后写 compose 文件:
mkdir -p /opt/navidrome/{config,music}
接着创建 /opt/navidrome/docker-compose.yml:
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000
ports:
- "4533:4533"
environment:
ND_SCANSCHEDULER: 6h
ND_LOGLEVEL: info
ND_BASEURL: ""
ND_MUSICFOLDER: /music
volumes:
- ./config:/data
- /mnt/music:/music:ro
restart: unless-stopped
在 compose 文件目录下执行 docker compose up -d,Navidrome 就会在 4533 端口起来。第一次访问会进入安装向导,设置管理员用户名和密码即可。
如果配置了域名,建议用 Caddy 或 Nginx 反代一层,加上 HTTPS——以后手机在任何网络环境下访问都安全,浏览器也不会报警告。
五、导入曲库与元数据刮削
Navidrome 启动后会自动扫描音乐目录。为了扫描效果好,先把曲库按“歌手/专辑/曲目”的目录结构组织好,音乐文件尽量带上规范的 ID3/APE 标签(歌名、歌手、专辑、年份、封面)。这样刮削出的专辑封面和简介才准确。
中文曲库最常见的坑是标签乱码和封面缺失,处理要点有两个:一是尽量用 mp3tag、MusicBrainz Picard 这类工具把标签清洗成 UTF-8 再放进曲库;二是封面向导里可以开启 Last.fm 的标签信息抓取,把网上现成的艺术家简介和专辑图拉回来,补全一张没有封面的专辑只需一次点击。
六、多端播放:整套客户端生态
Navidrome 最值钱的资产是 Subsonic API 生态。手机端强烈推荐 Android 的 Symfonium 和国产的“音流”,它们虽然需要购买(音流是开源 + 小额买断),但界面现代、能全屏锁屏歌词、支持 CarPlay;iOS 端可以用 Play:Sub;桌面端推荐 Feishin,它完全复刻了网易云那样的沉浸式封面大图体验。
配置客户端时,服务器地址填 https://你的域名,端口如果是反代过的 Https 就填 443,用户名密码用刚才创建的管理员账号,协议选 Subsonic API。填完服务器五个客户端几乎都是“一扫即连”。
七、家庭共享与多用户
一个 Navidrome 实例可以开给人人。在后台“用户管理”里给家里每个人建一个账号:进度各自独立、收藏各自独立、歌单互不干扰,但共享着同一份曲库。给孩子建个账号,还能单独勾选允许播放的音质范围,避免在 4G 下不小心烧流量。
这样一来,“你家的歌单”就变成了一件真正属于全家的资产,而不是某个平台会员下的临时浏览权。
八、安全与备份
曲库是你多年攒下的宝贝,值得按本站备份篇的标准对待:备份目录里,config 里是用户的收藏、歌单和播放进度,music 曲库是本体数据。建议用 restic 把这两个目录做增量加密备份推到异地对象存储,遇到服务器故障能整盘恢复。
安全层面,一定要把 4533 端口藏到反代后面、开启 HTTPS,切记不要把 Navidrome 裸奔在公网端口上,否则分分钟被爆破。
九、常见问题速查
几个高频问题直接给答案:手机端“加载不出封面”一般是扫描时标签没带图,重跑扫描或手动补封面即可;网页端播放卡顿,去设置里把“转码 / 流媒体”的带宽档位调低,默认按原码率推流对带宽要求高;扫描半天不出来,多半是曲库里混了损坏文件,日志里会给出对应路径。
结语
听歌本该是一件完全属于自己的事。当你把曲库装进自己的服务器,你就同时拿回了四样东西:不再逐月续费的会员费、永不“下架”的收藏、不再被算法拿去换广告的听歌记录、以及一份全家共享的音乐资产。先从小小的 docker compose 开始,把第一张专辑放进 /mnt/music,剩下的水到渠成。




