231 lines
6.8 KiB
Markdown
231 lines
6.8 KiB
Markdown
Loading...
|
||
|
||
[
|
||
](https://cdn.ssslove.com/files/2026/03/VZmrhwfJspC.webp!wwater)
|
||
|
||
[群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略](https://cdn.ssslove.com/files/2026/03/VZmrhwfJspC.webp!wwater)
|
||
|
||
写在最前面
|
||
-----
|
||
|
||
因为将我的群晖DSM升级到7.3版本,导致之前用代码安装的rclone直接没了,所以就想着用Docker部署rclone,将遇到的问题到最后完成部署后的结果整理成了这篇文章。
|
||
|
||
前言:为什么你之前的挂载都失败了?
|
||
-----------------
|
||
|
||
许多群晖用户在尝试通过 OpenList/Alist 挂载网盘时,往往会遇到三个看似"玄学"的问题:
|
||
|
||
| 问题现象 | 根本原因 |
|
||
| --- | --- |
|
||
| File Station 能看到文件,Plex 却扫不到 | Plex 套件缺乏访问 FUSE 虚拟文件系统的权限 |
|
||
| 播放 4K 原盘频繁卡顿 | 缺少本地缓存机制,网盘 API 被高频请求触发限速 |
|
||
| 重启 NAS 后挂载点变空 | 群晖默认存储卷挂载属性为 `Private`,容器挂载无法同步至宿主机 |
|
||
|
||
**本文核心解决方案**:通过 Docker Rclone 配合 **挂载传播(Mount Propagation)** 技术,构建一个稳定、高性能的网盘挂载架构。
|
||
|
||
* * *
|
||
|
||
第一阶段:宿主机底层环境加固(SSH 必做)
|
||
----------------------
|
||
|
||
这是整个方案的"地基"。地基不稳,后续容器运行再顺畅,Plex 也无法识别文件。
|
||
|
||
### 1\. 开启 FUSE 内核支持
|
||
|
||
FUSE(用户态文件系统)是 Rclone 在 Linux 上模拟硬盘的基础依赖:
|
||
|
||
```null
|
||
sudo modprobe fuse
|
||
|
||
```
|
||
|
||
### 2\. 修改存储卷共享属性(核心步骤)
|
||
|
||
群晖默认禁止容器修改宿主机挂载表,需手动将存储卷改为 `shared` 模式:
|
||
|
||
```null
|
||
# 将 /volume4 替换为你实际的存储卷路径(如 /volume1)
|
||
sudo mount --make-shared /volume4
|
||
|
||
```
|
||
|
||
### 3\. 建立标准化目录结构
|
||
|
||
建议统一存放 Docker 配置文件,便于日后迁移和维护,以下为示例:
|
||
|
||
```null
|
||
# Rclone 配置文件目录
|
||
mkdir -p /volume4/docker/rclone/config
|
||
|
||
# VFS 缓存目录(建议选用 SSD 卷,加速 Plex 元数据扫描)
|
||
mkdir -p /volume4/docker/rclone/cache
|
||
|
||
# Plex 最终扫描的物理挂载点(需保持为空文件夹)
|
||
mkdir -p /volume4/OpenList
|
||
|
||
```
|
||
|
||
* * *
|
||
|
||
第二阶段:精细化配置 Rclone 凭据
|
||
--------------------
|
||
|
||
### 1\. 密码加密(不能填明文哦)
|
||
|
||
Rclone 配置文件禁止存储明文密码。执行以下命令生成加密字符串:
|
||
|
||
```null
|
||
docker run --rm rclone/rclone obscure [你的OpenList密码]
|
||
|
||
```
|
||
|
||
记录输出结果(如 `EY_L_2...`),用于下一步配置。
|
||
|
||
### 2\. 编写 rclone.conf
|
||
|
||
编辑 `/volume4/docker/rclone/config/rclone.conf`:
|
||
|
||
```null
|
||
[openlist]
|
||
type = webdav
|
||
url = http://127.0.0.1:5244/dav # 必须包含端口和路径
|
||
vendor = other # 没错,就是other
|
||
user = admin # 你的用户名
|
||
pass = EY_L_2... # 填入上一步生成的加密字符串
|
||
|
||
```
|
||
|
||
⚠️ **关键细节**:
|
||
|
||
* **URL 格式**:必须包含端口号 `5244` 和路径 `/dav`,端口号请填写你自己的。
|
||
* **禁止尾随斜杠**:URL 结尾不加 `/`,否则可能会触发 `405 Method Not Allowed` 错误。
|
||
|
||
* * *
|
||
|
||
第三阶段:部署高性能挂载容器
|
||
--------------
|
||
|
||
部署前建议清理可能存在的僵尸挂载点:
|
||
|
||
```null
|
||
sudo fusermount -u -z /volume4/OpenList 2>/dev/null || true
|
||
|
||
```
|
||
|
||
执行部署命令:
|
||
|
||
```null
|
||
docker run -d \
|
||
--name rclone-mount \
|
||
--restart always \
|
||
--privileged \
|
||
--network host \
|
||
--device /dev/fuse \
|
||
-e PUID=0 \
|
||
-e PGID=0 \
|
||
-e TZ=Asia/Shanghai \
|
||
-v /etc/localtime:/etc/localtime:ro \
|
||
-v /volume4/docker/rclone/config:/config/rclone \
|
||
-v /volume4/docker/rclone/cache:/cache \
|
||
-v /volume4/OpenList:/data:shared \
|
||
rclone/rclone \
|
||
mount openlist:/ /data \
|
||
--config /config/rclone/rclone.conf \
|
||
--allow-other \
|
||
--allow-non-empty \
|
||
--vfs-cache-mode full \
|
||
--vfs-cache-max-size 20G \
|
||
--vfs-cache-max-age 24h \
|
||
--cache-dir /cache \
|
||
--buffer-size 64M \
|
||
--vfs-read-chunk-size 32M \
|
||
--vfs-read-chunk-size-limit 1G \
|
||
--attr-timeout 10s \
|
||
--dir-cache-time 24h \
|
||
--umask 000
|
||
|
||
```
|
||
|
||
### 核心参数解析
|
||
|
||
| 参数 | 作用说明 |
|
||
| --- | --- |
|
||
| `:shared` | **挂载传播关键**,使宿主机能够感知容器内的挂载变化 |
|
||
| `--vfs-cache-mode full` | 启用完整 VFS 缓存,让网盘文件表现为本地文件特性 |
|
||
| `--vfs-cache-max-size 20G` | 限制缓存上限,防止 Plex 扫库时耗尽 NAS 存储 |
|
||
| `--umask 000` | 赋予挂载点 777 权限,确保 Plex 能够正常读取 |
|
||
| `--vfs-read-chunk-size 32M` | 顺序读取时的初始块大小,优化大文件播放性能 |
|
||
| `-e PUID=0 -ePGID=0` | 可以修改为管理员的,但是要注意权限 |
|
||
|
||
* * *
|
||
|
||
第四阶段:Docker 版 Plex 的特别配置
|
||
------------------------
|
||
|
||
若使用 Docker 部署 Plex,需进行**路径二次穿透**:
|
||
|
||
### 1\. 添加卷映射
|
||
|
||
在 Plex 容器配置中增加:
|
||
|
||
* **宿主机路径**:`/volume4/OpenList`
|
||
* **容器路径**:`/video`(可自定义)
|
||
|
||
### 2\. 必须添加 `:shared` 后缀
|
||
|
||
```null
|
||
-v /volume4/OpenList:/video:shared
|
||
|
||
```
|
||
|
||
**原理说明**:不加 `:shared` 时,宿主机挂载点更新后,Plex 容器因命名空间隔离无法感知变化。
|
||
|
||
* * *
|
||
|
||
第五阶段:自动化运维与故障排查
|
||
---------------
|
||
|
||
### 1\. 开机自动配置(群晖任务计划)
|
||
|
||
群晖重启后内核设置会重置。进入 **控制面板 > 任务计划 > 新增 > 触发的任务**:
|
||
|
||
* **事件**:开机
|
||
* **用户**:root
|
||
* **脚本内容**:
|
||
|
||
```null
|
||
#!/bin/bash
|
||
modprobe fuse
|
||
mount --make-shared /volume4
|
||
|
||
```
|
||
|
||
### 2\. 常见故障速查表
|
||
|
||
| 报错现象 | 根因分析 | 解决方案 |
|
||
| --- | --- | --- |
|
||
| `Input/output error` | 挂载死锁或容器异常重启 | 停止容器,执行 `fusermount -u -z /volume4/OpenList` 强制卸载后重启 |
|
||
| `405 Method Not Allowed` | URL 格式错误 | 检查 `rclone.conf` 中 URL 是否以 `/` 结尾 |
|
||
| Plex 扫描不到文件 | 挂载传播未生效 | 确认宿主机执行了 `mount --make-shared` 且 Docker 映射包含 `:shared` |
|
||
| Plex 海报加载缓慢 | VFS 缓存正在构建 | 正常现象,等待 Rclone 将元数据下载至 `/cache` 目录 |
|
||
|
||
* * *
|
||
|
||
结语
|
||
--
|
||
|
||
完成上述配置后,你的网盘已通过 Rclone 无缝"寄生"在群晖本地。Plex 扫描 `/volume4/OpenList` 时,体验将与本地硬盘无异。
|
||
|
||
🎬 **享受你的高清私人影院吧!**
|
||
|
||
* * *
|
||
|
||
### 💡 进阶建议:Plex 资料库优化
|
||
|
||
进入 **Plex 设置 > 资料库**,建议调整以下选项以降低网盘 API 调用频率:
|
||
|
||
* ✅ 禁用 **"定期扫描"**
|
||
* ✅ 禁用 **"检测到更改时扫描"**
|
||
* ✅ 改为 **手动扫描** 或设置 **凌晨低峰期定时扫描**
|
||
|
||
此举可显著降低网盘服务商的流量风控风险,提升长期稳定性。 |