.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!"