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:
90
llmdoc/reference/coding-conventions.md
Normal file
90
llmdoc/reference/coding-conventions.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Bash 脚本编码约定
|
||||
|
||||
## 1. 脚本结构约定
|
||||
|
||||
### 1.1 基本骨架
|
||||
- 必须以 `#!/bin/bash` 开头
|
||||
- 使用 `set -e` 和 `set -o pipefail` 启用严格错误处理
|
||||
- 按照以下顺序组织脚本:
|
||||
1. Shebang
|
||||
2. 文件描述注释
|
||||
3. 变量和常量定义
|
||||
4. 日志和颜色输出函数
|
||||
5. 主要功能函数
|
||||
6. 主函数(`main()`)
|
||||
7. 主函数调用
|
||||
|
||||
### 1.2 错误处理
|
||||
- 使用 `set -e` 在任何命令执行失败时立即退出脚本
|
||||
- 使用 `set -o pipefail` 确保管道命令链任何一个失败都返回失败状态
|
||||
- 对于可能失败的操作,编写明确的错误检查和日志记录机制
|
||||
|
||||
## 2. 命名约定
|
||||
|
||||
### 2.1 变量命名
|
||||
- 全局变量使用大写,单词间使用下划线分隔
|
||||
- 正确: `SCRIPT_DIR`, `DEFAULT_INSTALL_DIR`
|
||||
- 局部变量使用小写,单词间使用下划线分隔
|
||||
- 正确: `backup_type`, `temp_backup_dir`
|
||||
|
||||
### 2.2 函数命名
|
||||
- 使用小写,单词间使用下划线分隔
|
||||
- 动词 + 名词的形式
|
||||
- 正确: `install_dependencies()`, `check_root()`
|
||||
- 错误: `Dependencies()`, `rootCheck()`
|
||||
|
||||
## 3. 日志记录约定
|
||||
|
||||
### 3.1 日志级别
|
||||
- 使用以下日志级别函数:
|
||||
- `log_info()`: 普通信息
|
||||
- `log_warn()`: 警告信息
|
||||
- `log_error()`: 错误信息
|
||||
|
||||
### 3.2 日志输出
|
||||
- 日志应包含时间戳
|
||||
- 使用颜色区分不同日志级别
|
||||
- 日志消息应简洁明了,描述当前操作或状态
|
||||
|
||||
## 4. 注释风格
|
||||
|
||||
### 4.1 文件头注释
|
||||
- 使用 `###############################################################################`
|
||||
- 包含脚本名称和简要功能描述
|
||||
|
||||
### 4.2 函数注释
|
||||
- 在函数定义前使用块注释
|
||||
- 描述函数的目的和关键行为
|
||||
|
||||
### 4.3 行内注释
|
||||
- 仅在代码复杂或不明显时使用
|
||||
- 解释 "为什么" 而非 "做什么"
|
||||
|
||||
## 5. 参数和配置处理
|
||||
|
||||
### 5.1 参数解析
|
||||
- 使用 `case` 语句处理命令行参数
|
||||
- 提供帮助选项(`-h`, `--help`)
|
||||
- 对无效参数给出明确错误提示
|
||||
|
||||
### 5.2 配置加载
|
||||
- 使用配置文件(如 YAML)管理可配置参数
|
||||
- 提供合理的默认值
|
||||
- 在加载配置时进行有效性检查
|
||||
|
||||
## 6. 性能和安全最佳实践
|
||||
|
||||
### 6.1 依赖检查
|
||||
- 在脚本开始检查所有必需的外部工具
|
||||
- 为缺失的依赖提供明确的安装指导
|
||||
|
||||
### 6.2 权限管理
|
||||
- 对于需要特权的脚本,明确检查 root 权限
|
||||
- 谨慎处理文件和目录权限
|
||||
|
||||
## 7. 示例项目特定约定
|
||||
|
||||
本项目脚本特有的一些约定:
|
||||
- 使用 `BASH_SOURCE[0]` 获取脚本所在目录
|
||||
- 支持通过环境变量覆盖默认配置
|
||||
- 使用 `trap` 注册清理函数
|
||||
62
llmdoc/reference/configuration-schema.md
Normal file
62
llmdoc/reference/configuration-schema.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# 配置架构参考
|
||||
|
||||
## 配置项概览
|
||||
|
||||
### `backup` 区块
|
||||
|
||||
| 配置项 | 类型 | 必填 | 默认值 | 描述 |
|
||||
|--------|------|------|--------|------|
|
||||
| `output_dir` | 字符串 | 是 | `/var/backups/docker-backup` | 备份文件存储目录 |
|
||||
| `prefix` | 字符串 | 否 | `backup` | 备份文件名前缀 |
|
||||
| `retention.enabled` | 布尔 | 否 | `true` | 是否启用自动清理 |
|
||||
| `retention.keep_days` | 整数 | 否 | `7` | 保留最近 N 天备份 |
|
||||
| `retention.keep_count` | 整数 | 否 | `null` | 保留最近 N 个备份文件 |
|
||||
|
||||
### `folders` 区块
|
||||
|
||||
| 配置项 | 类型 | 必填 | 默认值 | 描述 |
|
||||
|--------|------|------|--------|------|
|
||||
| `enabled` | 布尔 | 否 | `true` | 是否启用文件夹备份 |
|
||||
| `sources` | 字符串数组 | 是 | `[]` | 需备份的文件夹路径列表 |
|
||||
| `excludes` | 字符串数组 | 否 | 预定义排除模式 | 排除的文件/文件夹模式 |
|
||||
|
||||
### `mysql` 区块
|
||||
|
||||
| 配置项 | 类型 | 必填 | 默认值 | 描述 |
|
||||
|--------|------|------|--------|------|
|
||||
| `enabled` | 布尔 | 否 | `true` | 是否启用 MySQL 备份 |
|
||||
| `container_name` | 字符串 | 是 | 无 | MySQL 容器名称 |
|
||||
| `username` | 字符串 | 是 | 无 | 数据库用户名 |
|
||||
| `password` | 字符串 | 是 | 无 | 数据库密码 |
|
||||
| `databases` | 字符串数组或字符串 | 是 | 无 | 要备份的数据库,可以是具体库名或 `"all"` |
|
||||
|
||||
### `logging` 区块
|
||||
|
||||
| 配置项 | 类型 | 必填 | 默认值 | 描述 |
|
||||
|--------|------|------|--------|------|
|
||||
| `enabled` | 布尔 | 否 | `true` | 是否启用日志 |
|
||||
| `log_file` | 字符串 | 是 | `/var/log/docker-backup.log` | 日志文件路径 |
|
||||
| `level` | 字符串 | 否 | `"INFO"` | 日志级别 (`DEBUG`, `INFO`, `WARN`, `ERROR`) |
|
||||
|
||||
### `notification` 区块
|
||||
|
||||
| 配置项 | 类型 | 必填 | 默认值 | 描述 |
|
||||
|--------|------|------|--------|------|
|
||||
| `enabled` | 布尔 | 否 | `false` | 是否启用通知 |
|
||||
| `method` | 字符串 | 条件必填 | 无 | 通知方式 (`email`, `webhook`) |
|
||||
| `webhook_url` | 字符串 | 条件必填 | 无 | Webhook 地址 |
|
||||
| `on_failure_only` | 布尔 | 否 | `true` | 是否仅在备份失败时通知 |
|
||||
|
||||
## 配置依赖和约束
|
||||
|
||||
1. 互斥配置:
|
||||
- `retention.keep_days` 和 `retention.keep_count` 互斥
|
||||
|
||||
2. 必要条件:
|
||||
- MySQL 备份需要 `container_name`、`username`、`password`
|
||||
- 通知需要 `method` 和相应的地址
|
||||
|
||||
3. 验证规则:
|
||||
- 文件夹备份需要至少一个有效的 `sources`
|
||||
- 检查路径有效性
|
||||
- 验证工具依赖(`yq`, `tar`, `docker`)
|
||||
88
llmdoc/reference/git-conventions.md
Normal file
88
llmdoc/reference/git-conventions.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Git 约定
|
||||
|
||||
## 1. 分支策略
|
||||
|
||||
### 主分支
|
||||
- **主分支名称**:`main`
|
||||
- **主分支规则**:
|
||||
- 始终保持稳定和可部署状态
|
||||
- 直接对应生产环境
|
||||
- 受保护分支,需要代码审查才能合并
|
||||
|
||||
### 开发分支类型
|
||||
- `feature/[功能名称]`:新功能开发
|
||||
- `bugfix/[问题描述]`:修复特定 bug
|
||||
- `hotfix/[紧急问题]`:生产环境紧急修复
|
||||
- `docs/[文档内容]`:文档更新
|
||||
- `refactor/[模块名称]`:代码重构
|
||||
|
||||
## 2. 提交消息格式
|
||||
|
||||
提交消息应遵循语义化提交规范:
|
||||
|
||||
```
|
||||
<type>(<scope>): <description>
|
||||
|
||||
[可选的详细描述]
|
||||
|
||||
- 可选的脚注信息
|
||||
```
|
||||
|
||||
### 类型 (Type)
|
||||
- `feat`: 新功能
|
||||
- `fix`: 修复 bug
|
||||
- `docs`: 文档变更
|
||||
- `style`: 代码格式调整
|
||||
- `refactor`: 代码重构
|
||||
- `test`: 测试相关
|
||||
- `chore`: 构建过程或辅助工具变更
|
||||
|
||||
### 示例提交消息
|
||||
```
|
||||
feat(auth): 添加用户注册功能
|
||||
|
||||
- 实现基于电子邮件的用户注册流程
|
||||
- 集成用户验证机制
|
||||
```
|
||||
|
||||
## 3. 推荐工作流程
|
||||
|
||||
1. 从 `main` 创建功能分支
|
||||
```bash
|
||||
git checkout -b feature/new-feature main
|
||||
```
|
||||
|
||||
2. 进行开发并频繁提交
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat(module): 描述具体变更"
|
||||
```
|
||||
|
||||
3. 推送分支到远程仓库
|
||||
```bash
|
||||
git push -u origin feature/new-feature
|
||||
```
|
||||
|
||||
4. 创建 Pull Request
|
||||
- 目标分支:`main`
|
||||
- 包含详细的变更说明
|
||||
- 等待代码审查和批准
|
||||
|
||||
5. 合并后清理分支
|
||||
```bash
|
||||
git checkout main
|
||||
git pull
|
||||
git branch -d feature/new-feature
|
||||
```
|
||||
|
||||
## 4. 其他最佳实践
|
||||
|
||||
- 保持提交原子化和有意义
|
||||
- 编写清晰、简洁的提交消息
|
||||
- 避免在一个提交中包含多个无关的变更
|
||||
- 使用 `.gitignore` 排除不需要版本控制的文件
|
||||
|
||||
## 5. 推荐工具
|
||||
|
||||
- Git 提交检查:`pre-commit`
|
||||
- 代码审查:GitHub/GitLab Pull Request
|
||||
Reference in New Issue
Block a user