# 数据备份管理系统 一个带 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= FERNET_KEY= INITIAL_ADMIN_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