作为一个音乐爱好者,把音乐下载到本地不仅占用地方,多端同步也是个麻烦事。今天教大家如何利用 Navidrome 搭建专属的高颜值私有音乐服务器,并通过 Rclone 将 Alist 挂载的网盘(如 OneDrive)直接映射到 VPS 存储中,实现“零全盘同步、实时流媒体播放”的无限云端音乐库

Navidrome-web界面

苹果IOS下载音流软件导入Navidrome数据

🛠️ 核心架构与准备工作

  • 必须有一台 Linux 服务器啊-0.0

本教程的实现原理非常简单:

  • 数据源:Alist或者OpenList挂载的网盘音乐目录(本教程参考地址:https://alist.oortaka.top/OneDrive网盘/music

  • 桥梁Rclone 通过 WebDAV 协议将 Alist 路径虚拟挂载为本地 Linux 目录。

  • 播放器Navidrome(Docker 部署)读取本地挂载目录,生成音乐库。

前提条件:你已经拥有一个运行中的 1Panel 或纯 Docker 环境,且 Alist或者Openlist网盘已搭建完毕。

一、 Rclone 安装与 WebDAV 挂载配置

首先,我们需要在服务器上配置 Rclone,让它能够顺畅地读取 Alist 中的音乐文件。

1. 安装 Rclone

在 Linux 服务器上执行官方一键安装脚本:

Bash

curl https://rclone.org/install.sh | sudo bash

2. 配置 Rclone 连接 Alist (WebDAV)

输入以下命令进入交互式配置界面:

Bash

rclone config

按照以下步骤进行交互(注意看注释):

  1. 输入 n (New remote) 创建新连接。

  2. Name(名称)输入:alist_music

  3. Storage 类型:找到并输入 webdav(或输入对应的数字,通常在 50+ 序号)。

  4. URL(服务地址):输入你的 Alist WebDAV 基础路径。注意:Alist 的 WebDAV 根路径通常是 https://你的域名/dav

    • 示例输入https://alist.oortaka.top/dav

  5. Vendor(供应商):输入 other (或者直接回车默认)。

  6. User(用户名):输入你的 Alist 登录账号(如 admin)。

  7. Password:输入 y 表示输入自己的密码,然后输入你的 Alist 登录密码。

  8. Bearer token:直接回车跳过

  9. Edit advanced config? 输入 n

  10. 确认无误后输入 y 保存,最后输入 q 退出。

3. 创建本地挂载目录

在服务器上创建一个专门给 Navidrome 读取的绝对路径:

Bash

mkdir -p /opt/1panel/docker/compose/music-navidrome/music_cloud

二、 关键:使用 Crontab 脚本进行开机自启与进程守护

为了确保 VPS 关机重启、或者 Rclone 进程意外断开后能够自动恢复挂载,我们通过 Crontab 定时任务 + Shell 脚本 来进行双重守护。

1. 创建守护脚本

在服务器中创建守护脚本文件:

Bash

nano /root/rclone_check.sh

将以下脚本内容复制进去(脚本会自动检测挂载路径是否有效,若断开则自动重新挂载):

Bash

#!/bin/bash

# 定义挂载路径和日志路径
MOUNT_PATH="/opt/1panel/docker/compose/music-navidrome/music_cloud"
LOG_PATH="/root/rclone_mount.log"

# 检测挂载点是否存在测试文件或是否可读,若未挂载则执行挂载
if ! mountpoint -q "$MOUNT_PATH"; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 检测到 Rclone 挂载已断开,正在尝试重新挂载..." >> "$LOG_PATH"
    
    # 取消可能存在的残留挂载锁定
    umount -l "$MOUNT_PATH" >/dev/null 2>&1
    
    # 执行 Rclone 挂载命令
    /usr/bin/rclone mount alist_music:/OneDrive网盘/music "$MOUNT_PATH" \
      --config=/root/.config/rclone/rclone.conf \
      --allow-other \
      --allow-non-empty \
      --vfs-cache-mode full \
      --vfs-cache-max-age 24h \
      --vfs-cache-max-size 10G \
      --buffer-size 32M &
      
    # 等待 5 秒检查挂载状态
    sleep 5
    if mountpoint -q "$MOUNT_PATH"; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Rclone 挂载成功!" >> "$LOG_PATH"
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Rclone 挂载失败,请检查配置。" >> "$LOG_PATH"
    fi
fi

保存并退出后,赋予脚本执行权限

Bash

chmod +x /root/rclone_check.sh

2. 配置 Crontab 守护

输入以下命令编辑当前用户的定时任务:

Bash

crontab -e

在文件末尾添加以下配置(实现开机自动挂载):

Plaintext

# 开机时自动执行一次挂载检查
@reboot /bin/bash /root/rclone_check.sh

保存退出即可。此时你可以放心重启 VPS,Crontab 会在系统启动为你默默守护该挂载进程。

三、 Docker Compose 部署 Navidrome

网络磁盘挂载好后,下一步就是通过 1Panel 的编排(Docker Compose)将目录映射进 Navidrome。

进入 1Panel 后台 -> 容器 -> 编排 -> 创建编排,复制并修改以下 docker-compose.yml 代码:

YAML

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    ports:
      - "4533:4533"
    environment:
      # 重点 1: 扫描频率改为每 24 小时一次,或者手动扫描。减轻云端网盘 API 和本地 CPU 负担
      ND_SCANSCHEDULE: "0 0 * * *"
      ND_LOGLEVEL: info
      # 重点 2: 针对低内存服务器,可开启并调整图像缓存增强(可选)
      ND_IMAGECACHE_SIZE: "100MB"
      TZ: Asia/Shanghai
    volumes:
      # 重点 3: 左边必须是你刚才用 Rclone 挂载的网盘绝对路径,末尾加上 :ro 表示只读安全模式
      - "/opt/1panel/docker/compose/music-navidrome/music_cloud:/music:ro"
      - "./data:/data"
    restart: unless-stopped

💡 性能优化说明(避坑必看):

  1. ND_SCANSCHEDULE:由于音乐存储在网盘,频繁的实时扫描会导致 Alist 和网盘 API 被风控。这里将其设置为 "0 0 * * *"(每天凌晨全盘扫描一次),如果新上传了歌曲,可以在 Navidrome 后台手动点击 Quick Scan 刷新。

  2. :ro (Read-Only):在挂载映射末尾加上 :ro,可以防止 Navidrome 意外修改或误删你网盘里的原始音乐文件。

点击确认并构建。等容器状态显示为 运行中 (1/1) 后,你就可以通过 http://你的服务器IP:4533 访问你的高颜值全功能音乐库了!

四、 结语与客户端推荐

初次进入网页端需要注册管理员账号。由于 Rclone 的缓存机制(--vfs-cache-mode full),首次播放或切歌时会有一两秒的缓存建立时间,之后便能享受丝滑的流媒体音乐体验。

精选全平台音质客户端推荐(在客户端内输入你的 Navidrome 网址和密码即可):

  • iOS / Apple Watch: 音流音乐 (Substreamer) / Amuse / Play:Sub

  • Android: Symfonium / Subtracks

  • Desktop: Navidrome 网页端本身就非常出色,支持自适应布局。

赶紧去折腾一下,把吃灰的网盘变成你的全能音乐随身听吧!如果在 Rclone 挂载阶段遇到报错,欢迎在评论区贴出日志交流。