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

把音乐库搬上云端:Navidrome 自托管音乐服务器搭建指南

前言

不知道你有没有遇到过这样的尴尬:手机里存了几百首歌,但每次想听点“对味”的音乐,还得在各种 APP 之间来回切换。更糟心的是,明明是花钱买了会员,喜欢的歌今天还在,明天就因为版权到期变灰了。对于真正喜欢听歌的人来说,手里或多或少都囤了些数字遗产——从早年下载的 MP3,到后来收藏的 FLAC、APE 无损资源。这些文件静静地躺在硬盘里,只能插着电脑听,出门就彻底失联。

Navidrome 就是为了解决这个问题而生的。它是一个开源的音乐服务器软件,可以把服务器变成你私人的云端曲库。装上它之后,你收藏的那些音乐文件就有了“灵魂”——会被自动整理成专辑、歌手歌单,封面和元数据也会被识别出来。更重要的是,它支持多用户,你可以给家人开账号,大家听各自的歌,互不干扰。

这篇教程不讲晦涩的理论,纯粹是一份操作手册。我会带你从头开始,在一台空的 Linux 云服务器上把 Navidrome 跑起来。哪怕你之前没碰过 Linux 命令行,只要跟着敲命令,也能搞定。

第一步:准备工作:

准备一台具备公网IP的云服务器(推荐使用雨云)

优惠注册地址:https://www.rainyun.com/sn_

使用优惠码:sn

注: 使用优惠码注册后绑定微信可领取5折优惠券

服务器选购步骤:

  1. 注册后,在"总览"页面找到"云服务器"入口,进入后点击"购买云服务器"

    2.根据需求选择合适的配置,建议选择国内的服务器,访问更快,选好后点击立即购买即可

    3.选好后进入控制台,使用SSH客户端远程连接服务器即可,SSH客户端建议选择FinalShell

第二步:安装 Docker(含镜像加速配置)

Navidrome 官方提供了两种安装方式:直接下载二进制文件运行,或者用 Docker。考虑到零基础用户的操作便捷性,这里选择 Docker 方式——它能把应用和依赖环境打包在一起,不用担心因为系统版本差异导致的各种奇怪报错。

2.1 一键安装 Docker

执行下面的命令,它会自动检测你的系统并完成 Docker 的安装:

curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun

国内服务器访问 Docker 官方仓库有时会比较慢,上面这条命令已经指定了阿里云镜像,安装速度会快很多。

2.2 启动 Docker 并设置开机自启

安装完成后,需要启动 Docker 服务,并确保服务器重启后 Docker 能自动运行:

systemctl startdockersystemctlenabledocker

检查一下 Docker 的运行状态,看到active (running)就说明正常了:

systemctl statusdocker

2.3 配置镜像加速(可选但推荐)

如果你身处中国大陆地区,拉取 Docker 镜像时可能会遇到超时。可以给 Docker 配一个国内的镜像源。执行以下命令创建配置文件:

