当前位置: 首页 > news >正文

飞牛 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 组合成家庭媒体中心?评论区告诉我,我按呼声继续写下一篇。

http://www.jsqmd.com/news/960938/

相关文章:

  • Elsevier投稿避坑:你的cas-dc模板作者信息和参考文献排序搞对了吗?
  • MQTTBox vs MQTT.fx:手把手教你选对物联网调试工具(含WebSocket、负载测试对比)
  • V-JEPA在面部表情识别中的创新应用与性能突破
  • WinForm日历控件源码包:支持考勤状态着色、时间段高亮与多视图切换
  • 2025国际数据人才生存指南:LLM工程化与签证策略实战
  • Blueking Lite更新:新增多类功能,满足运维管理多样需求
  • 【智能工作成熟度诊断工具】:3分钟定位你团队的AI整合卡点(含12维度自评矩阵,仅限前500名领取)
  • 2026 漳平厨卫楼顶地下室漏水测评,吉修匠五星高分稳居榜首 - 吉修匠
  • 承德 11 区县全套文案(全区统一固定标题:2026 上海防水补漏 + 瓷砖空鼓修复推荐,苏易修缮本土直营,老城老房漏水、瓷砖翘边拱起就近微创修) - 苏易修缮
  • 保姆级教程:用树莓派4B+MJPG-streamer搭建家庭安防摄像头(含FRP内网穿透)
  • E-Hentai下载器:无需积分的画廊打包下载神器
  • 为什么TSV电镀面铜越薄越好?
  • WinForms点云显示控件:基于SharpGL的即用型C#三维渲染组件
  • 用Python和OpenCV实战霍夫圆检测:从Canny边缘到圆心定位的完整流程
  • Ubuntu下串口调试,除了PuTTY和CuteCom,这3个宝藏工具也值得一试
  • 从“单词计数”到实战:手把手教你用Java写一个MapReduce程序处理日志文件
  • 上班用250排量踏板推荐 - 行业深度观察
  • 曲靖本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修 - 欧米到家
  • 2026报考必看:文山学院优质专业盘点,解锁适配就业新方向 - 品牌2026
  • 终极指南:tcc-g15 - 完全掌控你的Dell G15散热系统
  • 社区养老丨2026年物业企业的新赛道机会
  • Lumafly:空洞骑士模组管理的终极指南,让模组安装变得简单又高效!
  • NS-USBLoader 终极指南:一站式解决Switch游戏传输、RCM注入与文件管理三大难题
  • SVN详细使用教程
  • 微信小程序云开发版月度步数统计工具(含图表展示与数据汇总)
  • ZYNQ开发避坑指南:手把手教你用ILA和SDK进行软硬件联合调试(附AXI触发条件详解)
  • 给IC新人的第一课:手把手带你玩转ICC GUI,从打开设计到图层控制(附Lab0A避坑指南)
  • 别再让同事乱推代码了!手把手教你配置GitLab分支保护,把Bug挡在合并前
  • 2026年6月 最新的烟台职教高考学校、春季高考培训基地排行:合规与实力的客观对比 - 奔跑123
  • 2026 永安厨卫楼顶地下室漏水测评,吉修匠五星高分稳居榜首 - 吉修匠