Files
publ 4e3a4b4602 feat: 数据备份管理系统 v0.1.0
带 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>
2026-06-22 18:27:41 +08:00

86 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据备份管理系统
一个带 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