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
This commit is contained in:
67
llmdoc/architecture/backup-engine-architecture.md
Normal file
67
llmdoc/architecture/backup-engine-architecture.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 备份执行引擎架构
|
||||
|
||||
## 1. 身份识别
|
||||
|
||||
- **目的**:一个高度可配置的 Docker 备份解决方案,支持文件夹和 MySQL 数据库的备份
|
||||
- **核心功能**:自动备份、日志记录、临时文件管理和备份保留策略
|
||||
|
||||
## 2. 核心组件
|
||||
|
||||
- `bin/backup.sh`(主备份脚本):
|
||||
- 负责协调整个备份流程
|
||||
- 主要功能包括依赖检查、配置加载、文件备份、数据库备份和清理
|
||||
|
||||
## 3. 执行流程(LLM 检索图)
|
||||
|
||||
备份执行流程遵循以下关键步骤:
|
||||
|
||||
1. **依赖检查**:`check_dependencies()`
|
||||
- 验证所需工具 (yq, tar, gzip, docker)
|
||||
- 如缺少依赖,脚本将终止执行
|
||||
|
||||
2. **配置加载**:`load_config()`
|
||||
- 读取 `/etc/docker-backup/config.yml`
|
||||
- 配置备份输出目录、前缀和保留策略
|
||||
|
||||
3. **临时目录准备**
|
||||
- 使用 `mktemp` 创建唯一临时目录
|
||||
- 注册清理 `trap`,确保资源释放
|
||||
|
||||
4. **文件夹备份**:`backup_folders()`
|
||||
- 支持多源目录备份
|
||||
- 使用 `tar` 打包
|
||||
- 可配置排除规则
|
||||
|
||||
5. **数据库备份**:`backup_mysql()`
|
||||
- 通过 `docker exec` 调用 `mysqldump`
|
||||
- 支持全库或指定库备份
|
||||
- 使用 `gzip` 压缩
|
||||
|
||||
6. **备份合并**:`merge_backups()`
|
||||
- 合并文件夹和数据库备份
|
||||
- 生成时间戳文件名
|
||||
- 输出单个 `.tar.gz` 文件
|
||||
|
||||
7. **备份清理**:`cleanup_old_backups()`
|
||||
- 按配置的保留天数清理旧备份
|
||||
|
||||
## 4. 设计原理
|
||||
|
||||
- **模块化**:每个功能封装为独立函数
|
||||
- **可配置性**:通过 YAML 文件灵活配置
|
||||
- **错误处理**:严格的错误捕获和日志记录
|
||||
- **安全性**:最小权限原则,临时文件自动清理
|
||||
|
||||
## 5. 关键配置点
|
||||
|
||||
- 备份源目录
|
||||
- 数据库备份范围
|
||||
- 输出目录和文件前缀
|
||||
- 日志配置
|
||||
- 备份保留策略
|
||||
|
||||
## 6. 局限性和注意事项
|
||||
|
||||
- 依赖外部工具(yq, docker, tar, gzip)
|
||||
- 需要正确配置 MySQL 容器访问权限
|
||||
- 备份过程中需要足够的临时存储空间
|
||||
35
llmdoc/architecture/configuration-system.md
Normal file
35
llmdoc/architecture/configuration-system.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# 配置系统架构
|
||||
|
||||
## 1. 身份识别
|
||||
|
||||
- **定义**:一个灵活、层次清晰的 YAML 配置系统,支持细粒度的备份策略定制
|
||||
- **目的**:通过声明式配置,控制 Docker 备份的各个方面
|
||||
|
||||
## 2. 核心组件
|
||||
|
||||
- `/etc/docker-backup/config.yml`: 系统配置文件(安装时从 `config/backup.yml.example` 创建)
|
||||
- `bin/backup.sh`: 读取并解析配置的主脚本
|
||||
- `yq`: 用于 YAML 配置解析的关键工具
|
||||
|
||||
## 3. 执行流程(LLM 检索图)
|
||||
|
||||
1. **配置加载**:
|
||||
- 读取 `/etc/docker-backup/config.yml`
|
||||
- 使用 `yq` 解析配置项
|
||||
|
||||
2. **依赖性验证**:
|
||||
- 检查必要工具(`yq`, `tar`, `docker`)
|
||||
- 验证配置文件有效性
|
||||
- 校验备份源和容器可用性
|
||||
|
||||
3. **配置解析**:
|
||||
- 提取备份基础配置 (`backup`)
|
||||
- 处理文件夹备份设置 (`folders`)
|
||||
- 解析 MySQL 备份参数 (`mysql`)
|
||||
- 配置日志和通知 (`logging`, `notification`)
|
||||
|
||||
## 4. 设计原理
|
||||
|
||||
- **灵活性**:通过 YAML 配置提供高度可定制的备份策略
|
||||
- **最小侵入**:仅依赖常见的 Unix 工具链
|
||||
- **安全性**:配置项有严格的验证机制
|
||||
45
llmdoc/architecture/installation-architecture.md
Normal file
45
llmdoc/architecture/installation-architecture.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Docker Backup 安装架构
|
||||
|
||||
## 1. 身份与目的
|
||||
|
||||
- **目标**:自动化 Docker 容器和卷的备份部署
|
||||
- **关键功能**:依赖检测、文件部署、服务配置、定时任务管理
|
||||
|
||||
## 2. 核心组件
|
||||
|
||||
- `install.sh`(主安装脚本):整个安装流程的协调者,支持远程下载和部署
|
||||
- 动态生成的 systemd 服务文件(不再使用模板)
|
||||
|
||||
## 3. 执行流程图(LLM检索映射)
|
||||
|
||||
### 3.1 环境准备阶段
|
||||
- **权限验证**:`check_root()`,确保以 root 权限运行
|
||||
- **操作系统检测**:`detect_os()`,确定系统类型和版本
|
||||
|
||||
### 3.2 依赖安装阶段
|
||||
- **工具检测**:`install_yq()`,安装 YAML 解析工具
|
||||
- **依赖检查**:`install_dependencies()`
|
||||
- 检测并安装:tar, gzip, docker, find
|
||||
- 根据操作系统使用不同的包管理器 (apt/yum/dnf)
|
||||
|
||||
### 3.3 文件部署阶段
|
||||
- **远程下载**:`deploy_files()`
|
||||
- 从 Gitea 仓库下载 `backup.sh` 和 `cleanup.sh`
|
||||
- 安装到 `/usr/local/bin/docker-backup` 和 `/usr/local/bin/docker-backup-cleanup`
|
||||
- 设置可执行权限
|
||||
- 下载配置文件模板到 `/etc/docker-backup/config.yml`
|
||||
|
||||
### 3.4 服务配置阶段
|
||||
- **Systemd 服务生成**:`setup_systemd()`
|
||||
- 动态生成 `.service` 文件到 `/etc/systemd/system/`
|
||||
- 动态生成 `.timer` 文件,定义执行计划
|
||||
- **服务启用**:`enable_service()`
|
||||
- 重新加载 systemd 守护进程
|
||||
- 启用并启动 systemd timer
|
||||
|
||||
## 4. 设计原则
|
||||
|
||||
- **模块化**:每个函数职责单一,便于维护
|
||||
- **跨平台兼容**:支持主流 Linux 发行版
|
||||
- **安全性**:要求 root 权限,预防权限问题
|
||||
- **灵活性**:支持自定义安装目录、服务名称和执行计划
|
||||
37
llmdoc/architecture/systemd-integration.md
Normal file
37
llmdoc/architecture/systemd-integration.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Systemd 集成架构
|
||||
|
||||
## 1. 身份与目的
|
||||
|
||||
- **定义**:Docker 备份项目的 Systemd 集成层
|
||||
- **目的**:通过 Systemd 单元提供可配置、高效的自动备份机制
|
||||
|
||||
## 2. 核心组件
|
||||
|
||||
- `systemd/docker-backup.service.template`: Service 单元模板
|
||||
- `systemd/docker-backup.timer.template`: Timer 单元模板
|
||||
|
||||
## 3. 执行流程(LLM 检索路径)
|
||||
|
||||
### 定时触发
|
||||
1. **Timer 激活**:`docker-backup.timer` 根据配置的 `OnCalendar` 触发
|
||||
2. **服务启动**:触发 `docker-backup.service`
|
||||
3. **备份脚本执行**:运行 `bin/backup.sh`
|
||||
|
||||
### 依赖关系
|
||||
```
|
||||
docker-backup.timer
|
||||
└── Requires: docker-backup.service
|
||||
└── Requires: docker.service
|
||||
```
|
||||
|
||||
## 4. 资源管理策略
|
||||
|
||||
- **CPU 管理**:`Nice=19` - 最低优先级
|
||||
- **IO 管理**:`IOSchedulingClass=idle` - 仅在系统空闲时执行
|
||||
- **超时控制**:`TimeoutStartSec=1800` - 30分钟超时保护
|
||||
|
||||
## 5. 设计原理
|
||||
|
||||
- **模块化**:通过模板实现灵活配置
|
||||
- **动态替换**:使用 `__INSTALL_DIR__` 和 `__SCHEDULE__` 变量
|
||||
- **日志集成**:通过 systemd 日志系统(journald)收集日志
|
||||
Reference in New Issue
Block a user