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

安装脚本会自动:

  1. 检测 Linux 架构。
  2. 下载 vaultfleet-agent
  3. 安装或准备 resticrclone
  4. 创建 /etc/vaultfleet/ 配置目录。
  5. 使用一次性 token 注册节点。
  6. 创建并启动 systemd / OpenRC 服务;没有支持的 init system 时使用 nohup fallback。

3. 创建存储与备份策略

  1. 存储配置 中添加 S3 / R2 / MinIO、WebDAV、SFTP 或其他 rclone 后端。
  2. 节点管理 中安装 Agent 并等待上线。
  3. 备份策略 中选择节点和存储,配置备份目录、排除规则、Cron 调度、保留策略和任务超时。
  4. 任务历史 中查看运行进度和结果。
  5. 快照浏览 中查看快照内容,并执行整份恢复或选择性恢复。

🎯 适合场景

  • 手里有多台 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 工作流有经验的朋友一起交流。