Awuqing
|
34106556be
|
修复: 后端审查发现的 5 项问题
根据 Spec + Code Quality 双审查修复:
1. BatchCreate 事务保护(node_service.go/node_repository.go)
原循环 Create 在 DB 约束失败时会残留半截数据。改为预先构造所有 Node
再走 repo.BatchCreate 单一事务,任一失败整体回滚。
2. Peek 语义与 Consume 对齐(agent_install_token_repository.go)
FindByToken 无条件返回任意记录,导致已消费/已过期的僵尸 token
可通过 compose 端点的 mode 检查但必然 Consume 失败,出现 410 假错。
新增 FindValidByToken,Peek 改用之。
3. MasterURL / AgentToken / AgentVersion 渲染前校验(installscript/renderer.go)
防止 YAML 注入(换行/引号逃逸 compose 配置)、shell 注入($(...))、
非法字符。加 TestRenderScriptRejects* 系列测试覆盖。
4. ipLimiter 无界增长修复(install_handler.go)
新增 gc 方法 + startGC 后台协程,每 window 周期清理过期 IP 条目。
RouterDependencies.Context 控制生命周期;app 传入 ctx,测试 t.Cleanup 取消。
5. CreateInstallToken 的 CreatedByID 从 JWT subject 解析(node_handler.go)
原硬编码 0 导致审计不可追溯。新增 resolveCurrentUserID helper,
借助 UserRepository 把 JWT subject(用户名)→ user.ID;失败退回 0。
|
2026-04-19 17:14:17 +08:00 |
|
Awuqing
|
d7b2093b17
|
文档: 更新多节点文档,描述一键部署向导(中英双份)
- Walkthrough 章节改写为三步向导流程
- 新增 Token 轮换说明、批量部署说明
- 对应 Issue #43 功能
|
2026-04-19 16:50:30 +08:00 |
|
Awuqing
|
2b86363007
|
功能: NodesPage 集成一键部署 Wizard 与操作列改造
|
2026-04-19 16:48:54 +08:00 |
|
Awuqing
|
0ea5f12e07
|
功能: AgentInstallWizard 主容器整合三步向导
|
2026-04-19 16:47:03 +08:00 |
|
Awuqing
|
4f20056de6
|
功能: Wizard Step3 命令预览 + BatchCommandTable 批量表
|
2026-04-19 16:44:46 +08:00 |
|
Awuqing
|
b26d5cd7d5
|
功能: Wizard Step2 部署参数表单
|
2026-04-19 16:42:32 +08:00 |
|
Awuqing
|
37f1caa335
|
功能: Wizard Step1 节点信息输入组件
|
2026-04-19 16:41:18 +08:00 |
|
Awuqing
|
539f3eefcc
|
功能: 前端新增一键部署 API 类型与函数
|
2026-04-19 16:40:17 +08:00 |
|
Awuqing
|
ba7b20b762
|
测试: 一键部署端到端流程集成测试
|
2026-04-19 16:38:26 +08:00 |
|
Awuqing
|
dcfbc2859c
|
功能: 注册一键部署新路由并 wire InstallTokenService
|
2026-04-19 16:34:58 +08:00 |
|
Awuqing
|
e9221490e9
|
功能: AgentHandler 新增 Self 端点
|
2026-04-19 16:32:45 +08:00 |
|
Awuqing
|
275b14eb6e
|
功能: NodeHandler 新增批量创建/轮换 Token/install-token/预览端点
|
2026-04-19 16:31:52 +08:00 |
|
Awuqing
|
7b867aa079
|
功能: 新增公开 install_handler 渲染安装脚本与 compose.yml
|
2026-04-19 16:29:45 +08:00 |
|
Awuqing
|
bda6aae82d
|
功能: AgentService 新增 SelfStatus 用于安装脚本探活
|
2026-04-19 16:27:43 +08:00 |
|
Awuqing
|
012d54a946
|
功能: NodeService 新增 BatchCreate 与 RotateToken
|
2026-04-19 16:26:41 +08:00 |
|
Awuqing
|
da94c38df3
|
功能: 新增 InstallTokenService 含输入校验、限流、GC
|
2026-04-19 16:24:10 +08:00 |
|
Awuqing
|
88f0695f43
|
重构: 移除 deploy/ 下的 agent 模板副本
Go embed 不能跨模块根引用,server/internal/installscript/templates/
已是唯一真源;deploy/*.tmpl 属于死代码,避免未来维护双份。
|
2026-04-19 16:20:59 +08:00 |
|
Awuqing
|
451d4afa23
|
功能: 新增 installscript 包,渲染 systemd/docker/foreground 安装脚本
|
2026-04-19 16:19:52 +08:00 |
|
Awuqing
|
1552aaec78
|
功能: 新增 AgentInstallToken 仓储与原子消费语义
|
2026-04-19 16:16:46 +08:00 |
|
Awuqing
|
e3fbc63964
|
功能: NodeRepository.FindByToken 支持 prev_token 24h 过渡
|
2026-04-19 16:15:03 +08:00 |
|
Awuqing
|
f3d32786ad
|
功能: 新增 AgentInstallToken 模型与 Node token 轮换字段
|
2026-04-19 16:12:59 +08:00 |
|
Awuqing
|
83919caa72
|
文档: 一键部署 Agent 设计文档与实施计划
- 新增 docs/superpowers/specs/2026-04-19-one-click-agent-deploy-design.md
- 新增 docs/superpowers/plans/2026-04-19-one-click-agent-deploy.md
- 对应 Issue #43
|
2026-04-19 16:10:39 +08:00 |
|
Wu Qing
|
1a0e6d463a
|
修复: 中文 i18n 目录名从 zh-Hans 改为 zh-CN,首页 SSR 翻译现已生效 (#42)
Docusaurus 3.10 会把 locale id 'zh-Hans' 规范化为 BCP 47 的 'zh-CN' 来
读取 i18n/ 目录。之前手工创建的 i18n/zh-Hans/ 目录 Docusaurus 识别不到,
导致中文版 SSR 输出仍是英文字符串,只有 URL 路由 /zh-Hans/ 生效。
同时修复 index.tsx 中 <Translate id={labelId}> 动态 id 问题:
write-translations 工具要求静态字符串,已拆分为三个独立的 Translate 元素。
|
2026-04-17 13:52:16 +08:00 |
|
Wu Qing
|
c629b5f286
|
文档: 按 Ant/Arco Design 风格重构官网首页,修正 API 参考,完善 i18n (#41)
重构:
- 首页 Hero 重设计:双列布局(标题+CTA+指标 / macOS 风代码窗口)
- 引入渐变文字、pulse 徽章、悬停带动画的主按钮
- 功能卡片加 SVG 图标、悬停提升效果、部分卡片变成可点击链接
- 新增 HomepageShowcase 截图轮播区:Tab 切换四个核心页面(仪表盘/任务/存储/多节点)
- 全站换 Arco 蓝 (#165dff) 作为主色,紫色 (#8f4bff) 作为辅助
- 导航栏加毛玻璃效果、表格加圆角与边框、菜单项圆角化
- 深色模式配色整体收敛
内容修正:
- API 参考补全遗漏的端点:auth logout/profile、records batch-delete、
storage-targets star/usage/google-drive、notifications test、dashboard timeline、settings
- 把 API 表格改为"方法/端点/说明"三列,加响应结构说明
- 中英文 API 文档同步更新
i18n:
- code.json 补充 Hero、Features、Showcase 全部新翻译键
- 校对:16 个中英文档 frontmatter 完全对齐,无漏译
构建:双语 build 通过、产物 3.3MB
|
2026-04-17 13:39:27 +08:00 |
|
Wu Qing
|
bc3d03de7e
|
文档: 新增 Docusaurus 官网与双语文档,README 切换为英文默认 (#39)
- 新建 docs-site/ Docusaurus 项目,支持 en + zh-Hans 双语
- 从 README 迁移内容为独立文档页面:
- Getting Started(安装、快速开始)
- Deployment(Docker、裸机、Nginx、配置参考)
- Features(备份类型、存储后端、SAP HANA、多节点集群、通知)
- Reference(API、CLI)
- Development(开发、贡献)
- 自定义 BackupX 主题色、logo、落地页组件
- 新增 .github/workflows/docs.yml,Actions 自动构建并发布到 GitHub Pages
- README.md 切换为英文,中文版挪到 README.zh-CN.md,两者均精简为导航型
- 配置站点 URL:https://awuqing.github.io/BackupX/
|
2026-04-17 13:19:41 +08:00 |
|
Wu Qing
|
757b0fa5ed
|
功能: 修复并实现多节点集群部署 (#38)
基础修复:
- 新增节点离线检测:每 15s 扫描,超 45s 未心跳的远程节点自动置离线
- 节点删除前检查关联任务,避免孤立备份任务
- BackupTaskRepository 新增 CountByNodeID/ListByNodeID
Master 端 Agent 协议:
- 新增 AgentCommand 模型与命令队列仓储(pending/dispatched/succeeded/failed/timeout)
- 新增 AgentService:任务下发、命令轮询、结果回收、超时扫描
- 新增专用 Agent HTTP API(X-Agent-Token 认证):
/api/agent/heartbeat
/api/agent/commands/poll
/api/agent/commands/:id/result
/api/agent/tasks/:id
/api/agent/records/:id
- BackupExecutionService 支持 node 路由:task.NodeID 指向远程节点时自动入队派发
Agent CLI(backupx agent 子命令):
- 配置:YAML 文件 / 环境变量 / CLI 参数,优先级 CLI > 文件 > 环境
- 心跳循环 + 命令轮询循环 + 优雅退出
- 本地复用 BackupRunner 与 storage registry 执行备份并直接上传
- 支持 run_task 和 list_dir 两种命令
远程目录浏览:
- NodeService 支持通过 Agent RPC 列出远程节点目录(15s 超时)
前端:
- NodesPage 添加节点后展示 Agent 启动命令和环境变量配置
文档:
- README 中英文重写"多节点集群"章节,含架构图、步骤、限制、CLI 参考
|
2026-04-17 12:29:08 +08:00 |
|
Wu Qing
|
e04774ff68
|
功能: 新增 SAP HANA 完整备份支持与 Backint 协议代理 (#37)
* chore: ignore web/dist directory in git repository
* 功能: 新增 SAP HANA 完整备份支持与 Backint 协议代理
- 修复 service 层校验 bug,使 SAP HANA 类型可正常创建
- 增强 hdbsql Runner:支持完整/增量/差异/日志备份、并行通道、失败重试
- 新增 Backint 协议代理(backupx backint 子命令),HANA 原生接口直连 BackupX 存储后端
- 新增本地 SQLite 目录维护 EBID↔对象键映射
- 前端新增 SAP HANA 扩展字段表单(备份类型/级别/通道数/重试次数/实例编号)
- README 中英文补充 SAP HANA 两种模式的使用说明
|
2026-04-16 23:43:46 +08:00 |
|
Wu Qing
|
241a4808be
|
文档: 更新 README 中英文文档 (#35)
- 存储后端描述更新为 70+ rclone 集成
- API 参考补充新增端点(节点编辑、Rclone 后端列表、版本检查、Agent 心跳)
- 技术栈补充 rclone
- 多节点集群章节补充 IP 检测、节点编辑等新功能描述
- 存储目标添加指南补充 Rclone 类型配置项分层说明
- 任务删除行为说明(清理远端文件、保留记录)
- 版本升级指引从一键更新改为手动 docker compose pull
- 发版示例更新为 v1.4.3
|
2026-04-05 11:33:56 +08:00 |
|
Wu Qing
|
b336bebdb1
|
优化: 多模块功能修复与体验改进 (#34)
1. 保留策略清理后自动删除空文件夹(新增 StorageDirCleaner 接口)
2. 备份任务删除时清理远端文件但保留备份记录
3. 节点管理修复:本机 IP/版本检测、Heartbeat OS/Arch 修正、新增编辑功能
4. 审计日志规范化:统一格式、丰富详情、节点操作增加审计记录
5. 系统设置移除一键更新操作,仅保留版本检查
6. Rclone 配置项分层展示(必填 + 高级可选折叠)
7. DirectoryPicker 目录选择器样式优化
|
2026-04-05 11:23:46 +08:00 |
|
Wu Qing
|
33682b5ea7
|
优化: 存储类型下拉框分类中文标注去重 (#33)
优化: 存储类型下拉框分类中文标注去重
|
2026-04-02 13:43:37 +08:00 |
|
Awuqing
|
435c819c77
|
优化: 存储类型下拉框分类中文标注 + 去重
问题:API 返回的 rclone 后端纯英文技术名难辨别,且和内置类型存在重复
(如 rclone 的 drive 和内置的 google_drive)。
修复:
- 前端静态定义分类+中文标注(常用/云存储/网盘/文件传输/企业存储/自建存储)
- 排除工具类后端(alias/cache/http/archive 等)和重复后端(drive→用google_drive)
- Select 使用 OptGroup 按分组渲染,搜索仍支持英文/中文关键词
- 常用类型(S3/阿里云/SFTP 等)置顶,其余按分类排列
|
2026-04-02 13:39:43 +08:00 |
|
Wu Qing
|
9ae04aaac3
|
功能: Docker 一键自动更新 (#32)
功能: Docker 一键自动更新
|
2026-04-01 23:47:43 +08:00 |
|
Awuqing
|
618a1c1d43
|
功能: Docker 一键自动更新
- 新增 POST /api/system/update-apply,执行 docker pull + docker compose up -d
- 前端系统设置页新增「一键更新(Docker)」按钮,点击后自动拉取新镜像并重启容器
- Dockerfile 安装 docker-cli + docker-cli-compose
- docker-compose.yml 挂载 /var/run/docker.sock 以支持容器内操作 Docker
- 自动检测是否为 Docker 环境,非 Docker 环境引导下载二进制
|
2026-04-01 23:43:12 +08:00 |
|
Wu Qing
|
ae658f1c2f
|
功能: 系统更新检查 (#31)
功能: 系统更新检查(GitHub Release + Docker)
|
2026-04-01 23:18:21 +08:00 |
|
Awuqing
|
a78296404e
|
功能: 系统更新检查(GitHub Release + Docker)
后端:
- 新增 GET /api/system/update-check,从 GitHub Releases API 获取最新版本
- 自动比较当前版本与最新版本,匹配当前平台的下载链接
- 返回版本号、更新说明、下载链接、Docker 镜像信息
前端(系统设置页重构):
- 新增"检查更新"按钮,点击后展示更新结果
- 有新版本时显示版本号、更新说明、下载按钮、Docker 更新命令
- 新增磁盘状态卡片(总空间/已用/可用/使用率)
- 运行模式用彩色 Tag 区分(生产/开发)
|
2026-04-01 23:13:32 +08:00 |
|
Wu Qing
|
b00b288028
|
修复: rclone 后端列表不显示 + 调度审计 + 批量删除 (#30)
修复: rclone 后端列表不显示 + 调度审计 + 批量删除
|
2026-04-01 23:02:40 +08:00 |
|
Awuqing
|
7602b6cd80
|
修复: rclone 后端列表不显示 + 调度审计 + 批量删除
1. 修复前端 rclone 后端 API 路径双重 /api 前缀导致 404,
存储类型下拉框现在正确显示全部 70+ rclone 后端
2. 调度器自动触发的备份任务计入审计日志(用户名: system)
3. 新增备份记录批量删除 API (POST /api/backup/records/batch-delete)
|
2026-04-01 22:57:55 +08:00 |
|
Wu Qing
|
82b6f741ba
|
修复: 上传操作级重试 (#29)
修复: 上传操作级重试,解决远端临时故障导致自动备份失败
|
2026-04-01 18:40:13 +08:00 |
|
Awuqing
|
70dff41b70
|
修复: 上传操作级重试,解决 Google Drive 等远端临时故障导致自动备份连续失败
问题:rclone 底层重试只覆盖单个 HTTP 请求,但 Google API 的 502/timeout
等临时故障会导致整个上传操作失败,自动触发的备份任务连续失败。
修复:在 provider.Upload 外层增加操作级重试(最多 3 次,指数退避 10s/40s/90s),
每次重试重新打开文件并重建 reader 链。重试过程通过日志流实时反馈。
|
2026-04-01 18:35:26 +08:00 |
|
Wu Qing
|
6838eabc71
|
功能: 全部 rclone 后端注册为一级存储类型 (#28)
功能: 全部 rclone 后端注册为一级存储类型
|
2026-04-01 12:59:29 +08:00 |
|
Awuqing
|
66b4714b71
|
功能: 全部 rclone 后端注册为一级存储类型
将全部 70+ rclone 后端(SFTP、Azure Blob、Dropbox、OneDrive、B2、SMB 等)
自动注册为独立 Factory,与 S3、FTP 等内置类型完全平级。
- 新增 GenericBackendFactory + RegisterAllBackends 自动注册全部后端
- 移除 oneof 硬编码白名单,type 字段接受任意已注册存储类型
- 前端类型选择器合并内置类型和全部 rclone 后端为统一可搜索下拉框
- 选择 SFTP 直接存储 type="sftp",非内置类型自动从 API 获取配置字段
|
2026-04-01 12:52:06 +08:00 |
|
Wu Qing
|
df82fa0280
|
优化: 重新设计 Cron 编辑器交互体验 (#27)
优化: 重新设计 Cron 编辑器交互体验
|
2026-04-01 07:50:16 +08:00 |
|
Awuqing
|
f0161aac94
|
优化: 重新设计 Cron 编辑器交互体验
核心问题:预设选中后下方 Tab 编辑器仍展开显示混乱的技术细节。
重新设计为三层交互:
1. 预设按钮(一键选择常见场景,选中高亮,无多余 UI)
2. 自定义选择器(每天/每周/每月/间隔四种模式,直观的时间选择器
和星期按钮,无需理解 cron 语法)
3. 手动输入(高级用户直接编辑 cron 表达式)
同时优化中文描述为自然语言("每天 02:00 执行" 替代 "02 时 00 分 执行")
|
2026-04-01 07:44:19 +08:00 |
|
Wu Qing
|
7149af012e
|
优化: Cron 表达式编辑器增加预设和中文描述 (#26)
优化: Cron 表达式编辑器增加预设和中文描述
|
2026-04-01 00:17:38 +08:00 |
|
Wu Qing
|
3610ccfc87
|
修复: 审计日志补充操作详情 + 版本号注入修复 (#25)
修复: 审计日志补充操作详情 + 版本号注入修复
|
2026-04-01 00:17:34 +08:00 |
|
Wu Qing
|
407f8d7cff
|
修复: 存储目标创建/连接测试/类型选择三个关键问题 (#24)
修复: 存储目标创建/连接测试/类型选择三个关键问题
|
2026-04-01 00:17:29 +08:00 |
|
Awuqing
|
c25852d810
|
优化: Cron 表达式编辑器增加预设和中文描述
1. 新增 8 个常用预设按钮(每天 02:00、每 6 小时、每周日、每月 1 日等),
一键设置无需逐个 Tab 操作
2. 新增中文可读描述(如 "02 时 00 分 执行"),实时显示在表达式下方
3. 选中的预设按钮高亮显示
|
2026-04-01 00:12:32 +08:00 |
|
Awuqing
|
8a850b90b4
|
修复: 审计日志补充操作详情 + 版本号注入修复
1. 审计日志:所有 handler 的 recordAudit 调用补充有意义的 detail,
包括创建/更新时记录类型、删除时记录 ID、设置变更时记录修改的 key
2. 版本号:Makefile 的 run/build 都通过 ldflags 注入 git 版本号,
开发模式不再显示 "dev"
|
2026-04-01 00:10:51 +08:00 |
|
Awuqing
|
a581c4f30b
|
修复: 存储目标创建/连接测试/类型选择三个关键问题
1. 修复 oneof 白名单仅含 4 种类型,阿里云/腾讯/七牛/FTP/Rclone
类型的存储目标无法创建(binding 验证直接拒绝)
2. 修复本地磁盘 TestConnection 报 "directory not found",
在 List 前先 Mkdir 确保目录存在
3. 前端存储类型选项明确标注 Rclone 支持 SFTP/Azure/Dropbox 等
|
2026-04-01 00:06:08 +08:00 |
|
Wu Qing
|
31f996490f
|
功能: 集成 rclone 高级传输特性 + 全 70+ 后端支持 (#23)
功能: 集成 rclone 高级传输特性 + 全 70+ 后端支持
|
2026-03-31 23:46:02 +08:00 |
|