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>
51 lines
1.6 KiB
Makefile
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!"
|