news 2026/6/16 23:06:30

飞牛 NAS 用 Docker 搭 Navidrome:把本地音乐库变成随时能听的私有歌单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞牛 NAS 用 Docker 搭 Navidrome:把本地音乐库变成随时能听的私有歌单

飞牛 NAS 用 Docker 搭 Navidrome:把本地音乐库变成随时能听的私有歌单

摘要:家里硬盘和 NAS 里攒了不少 MP3、FLAC、AAC 文件,真正想听的时候却总在翻文件夹。本文用 Docker 部署 Navidrome,把本地合法音乐文件整理成一个私有音乐库;局域网内用浏览器听,外出时用 cpolar 映射 Navidrome 的 Web 端口,再用手机浏览器或 Subsonic 兼容客户端连接。

标签:Navidrome、Docker、NAS、cpolar、内网穿透

说明:这篇只讨论个人自有、已购买、已授权或合法备份音频文件的整理和访问。Navidrome 负责管理你的本地音乐库,不提供音乐资源获取能力,也不适合拿来传播未授权内容。

前言

你有没有这种情况:NAS 里有一堆歌,手机里也存过几千首,但真正想听的时候,反而打开在线音乐软件随便点两下。

原因不是歌少,而是入口太散。电脑硬盘一个目录、NAS 共享盘一个目录、旧手机备份里还有一批,想在外面听一首老歌,还得先想文件放在哪里。

我之前写过一篇 Jellyfin 家庭影音库方案,适合整理电影、纪录片、课程视频这类内容。旧文内链位置:Jellyfin 家庭影音库不只在家看。这篇换个方向:Jellyfin 偏视频和家庭影音,Navidrome 偏音乐、歌单和低带宽远程听歌。一个管“看”,一个管“听”,放在 NAS 上刚好互补。

这次的目标很明确:

  • 在飞牛 NAS 或普通 Linux 机器上,用 Docker 跑起 Navidrome;
  • 把宿主机里的音乐目录只读挂进容器,避免服务端误改原文件;
  • 本地访问跑通后,用 cpolar 给 Navidrome 的4533端口开一个 HTTPS 访问入口;
  • 手机端用 Web 页面直接听,或者用 Subsonic 兼容客户端连接同一个地址。

1 什么是 Navidrome?这篇里它负责管音乐库

Navidrome 是一个轻量级自托管音乐服务。官方文档里把它定位成音乐集合的 Web 播放服务,同时兼容 Subsonic API,这意味着它既能用浏览器访问,也能接入一批 Subsonic 兼容客户端。

这篇里不用把它理解得太复杂。你只要记住三件事:

  • Navidrome 服务端跑在 NAS、小主机或 Linux 服务器上;
  • 你的 MP3、FLAC、AAC 等音频文件仍然放在自己的硬盘目录里;
  • 手机、电脑、平板访问 Navidrome 后,看到的是整理好的艺术家、专辑、歌曲和歌单。

它和直接开 SMB 文件共享不一样。文件共享更像“远程翻文件夹”,Navidrome 更像“把自己的本地音乐变成一个私人播放器”。

这里别误会:Navidrome 只负责管理自有音频文件,不负责找歌、下歌、破解平台限制。音乐文件的版权边界要自己守住,家庭自用和个人备份是这篇的前提。

2 环境准备:飞牛 NAS 和通用 Linux 都按这个思路来

这次不写死飞牛 NAS 的专有路径,因为每个人的存储池、共享目录命名都不一样。更稳的写法是给一套通用目录,你在飞牛 NAS 的文件管理器里找到真实音乐目录后,把示例路径替换掉。

示例目录如下:

/opt/navidrome # Navidrome 部署目录,放 docker-compose.yml /opt/navidrome/data # Navidrome 数据目录,放数据库、缓存、播放列表等 /data/music # 你的音乐文件目录,按实际情况替换

如果你在飞牛 NAS 上已经建好了共享目录,后面 Compose 里的/data/music换成真实音乐路径即可。

先用 SSH 登录 NAS 或 Linux 机器,准备目录:

sudo mkdir -p /opt/navidrome/data sudo mkdir -p /data/music cd /opt/navidrome

如果音乐已经在 NAS 的共享目录里,直接用真实音乐路径。这里很容易填错:容器只能看到挂载进去的目录。

再确认当前用户的 UID 和 GID:

id

输出里会看到类似下面这样的内容:

uid=1000(admin) gid=1000(admin) groups=1000(admin)

后面 Compose 示例用1000:1000。你的机器输出不是这个值,就替换成自己的 UID 和 GID。这样做是为了减少权限问题,别让容器用 root 身份乱碰文件。

给 Navidrome 数据目录设置归属:

sudo chown -R 1000:1000 /opt/navidrome/data

音乐目录建议只给读取权限。Navidrome 扫描音乐库时会读取音频文件和元数据,服务端数据、封面缓存、播放记录会写到/opt/navidrome/data,不需要改你的原始音乐文件。

3 用 Docker Compose 部署 Navidrome

