Releases: Awuqing/BackupX
v2.3.5
v2.3.4
Full Changelog: v2.3.1...v2.3.4
Full Changelog: v2.3.1...v2.3.4
v2.3.3
What's Changed
- feat: add complete MFA support by @Awuqing in #51
- fix: respect local timezone for scheduler by @Awuqing in #54
Full Changelog: v2.3.2...v2.3.3
What's Changed
- feat: add complete MFA support by @Awuqing in #51
- fix: respect local timezone for scheduler by @Awuqing in #54
Full Changelog: v2.3.2...v2.3.3
v2.3.2
Full Changelog: v2.2.1...v2.3.2
v2.3.1
v2.3.0
v2.2.1
What's Changed
Full Changelog: v2.2.0...v2.2.1
v2.2.0 — 节点池调度 + Grafana Dashboard
v2.2.0 — 集群运维闭环
v2.1 给了 看 的能力,v2.2 补齐 调度 和 可视化。
新特性
🎯 节点池动态调度
model.Node.LabelsCSV 标签 +model.BackupTask.NodePoolTag- 任务不再只能绑定固定节点:配置
NodePoolTag后,从命中标签的在线节点中按"当前运行任务数最少"自动选 - 空池立即报错(
NODE_POOL_EMPTY),不静默吞错 NodeID与NodePoolTag互斥(校验层拦截)- 不回写
task.NodeID,每次执行重新选 → 真轮转均衡
📊 Grafana Dashboard 预置
deploy/grafana/backupx-dashboard.json11 面板:- 概览 stat:运行中任务 / SLA 违约 / 在线节点 / 24h 成功率 / 应用版本
- 时序:任务速率堆叠、P50/P95/P99 耗时、产出字节、验证/恢复/复制成功率
- 容量:存储目标用量 TopN / 节点在线状态表(0/1 → 红/绿)
deploy/grafana/README.md含 Prometheus 抓取配置 + AlertManager 建议- Release workflow 打包
grafana/+nginx.conf到 tar.gz
👀 Agent 版本漂移 UI
- 节点列表 Agent 版本列:与 Master 不同时橙红 Tag + Tooltip 提示升级
- 新增"标签/节点池"列,Tag 渲染
- 编辑弹窗支持 Labels / MaxConcurrent / BandwidthLimit 一起改
升级指南
完全兼容 v2.1,无需迁移:
Labels/NodePoolTag新字段默认为空,老任务行为不变- 想启用节点池:节点管理页编辑节点,填
prod,db类标签;任务表单新增的节点池字段填db即可
Grafana 导入:下载发布包中的 grafana/backupx-dashboard.json,在 Grafana → Dashboards → Import 上传即可。
Changelog
- 功能: v2.2 节点池调度 + Grafana Dashboard + 版本漂移 UI — #49
完整提交:v2.1.0...v2.2.0
What's Changed
Full Changelog: v2.1.0...v2.2.0
What's Changed
Full Changelog: v2.1.0...v2.2.0
v2.1.0 — 可观测性与集群流控
v2.1.0 — 让 BackupX 融入企业 SRE 体系
在 v2.0 "企业级备份管理平台" 基础上,本版本专注投入生产后的运维体验。
新特性
🔭 可观测性(PR #47)
- Prometheus
/metrics端点:11 类指标开箱即用- 任务计数 / 耗时直方图 / 产出字节
- 正在运行任务数 / 存储用量 / 节点在线
- 验证、恢复、复制各自的成功失败计数
- SLA 违约任务数 gauge
- 独立 registry + 30s 异步 Gauge collector,请求路径无慢 IO
🎚️ 流控精细化(PR #47)
- 节点级带宽限速:
model.Node.BandwidthLimit现在会实际生效,覆盖全局默认 - 大/小节点可独立配置上行带宽,避免弱网节点挤爆集群
📤 审计日志 Webhook(PR #47)
- 每条审计事件异步转发到外部 URL,HMAC-SHA256 签名防伪造
- 配置路径:
PUT /api/settings设置audit_webhook_url+audit_webhook_secret - 适合 SIEM / WORM 存储集成,满足 SOC2 / GDPR 合规
修复
🐛 #46 Agent 一键安装脚本在 Debian/反向代理场景下执行失败(PR #48)
用户反馈 curl -fsSL URL | sudo sh 在 Debian 12 报 "sh: 2: Syntax error: newline unexpected"。根因是用户的 nginx 只转发 /api/,/install/:token 被 SPA try_files fallback 成了 index.html。curl 拿到 HTML 喂给 sh 当然报错。
修复:
- 新增
/api/install/:token路径别名,自动走反向代理的/api/转发规则 - 前端生成的 install URL 改用
/api/install/前缀 - 前端推荐命令改为
| sudo bash(避开 Debian dash 差异) - 脚本模板加魔数标记 + bash 自举段,方便用户自查响应完整性
- install handler Content-Type 改
text/plain,加nosniff/no-store/Content-Disposition防嗅探 deploy/nginx.conf模板加/install///health//ready//metrics单独转发
升级指南
完全兼容 v2.0,无需迁移。
- 已有 nginx 反向代理用户:重新生成节点安装命令即可,新 URL 用
/api/install/前缀自动命中已有代理 - 想接 Prometheus:抓取
http://your-backupx:8340/metrics,scrape_interval: 30s建议 - 想配审计外输:
PUT /api/settings写入audit_webhook_url+audit_webhook_secret
Changelog
- $(gh pr view 47 --repo Awuqing/BackupX --json title --jq .title) — #47
- $(gh pr view 48 --repo Awuqing/BackupX --json title --jq .title) — #48
完整提交:v2.0.0...v2.1.0
What's Changed
Full Changelog: v2.0.0...v2.1.0
What's Changed
Full Changelog: v2.0.0...v2.1.0
v2.0.0 — 企业级备份管理平台
v2.0.0 — 从"能备份"升级为"企业级备份管理平台"
本版本围绕可靠、可验证、可度量、可冗余、可治理、可规模化、可运维、可部署、可感知的九大企业级支柱,新增 70+ 文件、14k+ 行代码,全链路测试与类型检查通过。
⚠️ 破坏性变更:POST /backup/records/:id/restore返回格式由同步{restored: true}改为异步{restoreRecordId, status, ...}。使用旧 API 的脚本需要改造。详情见文末"升级指南"。
集群能力
- 节点选择器修复:任务表单新增执行节点选择,此前集群场景任务被迫
NodeID=0的 Bug 得到修复 - 集群感知恢复:
RestoreRecord独立表 + 节点路由(本机/远程 Agent)+ SSE 实时日志 + 异步执行 - 集群可靠性:
- Agent 命令超时联动备份/恢复记录状态
- 离线节点拒绝执行,避免空等
- 调度器自动跳过离线节点,不再堆积 failed 记录
- 数据库发现(MySQL/PostgreSQL)路由到目标节点执行
- 跨节点 local_disk 保护:Master 不再误访问远程节点本地磁盘
- 节点级资源配额:
Node.MaxConcurrent/BandwidthLimit+ per-node semaphore - Agent 版本感知:
ClusterVersionMonitor扫描远程 Agent 版本,落后 Master 时派发agent_outdated事件 - Dashboard 集群概览:总节点 / 在线 / 离线 / Agent 过期数一眼可见
- 节点性能统计:每节点执行次数 / 成功率 / 字节数 / 平均耗时
核心企业能力
备份验证(合规刚需)
- 新增
verification_records表 +VerificationService - 5 类备份格式原生校验:tar / sqlite / mysql dump / postgresql dump / saphana archive
- 定时验证 cron + 手动触发,失败派发
verify_failed事件 - 独立 "验证演练" 页面与 SSE 日志
SLA 监控
BackupTask.SLAHoursRPO+AlertOnConsecutiveFails两个企业级字段- 后台 15 分钟扫描违约任务,派发
sla_violation事件(同任务 6 小时内不重复告警) - Dashboard 合规视图:合规率 / 违约任务列表 / 距上次成功时间
3-2-1 备份复制
- 新增
replication_records表 +ReplicationService - 每次备份成功后自动镜像到副本存储;也支持手动触发
- 跨节点 local_disk 源自动拒绝(Master 无法访问远程)
- 失败派发
replication_failed事件
RBAC + API Key(企业身份治理)
- 三级角色:
admin/operator/viewer RequireRole/RequireNotViewer中间件保护所有写入类端点- API Key(
bax_前缀,HMAC-SHA256 + pepper 哈希存储)- 用于 CI/CD、监控脚本等非交互场景
- 支持 TTL、启停、撤销、LastUsedAt 追踪
- 前端菜单按角色过滤,viewer 自动隐藏写入按钮
事件总线
11 类事件,前后端共享:backup_success / backup_failed / restore_success / restore_failed / verify_failed / sla_violation / storage_unhealthy / storage_capacity_warning / replication_failed / agent_outdated / storage_capacity_warning
- Notification 可订阅任意组合(Webhook/邮件/Telegram)
- EventBroadcaster(SSE)推送到前端 Dashboard / EventCenter
规模化运维
- 任务模板:常用参数一次保存,一键批量创建(100+ 任务场景)
- 任务批量操作:批量执行 / 启停 / 删除
- 任务依赖链(工作流):上游成功触发下游 + DAG 可视化 + 循环检测
- 维护窗口:时段化调度控制(支持跨夜 / 星期过滤 / 多段)
- 任务标签:多标签筛选 + 筛选交集
- 任务配置 JSON 导入/导出:集群迁移 & 灾备场景
- 全局搜索(Ctrl+K):跨任务 / 记录 / 存储 / 节点模糊匹配
合规 & 可观测
- 审计日志高级筛选 + CSV 导出(UTF-8 BOM,Excel 兼容)
- Dashboard 多维统计(按类型 / 状态 / 节点 / 存储分组)+ 柱状图 / 饼图
- 存储目标健康监控(每 5 分钟测试启用目标,掉线告警)
- 存储容量监控(85% 预警 + 硬配额上传前拒绝)
- Agent 事件订阅(实时 SSE 流 + Toast 通知 + 历史抽屉)
可部署(容器编排)
/healthliveness 端点:进程存活检查/readyreadiness 端点:数据库连通检查- K8s Deployment / Docker Swarm / Nomad 可直接接入
安全加固
- 用户账号支持停用(
User.Disabled) - 最后一个 admin 防删除保护
- API Key 使用 HMAC-SHA256 + 应用级 pepper(RFC 2104)
- JWT/API Key 双通道认证中间件
- 审计日志覆盖所有写入类操作
升级指南
数据库
全部新增字段 / 表走 AutoMigrate 自动迁移,无需手动操作。默认值均为 null / 空 / 0,对现有配置零影响。
HTTP API 破坏性变更
-
POST /backup/records/:id/restore- 旧:同步阻塞执行,返回
{restored: true} - 新:异步触发,返回
{restoreRecordId, taskId, status: "running", ...} - 迁移:脚本改为读取
restoreRecordId,然后 poll/restore/records/:id或订阅/restore/records/:id/logs/stream
- 旧:同步阻塞执行,返回
-
GET /audit-logs- 新增可选参数:
action/username/targetId/keyword/dateFrom/dateTo - 向后兼容:仅传
category/limit/offset时行为不变
- 新增可选参数:
-
前端 Bundle
- 依赖新端点:
/events/stream、/search、/dashboard/{sla,cluster,breakdown,node-performance}、/users、/api-keys、/task-templates、/replication/records、/verify/records、/restore/records、/backup/tasks/batch/*、/backup/tasks/{import,export} - 升级 Master 后必须同步更新前端(Docker 镜像内置)
- 依赖新端点:
Docker 用户
docker pull awuqing/backupx:v2.0.0
docker stop backupx && docker rm backupx
docker run -d --name backupx -p 8340:8340 -v backupx-data:/app/data awuqing/backupx:v2.0.0裸机用户
curl -LO https://github.com/Awuqing/BackupX/releases/download/v2.0.0/backupx-linux-amd64.tar.gz
tar xzf backupx-*.tar.gz && cd backupx-* && sudo ./install.sh限制与未做
- Agent 自更新:当前需手动升级 Agent,下版本支持远程下发二进制
- 加密密钥轮换:当前密钥生成后固定,下版本支持轮换与数据重加密
- PITR 增量备份:MySQL/PostgreSQL 目前仅支持全量备份
- SSO / OIDC:当前仅账号 + JWT + API Key,下版本扩展 SSO
- 任务配置导入:同名任务跳过不覆盖(避免误操作),需要覆盖时先删除
全链路验证
- ✅
go build ./.../go vet ./.../go test ./... -count=1 - ✅
npx tsc --noEmit/npm run build - ✅ CodeQL 安全扫描通过(HMAC-SHA256 + pepper)
- ✅ 10 份设计文档(
docs/superpowers/specs/)
感谢使用 BackupX。遇到问题请通过 GitHub Issues 反馈。
What's Changed
- 文档: 新增 Docusaurus 官网与双语文档,README 切换为英文默认 by @Awuqing in #39
- 文档: 按 Ant/Arco Design 风格重构官网首页,修正 API 参考,完善 i18n by @Awuqing in #41
- 修复: 中文 i18n 目录从 zh-Hans 改为 zh-CN,首页 SSR 翻译现已生效 by @Awuqing in #42
- 功能: 一键部署 Agent 向导(Issue #43) by @Awuqing in #44
- 功能: v2.0.0 企业级备份管理平台 — 11 项核心能力 by @Awuqing in #45
Full Changelog: v1.6.0...v2.0.0
What's Changed
- 文档: 新增 Docusaurus 官网与双语文档,README 切换为英文默认 by @Awuqing in #39
- 文档: 按 Ant/Arco Design 风格重构官网首页,修正 API 参考,完善 i18n by @Awuqing in #41
- 修复: 中文 i18n 目录从 zh-Hans 改为 zh-CN,首页 SSR 翻译现已生效 by @Awuqing in #42
- 功能: 一键部署 Agent 向导(Issue #43) by @Awuqing in #44
- 功能: v2.0.0 企业级备份管理平台 — 11 项核心能力 by @Awuqing in #45
Full Changelog: v1.6.0...v2.0.0