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

51 lines
1.6 KiB
Makefile

.PHONY: help init keys up down logs restart build rebuild backend frontend clean
help:
@echo "Available commands:"
@echo " make init - 复制 .env.example 到 .env(如不存在)"
@echo " make keys - 生成 SECRET_KEY 和 FERNET_KEY 并写入 .env"
@echo " make up - 启动所有服务(首次会自动 build)"
@echo " make down - 停止所有服务"
@echo " make logs - 跟踪查看 backend 日志"
@echo " make restart - 重启所有服务"
@echo " make build - 构建镜像"
@echo " make rebuild - 强制重新构建(无缓存)"
@echo " make clean - 停止服务并清理 volumes(会删除数据!)"
init:
@if [ ! -f .env ]; then cp .env.example .env && echo "[ok] .env created"; else echo "[skip] .env already exists"; fi
keys:
@if grep -q "please-change-me" .env 2>/dev/null; then \
echo "Generating SECRET_KEY..."; \
sed -i "s|^SECRET_KEY=.*|SECRET_KEY=$$(openssl rand -hex 32)|" .env; \
echo "Generating FERNET_KEY..."; \
sed -i "s|^FERNET_KEY=.*|FERNET_KEY=$$(python3 -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')|" .env; \
echo "[ok] keys generated"; \
else \
echo "[skip] .env already has real keys"; \
fi
up:
docker compose up -d --build
@echo "[ok] services started. Frontend: http://localhost:5173 Backend: http://localhost:8000"
down:
docker compose down
logs:
docker compose logs -f backend
restart:
docker compose restart
build:
docker compose build
rebuild:
docker compose build --no-cache
clean:
docker compose down -v
@echo "[warn] volumes removed - all backup metadata and local backups deleted!"