Backrest + OpenList 加密备份数据到网盘
为什么我要用Backrest加密备份到网盘,而不是仅仅依赖RAID?RAID 解决的是硬盘故障时的可用性问题——某块盘坏了,阵列还能继续工作。但你误删了文件,RAID 会在所有盘上同步删除文件;勒索软件加密了你的数据,RAID 会保存加密后的版本;文件系统损坏、bug导致数据写坏等等,RAID一样无能为力。更别提火灾、被盗这些物理因素——数据和 NAS 一起没了,再怎么冗余也救不回来。
所以RAID只是冗余,而不是备份,真正可靠的数据保护需要遵循 3-2-1 备份原则:
- 3 份数据副本(原始数据 + 2 份备份)
- 2 种不同的存储介质(比如本地硬盘 + 云端)
- 1 份异地备份(物理上与原始数据不在同一个地方)
本地存储解决手滑删错和硬盘故障的问题,异地云端副本解决”整台设备没了”的问题。两者缺一不可。
前置说明
优点
- 数据安全不依赖网盘。restic 对所有数据进行 AES-256 加密并附带完整性校验,网盘只能看到一堆密文。即使网盘账号泄露,别人拿到的也只是无法解密的二进制块。
- 增量备份 + 去重,省空间也省带宽。restic 按内容分块去重,只有真正变化的部分才会被上传。日常备份场景下,每次的实际传输量很小。
- 快照机制,可以回滚到任意历史版本。每次备份生成一个独立快照,配合保留策略,你可以精确恢复到某一天、某一周的状态,而不是只有最新的一份。
- 全程 Web 界面管理。Backrest 提供可视化的备份调度、快照浏览、恢复操作界面,日常使用不需要碰命令行。
- Docker 部署,迁移方便。整套方案一个 compose 文件拉起,换机器时搬走配置目录即可。
整体链路
Backrest → restic → rclone → WebDAV → OpenList → 网盘
各组件的角色:
- restic:负责加密、去重、快照,是实际干活的备份引擎
- rclone:restic 不直接支持 WebDAV,rclone 作为中间层桥接协议
- OpenList:把网盘挂载成 WebDAV 服务,让 rclone 能访问
- Backrest:给 restic 套了一层 Web UI,提供调度、快照浏览、恢复操作
这套方案我自己已经稳定跑了很长一段时间,整体链路验证下来是可靠的。
Docker Compose 部署
先把 OpenList 和 Backrest 两个服务拉起来。下面是 compose 文件,几个需要注意的地方我直接标在后面:
version: "3.8"
services:
openlist:
image: openlistteam/openlist:latest
restart: unless-stopped
user: "${UID}:${GID}"
ports:
- "7801:5244"
volumes:
- ./openlist:/opt/openlist/data
environment:
- TZ=Asia/Shanghai
backrest:
image: garethgeorge/backrest:latest
restart: unless-stopped
depends_on:
- openlist
ports:
- "7800:9898"
volumes:
- ./backrest/data:/data
- ./backrest/config:/config
- ./backrest/cache:/cache
- ./rclone:/root/.config/rclone
- /path/to/your/data:/userdata:ro
environment:
- BACKREST_DATA=/data
- BACKREST_CONFIG=/config/config.json
- XDG_CACHE_HOME=/cache
- TZ=Asia/Shanghai
Code language: PHP (php)几点说明:
user字段:OpenList v4.1.0 起容器内默认用户为 openlist(1001),映射目录需要有对应权限。这里用${UID}:${GID}环境变量来适配你的实际用户,你也可以直接写死(例如"1000:1000")。如果不想折腾权限问题,"0:0"以 root 运行最省事,但生产环境请酌情考虑安全性。ports:按你的喜好自定义宿主机端口映射,本文以 7801(OpenList)和 7800(Backrest)为例。/path/to/your/data:/userdata:ro:把/path/to/your/data改成你想备份的宿主机目录。如果只用作备份(不需要通过 Backrest 写入源数据),建议保持:ro只读挂载,防止误操作。
两个服务在同一个 compose 项目里,会自动加入同一个 Docker 网络。后面 rclone 配置 WebDAV 地址时可以直接用容器名 openlist 互通,不需要走宿主机 IP。
启动服务:
docker compose up -d
验证两个容器都在跑:docker compose ps,确认状态都是 Up。
配置 OpenList
获取初始密码
OpenList 首次启动会随机生成 admin 密码,查看容器日志拿到它:
docker logs -f backrest-openlist-1
在日志输出中找到类似 Initial password: xxxxxxxx 的行,记下这个密码。

登录后台
浏览器访问 http://你的机器IP:7801/,用 admin 账号和上一步拿到的密码登录。

添加存储
进入存储页面,点击添加。

我用的是百度网盘,所以驱动选择百度网盘(按实际情况选择其他网盘亦可),填写以下关键配置项,完成后点击添加。
注意:强烈建议参考 OpenList 官方文档按需配置,本文的配置仅供参考,不一定有普适性!