/opt/navidrome里创建docker-compose.yml

cd /opt/navidrome nano docker-compose.yml

写入下面这份配置:

services: navidrome: image: deluan/navidrome:latest container_name: navidrome user: "1000:1000" ports: - "4533:4533" restart: unless-stopped environment: ND_LOGLEVEL: info volumes: - /opt/navidrome/data:/data - /data/music:/music:ro

这里有几个点别填错:

  • 4533:4533:Navidrome 默认 Web 端口是4533,后面本地访问和 cpolar 映射都用这个端口;
  • /opt/navidrome/data:/data:Navidrome 的数据库、缓存、播放列表等数据放这里;
  • /data/music:/music:ro:把宿主机音乐目录挂到容器的/music,末尾ro表示只读挂载;
  • user: "1000:1000":替换成你刚才id命令看到的 UID 和 GID。

如果你用飞牛 NAS 的图形化 Docker / 容器功能,也按同样参数创建:镜像deluan/navidrome:latest,端口4533,数据目录挂/data,音乐目录只读挂/music

启动服务:

docker compose up -d

查看容器状态:

docker compose ps

正常会看到navidrome处于运行状态,并且端口里有0.0.0.0:4533->4533/tcp。如果容器反复重启,先看日志:

docker compose logs --tail=100 navidrome

排错先盯三件事:镜像有没有拉下来、/opt/navidrome/data有没有写权限、音乐目录路径是不是真实存在。

4 打开本地页面,完成初始账号和音乐扫描

服务跑起来后,在同一个局域网里打开:

http://NAS-IP:4533

NAS-IP换成飞牛 NAS 或 Linux 机器的局域网 IP。例如你的 NAS 地址是192.168.31.20,浏览器访问:

http://192.168.31.20:4533

第一次打开时,Navidrome 会要求创建管理员账号。这里建议直接用一个不容易猜的用户名和强密码,不要用admin/admin、生日、手机号后几位这种组合。后面要做公网访问,账号密码就是第一道门。

登录后,Navidrome 会扫描/music目录里的音频文件。你的文件标签越干净,页面里显示得越舒服。比如艺术家、专辑、曲目号、封面这些元数据提前整理好,Navidrome 展示时就不需要你再手动猜。

如果页面空空的,按下面顺序查:

# 1. 宿主机上确认音乐目录里有文件 find /data/music -maxdepth 2 -type f | head # 2. 容器里确认 /music 能看到文件 docker exec -it navidrome sh -c "find /music -maxdepth 2 -type f | head" # 3. 查看 Navidrome 日志 docker compose logs --tail=100 navidrome

如果第 1 条能看到文件,第 2 条看不到,问题就在 Docker 卷挂载路径。回到docker-compose.yml,把/data/music换成真实音乐目录,再执行:

docker compose up -d

这一步是确认“宿主机音乐目录 → 容器/music→ Navidrome 页面”已经打通。链路通了,后面远程访问才有意义。

5 用 cpolar 映射 Navidrome Web 端口

局域网内能打开http://NAS-IP:4533后,再处理外地访问。不要暴露 NAS 管理后台,也不要把一堆端口全映射出去。这里只映射 Navidrome 的4533

如果你的 NAS 或 Linux 机器已经安装并登录 cpolar,可以直接创建 HTTP 隧道:

cpolar http 4533

命令运行后,终端会输出一个公网访问地址。你也可以打开 cpolar Web UI:

http://127.0.0.1:9200

在 cpolar 的“状态 → 在线隧道列表”里查看 Navidrome 对应的 HTTPS 地址。把这个 HTTPS 地址复制出来,在外地手机或电脑浏览器里打开,就会进入 Navidrome 登录页。

如果你更习惯 Web UI 创建隧道,参数按下面填:

  • 隧道名称:navidrome
  • 协议:http
  • 本地地址:4533
  • 域名类型:免费套餐选随机域名
  • 地区:按实际线路选择

创建后去“状态 → 在线隧道列表”看公网地址。免费随机地址适合临时访问和测试,官方规则是 24 小时内会变化;长期使用再考虑固定二级子域名,固定二级子域名需要基础套餐或以上。

安全提醒放在这里说清楚:

  • Navidrome 管理员账号必须用强密码,别复用 NAS 后台密码;
  • 只映射4533,不要顺手暴露飞牛 NAS 后台、SSH、数据库端口;
  • 临时在外面听歌,用完就关闭隧道;
  • 多人账号分开建,别把管理员账号给家人共用;
  • 公网入口只给自己和可信设备使用。

如果 cpolar 地址能打开,但页面不是 Navidrome,先检查本地地址是不是填成了 NAS 后台端口。这个坑很常见:Navidrome 是4533,NAS 管理页面是另一套端口,不要混在一起。

6 手机怎么听:Web 访问和 Subsonic 客户端两条路

本地和公网入口都跑通后,手机端有两种用法。

第一种最省事:手机浏览器打开 cpolar 的 HTTPS 地址,登录 Navidrome Web 页面。这个方式不用装 App,适合先确认远程链路是否正常。

