https://github.com/momo-z/VaultFleet
🛡️ VaultFleet
像探针一样部署 Agent,像备份平台一样统一编排多台 Linux 服务器的备份、快照和恢复。
Go · Gin · SQLite · React · restic · rclone · Docker · MIT License
VaultFleet 是一个面向多台 VPS / Linux 服务器的集中式备份管理系统。它采用 Master + Agent 架构:Master 提供 Web UI、API、策略管理、任务历史、快照和通知;Agent 安装在每台服务器上,主动连接 Master,接收备份策略,并使用 restic + rclone 将备份数据直接写入对象存储、WebDAV、SFTP、网盘或其他 rclone 后端。
备份数据不经过 Master。Master 负责控制面和元数据,Agent 负责本机执行和上传。
📸 截图
| 仪表盘 | 节点列表 |
|---|---|
![]() |
![]() |
| 节点详情 | 创建存储 |
|---|---|
![]() |
![]() |
| 创建策略 | 任务历史 |
|---|---|
![]() |
![]() |
| 快照浏览 | 节点添加 |
|---|---|
![]() |
![]() |
✨ 核心功能
- Master + Agent 架构 — 多台服务器统一接入,集中管理备份策略、任务历史、快照和恢复操作。
- 出站连接 Agent — Agent 主动连接 Master,不要求被备份服务器开放公网入站端口。
- restic 加密仓库 — 使用成熟的 restic 作为备份引擎,每台 Agent 可使用独立仓库路径和独立仓库密码。
- rclone 多后端存储 — 支持 S3 / R2 / MinIO、WebDAV、SFTP、本地路径,以及其他 rclone 可访问的后端。
- 集中备份策略 — 在 Web UI 中配置备份目录、排除规则、Cron 调度、保留策略、任务超时和高级 rclone 参数。
- 任务进度与取消 — 运行中的备份会上报阶段、文件数、字节数和传输速度,长任务支持取消。
- 快照浏览 — 支持刷新快照列表,并在 Web UI 中浏览单个快照里的文件树。
- 整机 / 选择性恢复 — 可以恢复整份快照,也可以选择快照中的部分路径恢复到指定目录。
- 通知与诊断 — 支持 Telegram、Webhook、健康检查、系统诊断包和 Agent 日志收集。
- Agent 自更新 — Master 可感知 Agent 版本,Agent 可通过 GitHub Release 下载新版二进制并重启。
- Master 数据导出 / 导入 — Web UI 支持导出和恢复 Master 元数据、配置和密钥,方便迁移控制面。
🔒 安全与信任边界
| 特性 | 说明 |
|---|---|
| 备份数据不经过 Master | Agent 直接把数据写入存储端,Master 只负责控制面和元数据 |
| 一次性注册令牌 | 节点安装时使用 ek_ enrollment token,注册后换发长期 agent_token |
| 管理员密码哈希 | Master 使用 bcrypt 保存管理员密码哈希 |
| 敏感配置加密 | rclone 配置、restic 密码和通知凭据在 Master 数据库中加密保存 |
| Master 主密钥 | /data/master.key 用于解密 Master 侧敏感配置,需要和数据库一起妥善备份 |
| Agent 出站连接 | 节点不需要开放入站端口,适合 VPS、内网机、家用服务器等环境 |
| 本地策略副本 | Agent 保存本地策略,Master 短暂离线时不影响已下发的定时备份 |
| 生产部署建议 | 建议通过反向代理启用 HTTPS / WSS,不建议裸 HTTP 暴露到公网 |
🛠️ 技术栈
| 层次 | 技术 | 用途 |
|---|---|---|
| 后端 | Go + Gin | Master HTTP API、路由和中间件 |
| 数据库 | SQLite + GORM | 节点、策略、任务历史、快照和配置持久化 |
| 前端 | React 19 + Vite + Tailwind CSS | Web 控制台 |
| 控制面通信 | WebSocket + JSON 消息 | Agent 心跳、策略下发、任务结果、快照浏览、恢复请求 |
| 备份引擎 | restic | 加密备份、快照、恢复 |
| 存储适配 | rclone | S3、WebDAV、SFTP、本地路径和其他后端 |
| 调度 | robfig/cron | Agent 本地定时备份 |
| 通知 | Telegram / Webhook | 任务结果和系统事件通知 |
| 部署 | Docker / Docker Compose | Master 一键自托管部署 |
| Agent 服务 | systemd / OpenRC / nohup fallback | Linux 节点守护运行 |
🏗️ 架构
┌─────────────────────────────────────────────────┐
│ 浏览器 │
│ React Web 控制台 │
│ 仪表盘 · 节点 · 存储 · 策略 · 任务 · 快照 │
└────────────────────┬────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ VaultFleet Master │
│ Gin HTTP API · WebSocket 控制面 · SQLite │
│ 策略管理 · 任务历史 · 快照索引 · 通知 · 诊断 │
└───────┬────────────┬────────────┬────────────────┘
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────────┐
│ 管理 │ │ 策略 │ │ 通知 / 诊断 │
│ 服务 │ │ 服务 │ │ 服务 │
└────┬─────┘ └────┬─────┘ └──────┬───────┘
▼ ▼ ▼
┌──────────┐ ┌──────────────────────────────┐
│ SQLite │ │ WebSocket 下发策略 / 命令 │
│ 元数据 │ │ 心跳 · 备份 · 恢复 · 日志 │
│ + 密钥 │ └──────────────┬───────────────┘
└──────────┘ │
▼
┌──────────────────────────┐
│ VaultFleet Agent │
│ restic + rclone 本机执行 │
│ 定时备份 · 快照 · 恢复 │
└────────────┬─────────────┘
│
▼
┌──────────────────────────┐
│ S3 / R2 / MinIO / WebDAV │
│ SFTP / 本地路径 / 网盘 │
│ 备份数据直接写入存储端 │
└──────────────────────────┘
请求流向:浏览器 → Master Web UI / API → WebSocket 控制面下发策略或命令 → Agent 本机执行 restic 备份 / 恢复 → Agent 通过 rclone 直接写入远端存储 → Agent 回传任务结果、进度和快照信息。
🚀 快速开始
1. 启动 Master
docker compose up -d
默认镜像:
ghcr.io/momo-z/vaultfleet:latest
也可以直接运行:
docker run -d \
--name vaultfleet \
-p 8080:8080 \
-v "$(pwd)/data:/data" \
--restart unless-stopped \
ghcr.io/momo-z/vaultfleet:latest
首次访问 Web UI 后初始化管理员账号。
2. 添加节点并安装 Agent
在 Web UI 的节点管理中创建节点后,Master 会生成一次性注册令牌和安装命令,例如:
curl -fsSL https://MASTER_HOST/install.sh | bash -s -- \
--server https://MASTER_HOST \
--token ek_xxxxxxxxxxxxxxxxxxxxxxxx
安装脚本会自动:
- 检测 Linux 架构。
- 下载
vaultfleet-agent。 - 安装或准备
restic和rclone。 - 创建
/etc/vaultfleet/配置目录。 - 使用一次性 token 注册节点。
- 创建并启动 systemd / OpenRC 服务;没有支持的 init system 时使用
nohupfallback。
3. 创建存储与备份策略
- 在 存储配置 中添加 S3 / R2 / MinIO、WebDAV、SFTP 或其他 rclone 后端。
- 在 节点管理 中安装 Agent 并等待上线。
- 在 备份策略 中选择节点和存储,配置备份目录、排除规则、Cron 调度、保留策略和任务超时。
- 在 任务历史 中查看运行进度和结果。
- 在 快照浏览 中查看快照内容,并执行整份恢复或选择性恢复。
🎯 适合场景
- 手里有多台 VPS,想统一管理备份策略。
- 想用 restic 做加密备份,但不想每台机器都手写 cron 和脚本。
- 备份目标分散在 S3、R2、MinIO、WebDAV、SFTP、AList、NAS 等环境。
- 希望有 Web UI 查看任务历史、快照列表、恢复进度和失败日志。
- 服务器不方便开放入站端口,只能主动连出去。
- 想要一个轻量的自托管备份控制面,而不是复杂的企业备份平台。
⚠️ 设计取舍
- VaultFleet 不是备份数据中转服务,备份数据不会上传到 Master。
- Master 属于信任边界,因为它保存并下发执行备份所需的 restic 仓库密码和存储配置。
- 目前 Agent 面向 Linux
amd64/arm64。 - 生产环境建议固定镜像 tag,并通过 HTTPS / WSS 暴露 Master。
- Master 数据导出只包含控制面数据,不包含远端 restic 仓库里的实际备份内容。
📦 项目地址
GitHub:
https://github.com/momo-z/VaultFleet
欢迎试用、提 issue、提需求,也欢迎对多节点备份、rclone 后端、restic 工作流有经验的朋友一起交流。








