9 Commits

Author SHA1 Message Date
a00314964d feat(backup): 添加单文件备份功能
- 添加 files 配置节,支持备份多个单独文件
- 实现 backup_files() 函数,处理单文件备份逻辑
- 更新 merge_backups() 函数,支持合并 files 备份
- 更新配置文件示例,添加 files 配置说明
- 更新 README 文档:
  - 添加单文件备份功能说明
  - 添加 files 配置示例
  - 添加单文件恢复详细步骤
  - 更新备份文件结构说明
  - 添加单文件完整性验证方法
  - 添加 v1.3.0 更新日志

使用场景:
- 备份配置文件(如 /etc/nginx/nginx.conf)
- 备份环境变量文件(如 /opt/app/.env)
- 备份其他重要的单个文件

备份结构:
backup.tar.gz
├── folders/folders.tar.gz  # 文件夹备份
├── files/files.tar.gz      # 单文件备份
└── mysql/mysql.sql.gz      # 数据库备份
2025-12-26 13:06:33 +08:00
Wang Defa
0459136442 feat(backup): 实现 keep_count 清理策略和自动更新功能
- 添加 keep_count 配置读取,支持按数量保留备份
- 实现基于文件数量的清理逻辑,保留最新的 N 个备份文件
- 添加 docker-backup update 自动更新命令,从远程仓库拉取最新版本
- 添加 docker-backup help 帮助信息,显示完整使用说明
- 优化清理策略:优先使用 keep_days,其次使用 keep_count
- 添加版本备份和错误恢复机制,确保更新安全
2025-12-25 17:23:43 +08:00
Wang Defa
46a0ade8ba feat: 实现日志级别功能并修复日志输出问题
- 实现 logging.level 配置项支持(DEBUG/INFO/WARN/ERROR)
- 修复日志文件中 ANSI 颜色代码显示问题
- 修复 install.sh 中 show_info() 函数颜色显示
- 日志输出现在会根据配置的级别进行过滤
2025-12-25 16:34:30 +08:00
Wang Defa
7d42577fb2 fix: 修正 tar 命令重定向逻辑
问题:
- 之前使用 if...then 包裹 tar 命令时的重定向 2>&1 >&2
  会影响整个 if 语句块,包括后续的 echo 输出
- 导致 echo "${folders_tar}" 的输出也被重定向到 stderr
- 使得 $(backup_folders) 无法捕获返回的文件路径

修复:
- 将 tar 命令独立执行,使用 >&2 2>&1 重定向所有输出到 stderr
- 将 if 条件改为检查文件是否存在 [[ -f "${folders_tar}" ]]
- 这样 echo 输出不受重定向影响,可以正常返回路径

重定向说明:
- `>&2` 先将 stdout 重定向到 stderr
- `2>&1` 再将 stderr 重定向到 stdout(此时已经是 stderr)
- 最终效果:tar 的所有输出都到 stderr,不干扰函数返回值
2025-12-25 15:52:38 +08:00
Wang Defa
31f111d812 fix: 修复 tar 命令输出干扰函数返回值的问题
问题描述:
- backup_folders() 函数使用 echo 返回文件路径
- 但 tar 命令的 2>&1 将 stderr 重定向到 stdout
- tar 的警告信息(如 "Removing leading '/' from member names")
  被 $(backup_folders) 捕获到 folders_tar 变量
- 导致 merge_backups() 收到的不是文件路径而是 tar 输出
- 最终备份文件中缺少 folders 目录

修复方案:
- 将 tar 命令改为 2>&1 >&2
- 先将 stderr 重定向到 stdout (2>&1)
- 再将合并后的 stdout 重定向到 stderr (>&2)
- 确保 tar 的所有输出都到 stderr,不干扰函数返回值

影响:
- 修复后文件夹备份会正确包含在最终备份文件中
- 用户可以正常恢复文件夹数据
2025-12-25 15:49:14 +08:00
Wang Defa
fe57dd33f4 feat: 添加备份过程的详细日志
改进内容:
- 在文件夹备份时显示排除规则和文件大小
- 在合并备份时显示每个文件的路径和大小
- 添加 tar 合并命令的错误检查
- 改进日志输出,便于调试和追踪问题

这些日志将帮助用户:
1. 确认排除规则是否正确应用
2. 检查每个备份文件的大小
3. 快速定位备份失败的原因
2025-12-25 15:45:11 +08:00
Wang Defa
8d558201a0 fix: 修复合并备份时的文件路径问题
问题描述:
- merge_backups 函数使用 basename 获取文件名
- 但文件实际在子目录中 (folders/folders.tar.gz, mysql/mysql.sql.gz)
- tar -C ${TEMP_DIR} 切换到临时目录后找不到文件

修复方案:
- 使用 ${path#${TEMP_DIR}/} 获取相对于临时目录的相对路径
- 正确构建文件列表传递给 tar 命令
- 确保 tar 能找到正确的文件路径

示例:
- 原: basename /tmp/xxx/folders/folders.tar.gz → folders.tar.gz (错误)
- 新: /tmp/xxx/folders/folders.tar.gz#/tmp/xxx/ → folders/folders.tar.gz (正确)
2025-12-25 15:42:13 +08:00
Wang Defa
1ea8d681ee fix: 修复日志输出干扰函数返回值的问题
问题描述:
- backup_folders() 和 backup_mysql() 函数使用 echo 返回文件路径
- 但 log_info 也输出到 stdout,导致主函数捕获了所有日志而非路径
- 最终 merge_backups 收到空参数,显示"没有需要打包的文件"

修复内容:
- 将所有日志输出重定向到 stderr (>&2)
- 简化 tar 命令的输出处理逻辑
- 确保函数返回值只包含文件路径

影响文件:
- bin/backup.sh - log() 函数添加 >&2 重定向
- bin/cleanup.sh - 所有 log 函数添加 >&2 重定向
2025-12-25 15:40:36 +08:00
Wang Defa
4d00283654 feat: 实现 Docker 备份系统,支持远程一键安装
实现功能:
- 文件夹和 MySQL 容器数据库备份
- tar.gz 压缩和自动清理旧备份
- systemd 定时任务集成
- 远程一键安装脚本(通过 Gitea 仓库)
- 完整的 llmdoc 文档系统

安装方式:
bash <(curl -sL https://gitea.bcde.io/wangdefa/docker-backup/raw/branch/main/install.sh)

配置文件位置:/etc/docker-backup/config.yml
命令:docker-backup, docker-backup-cleanup
2025-12-25 15:02:07 +08:00