cat>/etc/docker/daemon.json<<EOF { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.nju.edu.cn" ] } EOF

保存后重启 Docker 让配置生效:

systemctl restartdocker

第三步:创建 Navidrome 容器

Docker 环境就绪后,就可以开始部署 Navidrome 了。我们需要创建一个目录来存放 Navidrome 的配置文件、数据库和音乐文件,这样即使容器出问题被删掉,你的数据和音乐也不会丢。

3.1 创建项目目录

执行下面的命令,一次性创建好需要的文件夹:

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

简单说明一下这两个文件夹的用途:

  • data:存放 Navidrome 的数据库、缓存和配置文件
  • music:你以后上传的音乐文件就放在这里

3.2 编写 docker-compose.yml

Navidrome 官方推荐用 Docker Compose 来管理容器。进入刚才创建的目录,编辑配置文件:

cd/opt/navidromenanodocker-compose.yml

在编辑器中粘贴以下内容:

services:navidrome:image:deluan/navidrome:latestcontainer_name:navidromeuser:0:0# 使用 root 权限运行,避免读写权限问题ports:-"4533:4533"# 左边是宿主机的端口,右边是容器端口restart:unless-stoppedenvironment:ND_SCANSCHEDULE:1h# 每小时自动扫描一次音乐库ND_LOGLEVEL:info# 日志级别ND_SESSIONTIMEOUT:24h# 登录会话有效期ND_BASEURL:""volumes:-"/opt/navidrome/data:/data"# 映射配置数据目录-"/opt/navidrome/music:/music:ro"# 映射音乐目录,ro表示只读

这段配置里有几个关键点需要留意:

  • user: 0:0表示容器以 root 用户运行。如果你对权限管理比较在意,可以先不写这行,如果遇到文件权限问题再加回来。
  • restart: unless-stopped保证容器意外退出时会自动重启,除非你手动停止它。
  • ND_SCANSCHEDULE: 1h让 Navidrome 每隔一小时检查一次音乐文件夹,有新歌进来会自动刷新。

Ctrl+O保存文件,按Ctrl+X退出 nano 编辑器。

3.3 启动容器

/opt/navidrome目录下执行:

docker-composeup-d

-d参数表示后台运行。第一次启动会从 Docker Hub 拉取镜像,根据网络情况可能需要等一两分钟。拉取完成后,容器就自动跑起来了。

3.4 验证容器状态

输入下面的命令,看到Up字样就代表容器正常运行:

dockerps|grepnavidrome

如果容器状态是Exited,可以用docker logs navidrome查看日志,看看具体哪里报错。

第四步:上传音乐文件

容器跑起来了,但现在里面还是空的。你需要把喜欢的音乐传到服务器的/opt/navidrome/music文件夹里。

4.1 上传方式选择

有几种常见的传文件方法:

  • SCP 命令(适合传少量文件):在本地电脑打开终端,执行:
    scp/本地路径/单曲.flac root@你的服务器IP:/opt/navidrome/music/
  • SFTP 工具(推荐新手):用 WinSCP 或 FinalShell 这类工具,像操作 FTP 一样直接拖拽上传。
  • 直接下载:如果音乐文件在网盘或者某个下载链接里,可以在服务器上用wget直接拉取。比如:
    cd/opt/navidrome/musicwget音乐文件的下载链接

无论用哪种方式,上传完成后,建议给音乐目录设置一下权限,确保容器能读到:

chmod-R755/opt/navidrome/music

第五步:首次访问与基础配置

5.1 访问 Web 界面

打开浏览器,在地址栏输入http://你的服务器IP:4533。如果一切正常,你会看到一个创建管理员账号的页面。

输入你想要的用户名和密码,点击Create Admin

5.2 切换中文界面

登录进去之后,界面默认是英文的。点击右上角的头像图标,选择Personal。在设置页面找到Language下拉框,切换到简体中文,不需要刷新页面,界面会自动变成中文。

5.3 等待扫描完成

Navidrome 会在后台自动扫描/music文件夹里的文件。扫描速度取决于音乐文件的数量和大小——几百首歌大概一两分钟,上万首的大曲库可能要十几分钟。你可以盯着右上角的通知图标,或者刷新页面看看专辑有没有陆续出现。

扫描完成后,你就能在“专辑”、“歌手”等分类里看到自己的音乐了。随便点开一首歌试试,如果能正常播放,恭喜你,私人音乐服务器已经搭建成功了!

写在最后

到此为止,你已经亲手搭建起了一个完全属于自己的云端音乐库。以后再也不用担心“该资源暂无版权”,也不用为了听一首歌充好几个会员。想听什么歌,直接丢进服务器的music文件夹,Navidrome 会自动帮你整理好。

当然,目前只能在局域网或者公网 IP 直连的情况下访问。如果你想把服务器藏在云上,通过域名随时随地访问,可以接着研究一下 Nginx 反向代理和 SSL 证书的配置。如果希望节省服务器流量,也可以搭配 Rclone 挂载网盘,把音乐文件存在对象存储里。

搭建的过程可能有点折腾,但当你第一次在地铁上打开手机 App,流畅地播放着服务器里的无损音乐时,这种“拥有”的感觉还是挺值的。

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

相关文章:

  • Flutter 三方库 pip 的鸿蒙化适配指南 - 实现标准化的画中画(Picture-in-Picture)模式、支持视频悬浮窗与多任务并行交互
  • 202603周赛新D题
  • Json在线工具使用说明
  • 上课听得懂 一考试就低分!这样选学习机 彻底打通 “会→对→高分” - 海淀教育研究小组
  • 基于ArcScene的裸眼立体图制作说明
  • 基于C++的爬虫框架
  • 查看QPS,根据QPS 对php-fpm.d中www.conf的设置
  • 企业管理系统前端组件化设计实战:OA、CRM、ERP 表单为什么不能直接用 Element UI / Ant Design?
  • ArcGIS中利用DEM制作立体晕渲图的说明
  • 嵌入式C++测试框架
  • 2026 审讯桌、审讯椅、调度台哪家强?UDWEN 优盾专业厂家实力领衔 - 品牌智鉴榜
  • pikachu靶场——SQL-Inject—1(Kali系统)
  • 腾讯地图加载详细说明 —— 以leaflet为例
  • C++游戏开发之旅29
  • 2026年方管标杆供应厂家最新推荐:Q235方管、Q355方管、无缝方管、钢结构方管、河南红宇供应链,品质方管适配多行业需求 - 海棠依旧大
  • ArcGIS Server发布的地图服务不显示地图的原因分析
  • ArcGIS中点转线面的方法
  • 2026年3月河南方管供应企业最新推荐榜单:镀锌方管、黑方管、镀锌方矩管、热镀锌方管、热镀方矩管、各类方管、方矩管采购选择指南 - 海棠依旧大
  • 基本元器件——比较器
  • 小型校园网的设计与组建
  • 3款降AI工具实测对比:价格差3倍效果差多少?结果出乎意料
  • C++跨平台开发实战
  • Git常用指令
  • 注塑机数据采集以及数据应用
  • 【Vibe Coding解惑】AI 写代码靠谱吗?真实案例解析
  • C语言预处理(通俗易懂)
  • 《Python基础教程》专栏总结篇
  • SSH超时断开连接时长控制ServerAliveInterval和TMOUT设置
  • 最大公约数gcd和Win32版本实现
  • Android笔记