手把手教你在飞牛OS (fnOS) 上通过 Docker 部署 OneDrive 客户端,实现重要数据的跨云端自动化离线备份与双向同步。

前言

飞牛OS (fnOS) 系统内置了极佳的网盘备份应用,原生支持百度网盘与阿里云盘等国内主流云存储服务。

然而出于数据安全隔离与合规考虑,部分重要文件或私人资料并不适合直接保存在国内网盘中。

飞牛OS备份示例图片

为了构建更加稳固的多重备份体系(满足 3-2-1 备份原则),将文件异地容灾备份至微软 OneDrive 离线云端是一个极佳的解决方案。本文将手把手带你通过 Docker 容器化部署开源 OneDrive 客户端,实现 NAS 数据的自动同步。

准备工作与账号注册

在开始部署之前,你需要准备好以下基础设施:

  1. 微软账号:拥有一个可用的 Microsoft 账户。若尚未注册,可前往 Microsoft 微软官方账号注册页面 申请。
  2. 扩容建议:免费账号拥有 5GB 空间。如果需要备份较多数据,推荐通过订阅 Microsoft 365 获得 1TB 的 OneDrive 云存储容量。

开启 SSH 并登录飞牛OS命令行

因为首次运行 OneDrive 客户端时需要进行交互式 OAuth 授权,我们无法仅在 UI 界面完成配置,需要临时开启 SSH 登录后台命令行。

  1. 打开飞牛OS控制台,依次进入 系统设置 -> SSH,开启 SSH 服务功能。

开启飞牛OS SSH功能

  1. 在本地电脑的终端(Windows PowerShell / Terminal 或 macOS Terminal)中输入以下命令连接飞牛OS:
BASH
ssh 你的用户名@飞牛OS的IP地址

终端执行 SSH 登录命令

  1. 当出现提示符且显示登录成功信息时,表示已成功连入 NAS 后台。

SSH 登录成功提示

切换 Root 权限与配置目录准备

为了确保 Docker 容器对挂载目录拥有完整的读写权限,我们需要切换至 root 账户并创建配置文件存储目录。

  1. 执行以下命令切换为 root 用户:
BASH
sudo su

再次输入管理员密码,当命令行提示符前缀由 $ 变为 # 时,说明已切换成功。

切换为 root 用户提示

  1. 确认你的存储池路径。飞牛OS的标准存储路径格式一般为 /vol1/1000/你的用户名/。 你也可以在飞牛OS网页端进入 文件管理 -> 我的文件 -> 右键目标文件夹 -> 详细信息 -> 点击 复制原始路径 来准确获取。

复制飞牛OS文件夹原始路径

  1. 创建用于持久化保存 OneDrive 配置信息的文件夹:
BASH
mkdir -p /vol1/1000/你的用户名/docker/onedrive/conf/

(请根据实际用户名与存储池编号替换路径中的变量)

首次交互部署与 OneDrive 账号授权

第一次运行容器时需要开启 -it 交互终端模式以完成微软账号授权。

  1. 在终端中运行以下 Docker 部署命令:
BASH
docker run -it --name onedrive \
    -v /vol1/1000/你的用户名/docker/onedrive/conf/:/onedrive/conf \
    -v 需要被同步的NAS本地路径:/onedrive/data \
    -e "ONEDRIVE_UID=1000" \
    -e "ONEDRIVE_GID=1000" \
    driveone/onedrive:latest

例如:

BASH
docker run -it --name onedrive \
    -v /vol1/1000/emz/docker/onedrive/conf:/onedrive/conf \
    -v /vol1/1000/emz/同步/onedrive:/onedrive/data \
    -e "ONEDRIVE_UID=1000" \
    -e "ONEDRIVE_GID=1000" \
    driveone/onedrive:latest
  1. 容器启动后,终端内会输出一段微软授权认证 URL 链接。

终端提示登录 OneDrive 授权链接

  1. 复制该 URL 到浏览器中打开,登录你的微软账号并同意授权。

浏览器授权页面

  1. 授权成功后,浏览器会跳转至一个空白页面(或显示成功提示)。复制当前浏览器地址栏中的完整 URL 网址,粘贴回 SSH 终端提示处并按下回车。

  2. 验证通过后,OneDrive 客户端将自动开始同步文件。

同步任务开启成功

  1. 此时在挂载的 conf 目录下会生成一个 refresh_token 文件,该文件保存了你的 OAuth 登录凭证。

conf 目录中的 refresh_token 配置文件

配置后台静默与开机自动运行

交互式授权完成后,直接按 Ctrl + C 退出容器,此时容器会停止运行。我们需要将其重建为后台静默运行模式。

  1. 删除临时交互容器:
BASH
docker rm -f onedrive
  1. 使用 -d 参数与 --restart always 重新启动持久化容器:
BASH
docker run -d --name onedrive \
    --restart always \
    -v /vol1/1000/你的用户名/docker/onedrive/conf/:/onedrive/conf \
    -v 需要被同步的NAS本地路径:/onedrive/data \
    -e "ONEDRIVE_UID=1000" \
    -e "ONEDRIVE_GID=1000" \
    driveone/onedrive:latest
  1. 此时打开飞牛OS网页端的 Docker 管理器,可以看到 onedrive 容器已在后台稳定运行。

飞牛OS Docker 管理界面展示该容器

  1. 在容器日志选项卡中,可实时监控文件同步进度与日志动态。

容器运行日志查看

配置文件与同步策略优化

在挂载的配置目录 /vol1/1000/你的用户名/docker/onedrive/conf/ 中,可以创建或修改 config 配置文件,精细化控制同步行为。

推荐配置示例:

TEXT
# 容器内挂载的同步根目录
sync_dir = "/onedrive/data"

# 双向忽略规则(正则表达式,符合的文件/文件夹不会上传也不会下载)
skip_dir = "~*|.~*|*.tmp"

# 忽略所有隐藏文件与隐藏文件夹
skip_dotfiles = "true"

更多高级参数配置(如单向备份、仅下载、带宽限制等),可查阅 OneDrive Client 官方配置说明文档。

附:Docker 部署常用参数解析

参数选项说明解析
-it开启交互式模式与伪终端(仅首次授权登录时使用)
-d容器在后台静默运行(长期运行推荐)
--name onedrive指定容器名称为 onedrive
-v <宿主机路径>:<容器路径>挂载文件目录,将飞牛OS本地磁盘映射入容器内部
-e "ONEDRIVE_UID=1000"设置容器内运行用户的 UID,避免产生权限错乱
--restart always设置容器开机自启及异常崩溃后自动重启

版权声明

链接: https://blog.fusi.cc/posts/fnos-onedrive-backup-guide/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。