4e3a4b4602
带 Web 操作界面的备份系统,支持: - 数据源:MySQL 数据库(mysqldump)、服务器目录(tar.gz) - 存储目标:本地目录、S3 兼容对象存储(MinIO/Ceph/AWS S3) - 触发方式:手动 + Cron 定时调度(APScheduler) - 备份还原:MySQL 库、目录 - JWT 登录认证 + Fernet 字段加密 - 保留策略:按数量 + 按天数双重清理 技术栈:FastAPI + SQLAlchemy 2 + APScheduler + aioboto3; 前端 Vite + React 18 + TypeScript + Ant Design 5 + Zustand。 Docker Compose 一键起。 Co-Authored-By: Claude <noreply@anthropic.com>
86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
# 数据备份管理系统
|
||
|
||
一个带 Web 操作界面的备份系统,支持将 **MySQL 数据库** 和 **服务器目录** 备份到 **本地目录** 或 **S3 兼容对象存储**(AWS S3 / MinIO / Ceph)。支持手动触发、Cron 定时调度、备份保留策略,以及从备份还原。
|
||
|
||
## 功能
|
||
|
||
- 📦 **多数据源**:MySQL 数据库(mysqldump)、服务器目录(tar.gz)
|
||
- ☁️ **多存储目标**:本地目录、S3 兼容对象存储
|
||
- ⏰ **Cron 定时调度**:标准 cron 表达式
|
||
- 🔁 **备份还原**:从备份恢复 MySQL 库 / 解压目录
|
||
- 🗂️ **保留策略**:保留最近 N 个 + 保留 N 天
|
||
- 👤 **JWT 登录认证**:单用户/多用户管理后台
|
||
- 📊 **运行历史与日志**:每次备份的执行详情、SHA256 校验、大小、耗时
|
||
|
||
## 技术栈
|
||
|
||
- **后端**:Python 3.11、FastAPI、SQLAlchemy 2、APScheduler、boto3/aioboto3
|
||
- **前端**:Vite + React 18 + TypeScript + Ant Design 5
|
||
- **数据库**:SQLite(可平滑迁移 PostgreSQL)
|
||
- **部署**:Docker Compose
|
||
|
||
## 快速开始
|
||
|
||
### 1. 准备环境变量
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
make keys # 自动生成 SECRET_KEY 和 FERNET_KEY
|
||
```
|
||
|
||
或手动编辑 `.env`,至少填入以下三项:
|
||
|
||
```bash
|
||
SECRET_KEY=<openssl rand -hex 32>
|
||
FERNET_KEY=<python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())'>
|
||
INITIAL_ADMIN_PASSWORD=<your-strong-password>
|
||
```
|
||
|
||
### 2. 启动
|
||
|
||
```bash
|
||
make up
|
||
```
|
||
|
||
- 前端:**http://localhost:5173**
|
||
- 后端 API:**http://localhost:8000**
|
||
- API 文档:**http://localhost:8000/docs**
|
||
|
||
### 3. 首次使用
|
||
|
||
1. 打开 `http://localhost:5173`,用 `admin` / `INITIAL_ADMIN_PASSWORD` 登录
|
||
2. **Storages** → 新建一个存储目标(Local 路径或 S3 桶)
|
||
3. **Jobs → 新建** → 选择数据源类型(MySQL / 目录)→ 填写源信息 → 选存储目标 → 保存
|
||
4. Job 列表点 **Run Now** 立即触发,或填写 `cron_expression` 启用定时调度
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
make logs # 查看后端日志
|
||
make restart # 重启服务
|
||
make down # 停止服务
|
||
make clean # 停止并清理所有数据
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
.
|
||
├── docker-compose.yml
|
||
├── .env.example
|
||
├── Makefile
|
||
├── backend/ # FastAPI 后端
|
||
└── frontend/ # React 前端
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- ⚠️ **单实例部署**:内置 APScheduler,**不要启动多个 backend 副本**,否则会出现重复调度。多副本需要改造为分布式锁。
|
||
- 🔐 **敏感字段加密**:MySQL 密码和 S3 SecretKey 在数据库中以 Fernet 加密存储,前端永远看不到明文。
|
||
- 💾 **数据持久化**:所有元数据在 `backend-data` 卷,本地备份在 `local-backups` 卷。删除前请先 `make down` 备份。
|
||
- 🗄️ **mysqldump 必须可用**:备份 MySQL 时后端容器需能调用 `mysqldump`(官方镜像已安装)。
|
||
|
||
## License
|
||
|
||
MIT
|