第二种更像日常播放器:安装 Subsonic 兼容客户端,在客户端里新增服务器。Navidrome 官方说明它兼容 Subsonic / OpenSubsonic 客户端生态,手机、桌面、车机方向都有对应播放器。

客户端里通常要填三项:

Server URL: cpolar 生成的 HTTPS 地址 Username: Navidrome 用户名 Password: Navidrome 密码

这里注意两点。

一是Server URL直接填 HTTPS 根地址,不要在后面乱加/login。浏览器登录页地址和客户端 API 地址不是一回事,客户端会自己拼接 Subsonic API 路径。

二是免费随机地址变化后,客户端里的服务器地址也要跟着改。如果你准备长期用手机客户端听,固定二级子域名会省很多事。

如果客户端连不上,先用同一台手机浏览器打开这个 HTTPS 地址。浏览器都打不开,问题在 cpolar 隧道或本地服务;浏览器能打开但客户端失败,再检查客户端里的 URL、账号、密码和 HTTPS 证书提示。

7 和 Jellyfin 怎么分工:视频库归视频,音乐库归音乐

前面提到的 Jellyfin 旧文更适合家庭影音库。它的重点是影片、剧集、字幕、海报墙、电视端播放,还有不同设备间的视频体验。

Navidrome 的优势在另一边:音乐库、歌单、专辑、低带宽播放、Subsonic 客户端。音频文件体积比视频小,在外面听歌对带宽要求也低。地铁、办公室、酒店网络里临时听自己的歌,Navidrome 的负担比视频服务轻。

我的建议是分开部署:

  • Jellyfin 管视频、课程、家庭录像,端口按旧文方案处理;
  • Navidrome 管音乐、歌单、专辑,端口固定看4533
  • cpolar 只映射当前需要访问的服务,不把 NAS 后台当作公网入口。

这样排错也清楚。看不了电影就查 Jellyfin,听不了歌就查 Navidrome。两个服务都放在 Docker Compose 里,各自有独立的数据目录和媒体目录,后面迁移 NAS 或换硬盘也更稳。

8 总结

现在这套链路已经成型:音乐文件还在自己的飞牛 NAS 或 Linux 服务器上,Navidrome 负责扫描和整理,局域网里用http://NAS-IP:4533访问;出门时用 cpolar 临时映射4533,手机浏览器或 Subsonic 兼容客户端都能连回自己的私有音乐库。

关键步骤就三块:

  • Docker Compose 部署 Navidrome,把/data/music两个目录挂清楚,音乐目录建议只读挂载;
  • 本地页面先跑通,确认账号、扫描、播放都正常,再去做远程访问;
  • cpolar 只映射 Navidrome Web 端口,配强密码,用完关闭临时隧道,不暴露 NAS 后台。

如果你之前已经按 Jellyfin 旧文搭好了家庭影音库,这篇就是音乐库补全方案。一个负责视频,一个负责音乐,再配合 NAS 的长期存储能力,家里的数字媒体会从“散在硬盘里”变成“随时能打开的私人媒体中心”。

你更想看 Navidrome 客户端推荐、歌词封面整理,还是和 Jellyfin 组合成家庭媒体中心?评论区告诉我,我按呼声继续写下一篇。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 22:57:24

告别Xshell!用Pycharm专业版自带的SSH终端直连Ubuntu服务器(保姆级图文)

在PyCharm专业版中实现一站式开发:告别SSH客户端切换的终极指南对于现代开发者而言,频繁在IDE和SSH终端之间切换已经成为影响工作效率的主要瓶颈之一。想象一下这样的场景:你正在PyCharm中调试Python代码,突然需要检查服务器日志或…

作者头像 李华
网站建设 2026/6/9 3:58:51

从一次CTF赛题到实战:我是如何利用JBoss未授权访问漏洞GetShell的(含War包制作与冰蝎连接详解)

从CTF赛场到真实战场:JBoss未授权访问漏洞的深度利用指南 当你在CTF比赛中第一次遇到JBoss服务时,那种既兴奋又茫然的感觉我至今记忆犹新。那是2021年强网杯的一道Web题,看似普通的JBoss管理界面背后,隐藏着一条直通系统权限的攻击…

作者头像 李华
网站建设 2026/6/9 16:21:53

大学生笔记本推荐|华硕无畏 Pro14 酷睿版,课业娱乐轻薄本

为大学生选择一台合适的笔记本电脑,需要综合考虑多个维度的平衡。校园生活场景复杂多变,从教室到图书馆,从宿舍到实验室,对设备的要求既有共性又有个性差异。性能配置决定了运行专业软件和多任务处理的流畅度,是基础保…

作者头像 李华
网站建设 2026/6/10 6:09:20

iOS开发者的终极调试解决方案:全版本iOS设备支持快速指南

iOS开发者的终极调试解决方案:全版本iOS设备支持快速指南 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport iOSDeviceSupport是一个专为iOS开发者设计的完整设备调试支…

作者头像 李华