各字段含义:
- 挂载路径:该存储在 OpenList 里对外显示的虚拟路径,例如
/baidu。后面 rclone 通过 WebDAV 访问时会用到这个路径。 - 缓存过期时间:个人使用场景下可以调低到
1(分钟),让文件列表更及时刷新。 - 启用签名:建议开启,避免文件链接被直接访问。
- 根文件夹路径:指定网盘里的哪个目录作为此存储的根目录,例如
/Backup,避免暴露网盘中的其他内容。 - 使用在线 API、客户端 ID、客户端密钥、刷新令牌:这几项是接入百度网盘 API 的核心凭据,请务必仔细参照官方文档获取。
如果你无法信任官方提供的 Token Generator,可以自行部署:https://github.com/OpenListTeam/OpenList-APIPages
开启 WebDAV
restic 不直接支持网盘,我们需要通过 OpenList 的 WebDAV 功能,再配合 rclone 来桥接。默认情况下 admin 账号的 WebDAV 写入权限未开启,需要手动配置。
点击用户,编辑 admin:

勾选 WebDAV 管理(备份场景需要完整的读写权限,如果还有”WebDAV 读取”等选项也一并勾选):

配置 rclone
Backrest 的 Docker 镜像已经内置了 rclone,直接在容器内配置。
进入交互式配置:
docker exec -it backrest-backrest-1 rclone config
按以下步骤操作:
- 选择
n(New remote) - Name:随意,例如
openlist - Type:选择
webdav(编号 59,可能因版本不同而变化) - URL:填写
http://openlist:5244/dav/(两个容器在同一 compose 网络里,直接用服务名互通) - Vendor:直接回车留空
- User / Password:填写 OpenList 的用户名和密码
- Bearer token:直接回车留空
- Edit advanced config:选择
n - Keep this “openlist” remote:选择
y,然后q退出
配置完成后,验证连通性:
docker exec -it backrest-backrest-1 rclone lsd openlist:
如果能看到你在 OpenList 中挂载的存储目录(例如 baidu),说明 rclone → WebDAV → OpenList 这条链路已经通了。如果报错,先检查 OpenList 容器是否正常运行、WebDAV 权限是否开全。
配置 Backrest
初始设置
浏览器访问 http://你的机器IP:7800/,首次进入需要配置实例 ID、用户名和密码。

添加仓库
点击添加仓库,填写以下配置:

- 仓库名称:任意,例如
baidu - 仓库 URI:格式为
rclone:remote名称:路径,例如rclone:openlist:/baidu/restic。其中openlist是上一步创建的 rclone remote 名称,/baidu/restic是 OpenList 中的路径(/baidu对应挂载路径,/restic是备份仓库的子目录)。 - 密码:设置一个足够复杂的密码,restic 会用它对整个备份仓库进行 AES-256 加密。这个密码丢了就无法恢复数据,请务必妥善保管。
填完后先点测试配置验证连通性,没问题再提交。Backrest 会自动初始化 restic 仓库,完成后你能在百度网盘对应目录下看到 restic 的标准仓库结构(config、data/、index/、keys/ 等)。
配置备份计划
点击添加调度计划,填写以下内容:

- 调度计划名称:随意,例如
daily-backup - 仓库:选择刚刚创建的仓库
- 路径:填写你想备份的容器内目录,例如
/userdata(对应 compose 中挂载的宿主机目录) - 备份周期:按需配置,例如每天凌晨执行
- 快照保留策略:配置保留多少个快照,常见策略如保留最近 7 个、每天 1 个保留 14 天、每周 1 个保留 8 周等,根据你的存储空间和需求调整
备份参数中可以进一步调优:

- 包大小(单位 MB):restic 打包数据的块大小。如果网络不稳定,可以适当调小,降低单次传输失败的影响。
- 上传限速(单位 KB/s):避免备份任务占满带宽影响其他服务,按需设置即可。
配置完成后,备份计划会按设定的周期自动执行。你也可以在 Backrest 界面手动触发一次备份,验证整条链路是否畅通。
小结
这套方案能够做到异地备份,端到端加密 + 增量去重,加上 Backrest 的 Web 管理界面,日常维护成本不高。
如果你的备份目标不是百度网盘,只需要把 OpenList 里的存储驱动换成对应网盘,其余配置基本不变。
另外需要说明的是:通过 OpenList 挂载网盘不一定能做到 100% 稳定可靠。网盘侧可能会有接口限流、鉴权刷新失败、偶发超时、以及对大文件/高频小文件写入的兼容性差异。因此更稳妥的做法是把备份当作“多副本”来设计:同时备份到两个不同的网盘(或两种不同介质),避免单一链路故障导致备份不可用。如果预算充足、且更在意长期稳定性与可维护性,也可以考虑使用云厂商提供的对象存储作为备份后端。
