226 lines
9.7 KiB
Makefile
226 lines
9.7 KiB
Makefile
# TopFans Backend Makefile
|
||
# 用于简化开发流程
|
||
|
||
.PHONY: help install-swagger gen-swagger update-swagger start-swagger start-all stop-all clean build run all loadgen-build loadgen-test loadgen-vet loadgen-ci loadgen-seed-local loadgen-seed-prod-tunnel loadgen-cleanup-local loadgen-cleanup-local-full loadgen-cleanup-prod-tunnel loadgen-cleanup-prod-tunnel-full loadgen-report
|
||
|
||
# 默认目标
|
||
help:
|
||
@echo "TopFans Backend - 可用命令:"
|
||
@echo ""
|
||
@echo "Swagger 相关:"
|
||
@echo " make install-swagger - 安装 Swagger 依赖"
|
||
@echo " make gen-swagger - 生成 Swagger 文档"
|
||
@echo " make update-swagger - 更新 Swagger 文档(代码修改后)"
|
||
@echo " make start-swagger - 启动 Gateway 并打开 Swagger UI"
|
||
@echo ""
|
||
@echo "服务管理:"
|
||
@echo " make start-all - 启动所有服务(含 Swagger)"
|
||
@echo " make stop-all - 停止所有服务"
|
||
@echo " make restart-all - 重启所有服务(含重新生成 Swagger)"
|
||
@echo ""
|
||
@echo "开发相关:"
|
||
@echo " make build - 构建 Gateway"
|
||
@echo " make run - 运行 Gateway"
|
||
@echo " make all - 安装依赖 + 生成文档 + 构建"
|
||
@echo ""
|
||
@echo "压测工具:"
|
||
@echo " make loadgen-build - 编译 seed + loadgen 到 bin/"
|
||
@echo " make loadgen-test - 运行 loadgen 单元测试"
|
||
@echo " make loadgen-vet - go vet 静态检查"
|
||
@echo ""
|
||
@echo "压测 seed 便捷入口 (免去手敲 flag):"
|
||
@echo " make loadgen-seed-local - seed 写入本地 docker dev (top-fans:15432)"
|
||
@echo " make loadgen-seed-prod-tunnel - seed 通过 SSH 端口转发写生产 (127.0.0.1:25432)"
|
||
@echo " make loadgen-cleanup-local - 清理本地 docker 压测数据 (保留账号)"
|
||
@echo " make loadgen-cleanup-local-full - 全清本地 docker 压测数据 (含 users + stars)"
|
||
@echo " make loadgen-cleanup-prod-tunnel - 清理生产 docker 压测数据 (保留账号,走 SSH 转发)"
|
||
@echo " make loadgen-cleanup-prod-tunnel-full - 全清生产压测数据 (含 users + stars,适合彻底收尾)"
|
||
@echo ""
|
||
@echo "清理:"
|
||
@echo " make clean - 清理生成的文件"
|
||
@echo ""
|
||
@echo "Swagger 相关:"
|
||
@echo " make install-swagger - 安装 Swagger 依赖"
|
||
@echo " make gen-swagger - 生成 Swagger 文档"
|
||
@echo " make update-swagger - 更新 Swagger 文档(代码修改后)"
|
||
@echo " make start-swagger - 启动 Gateway 并打开 Swagger UI"
|
||
@echo ""
|
||
@echo "开发相关:"
|
||
@echo " make build - 构建 Gateway"
|
||
@echo " make run - 运行 Gateway"
|
||
@echo " make all - 安装依赖 + 生成文档 + 构建"
|
||
@echo ""
|
||
@echo "压测工具:"
|
||
@echo " make loadgen-build - 编译 seed + loadgen 到 bin/"
|
||
@echo " make loadgen-test - 运行 loadgen 单元测试"
|
||
@echo " make loadgen-vet - go vet 静态检查"
|
||
@echo ""
|
||
@echo "压测 seed 便捷入口 (免去手敲 flag):"
|
||
@echo " make loadgen-seed-local - seed 写入本地 docker dev (top-fans:15432)"
|
||
@echo " make loadgen-seed-prod-tunnel - seed 通过 SSH 端口转发写生产 (127.0.0.1:25432)"
|
||
@echo " make loadgen-cleanup-local - 清理本地 docker 压测数据 (保留账号)"
|
||
@echo " make loadgen-cleanup-local-full - 全清本地 docker 压测数据 (含 users + stars)"
|
||
@echo " make loadgen-cleanup-prod-tunnel - 清理生产 docker 压测数据 (保留账号,走 SSH 转发)"
|
||
@echo " make loadgen-cleanup-prod-tunnel-full - 全清生产压测数据 (含 users + stars,适合彻底收尾)"
|
||
@echo ""
|
||
@echo "清理:"
|
||
@echo " make clean - 清理生成的文件"
|
||
|
||
# 安装 Swagger 依赖
|
||
install-swagger:
|
||
@echo "安装 Swagger 依赖..."
|
||
@bash install-swagger-deps.sh
|
||
|
||
# 生成 Swagger 文档
|
||
gen-swagger:
|
||
@echo "生成 Swagger 文档..."
|
||
@bash gen-swagger.sh
|
||
|
||
# 更新 Swagger 文档
|
||
update-swagger:
|
||
@echo "更新 Swagger 文档..."
|
||
@bash update-swagger.sh
|
||
|
||
# 启动所有服务(含 Swagger)
|
||
start-all:
|
||
@echo "启动所有服务(含 Swagger)..."
|
||
@bash start-all.sh
|
||
|
||
# 停止所有服务
|
||
stop-all:
|
||
@echo "停止所有服务..."
|
||
@bash stop-all.sh
|
||
|
||
# 重启所有服务(含重新生成 Swagger)
|
||
restart-all: stop-all start-all
|
||
|
||
# 构建 Gateway
|
||
build:
|
||
@echo "构建 Gateway..."
|
||
@cd backend/gateway && go build -o gateway .
|
||
|
||
# 完整编译验证: 编译所有包(含未被 main 包 import 的 client 库 + 所有测试文件)
|
||
# 用 `go test -run='^$'` 的副作用:它会编译所有包和测试文件,但 `-run='^$'` 匹配空串 → 0 个测试运行
|
||
# 这是覆盖 client RPC 库、未被依赖的 service 包的唯一标准做法
|
||
# 普通 `go build ./...` 不会扫到这些包,容易漏改
|
||
build-all:
|
||
@echo "完整编译验证(覆盖所有包,含 client 库)..."
|
||
@go test -count=1 -run='^$$' ./...
|
||
|
||
# 运行 Gateway
|
||
run:
|
||
@echo "运行 Gateway..."
|
||
@cd backend/gateway && ./gateway
|
||
|
||
# 清理生成的文件
|
||
clean:
|
||
@echo "清理生成的文件..."
|
||
@rm -rf backend/gateway/docs/*.go
|
||
@rm -rf backend/gateway/docs/*.json
|
||
@rm -rf backend/gateway/docs/*.yaml
|
||
@rm -rf backend/bin/
|
||
@echo "✅ 清理完成"
|
||
|
||
# ==================== Loadgen / 压测工具 ====================
|
||
|
||
# 编译 seed 和 loadgen 二进制到 bin/
|
||
loadgen-build:
|
||
@echo "编译 loadgen 工具..."
|
||
@mkdir -p bin
|
||
@go build -ldflags="-s -w" -o bin/seed ./scripts/loadgen/seed/
|
||
@go build -ldflags="-s -w" -o bin/loadgen ./scripts/loadgen/loadgen/
|
||
@echo "✅ seed + loadgen → bin/"
|
||
|
||
# 运行 loadgen 单元测试 (当前 23 个测试, 应全过)
|
||
loadgen-test:
|
||
@echo "运行 loadgen 单元测试..."
|
||
@go test -count=1 ./scripts/loadgen/...
|
||
|
||
# go vet 静态检查
|
||
loadgen-vet:
|
||
@echo "go vet loadgen..."
|
||
@go vet ./scripts/loadgen/...
|
||
|
||
# loadgen 完整 CI 入口: vet + test + build
|
||
loadgen-ci: loadgen-vet loadgen-test loadgen-build
|
||
|
||
# ============================================================
|
||
# 压测 seed 便捷入口 (按部署环境封装 DB 参数)
|
||
# ============================================================
|
||
#
|
||
# 三种部署对应的 DB 参数 (详见 backend/scripts/loadgen/seed/README.md):
|
||
# 1. 生产机直跑 : localhost:5432/topfans (seed 默认值, ssh 进去直接跑)
|
||
# 2. 本地联调 : localhost:15432/top-fans (宿主机 postgresql-database-1)
|
||
# 3. 本地连生产 : 127.0.0.1:25432/topfans (ssh -L 端口转发)
|
||
#
|
||
# 密码统一从对应 .env 文件读 (.env.prod / .env.local),避免在命令行明文泄露。
|
||
|
||
# --- 本地 docker dev (top-fans:15432, 密码 123456) ---
|
||
loadgen-seed-local: loadgen-build
|
||
@echo ">>> seed 写入本地 docker dev (top-fans:15432)"
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.local | cut -d= -f2) \
|
||
JWT_SECRET=$$(grep '^JWT_SECRET=' ../docker/.env.local | cut -d= -f2) \
|
||
./bin/seed \
|
||
--db-host=localhost --db-port=15432 --db-name=top-fans --db-user=postgres
|
||
|
||
loadgen-cleanup-local: loadgen-build
|
||
@echo ">>> 清理本地 docker 压测数据 (top-fans:15432,保留账号)"
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.local | cut -d= -f2) \
|
||
./bin/seed --cleanup \
|
||
--db-host=localhost --db-port=15432 --db-name=top-fans --db-user=postgres
|
||
|
||
# 全清版本:含 users + stars。跟 loadgen-cleanup-prod-tunnel-full 对称。
|
||
loadgen-cleanup-local-full: loadgen-build
|
||
@echo ">>> ⚠️ 全清本地 docker 压测数据 (top-fans:15432,含 users + stars)"
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.local | cut -d= -f2) \
|
||
./bin/seed --cleanup --full \
|
||
--db-host=localhost --db-port=15432 --db-name=top-fans --db-user=postgres
|
||
|
||
# --- 本地连生产 (ssh -L 25432 → 生产 docker 5432) ---
|
||
# 调用前请确保已建立转发: ssh -L 25432:127.0.0.1:5432 -N -f root@101.132.250.62
|
||
loadgen-seed-prod-tunnel: loadgen-build
|
||
@echo ">>> seed 通过 SSH 隧道写生产 (127.0.0.1:25432 → docker 5432)"
|
||
@if ! lsof -iTCP:25432 -sTCP:LISTEN >/dev/null 2>&1; then \
|
||
echo "❌ 25432 端口未监听,请先: ssh -L 25432:127.0.0.1:5432 -N -f root@101.132.250.62"; \
|
||
exit 1; \
|
||
fi
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.prod | cut -d= -f2) \
|
||
JWT_SECRET=$$(grep '^JWT_SECRET=' ../docker/.env.prod | cut -d= -f2) \
|
||
./bin/seed \
|
||
--db-host=127.0.0.1 --db-port=25432 --db-name=topfans --db-user=postgres
|
||
|
||
loadgen-cleanup-prod-tunnel: loadgen-build
|
||
@echo ">>> 清理生产 docker 压测数据 (走 SSH 隧道, 保留账号)"
|
||
@if ! lsof -iTCP:25432 -sTCP:LISTEN >/dev/null 2>&1; then \
|
||
echo "❌ 25432 端口未监听,请先: ssh -L 25432:127.0.0.1:5432 -N -f root@101.132.250.62"; \
|
||
exit 1; \
|
||
fi
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.prod | cut -d= -f2) \
|
||
./bin/seed --cleanup \
|
||
--db-host=127.0.0.1 --db-port=25432 --db-name=topfans --db-user=postgres
|
||
|
||
# 全清:连同 users + stars 都删。适合"压测彻底收尾"场景,不是"多轮压测保留账号"。
|
||
# 跟 loadgen-cleanup-prod-tunnel 的区别仅在末尾的 --full。
|
||
loadgen-cleanup-prod-tunnel-full: loadgen-build
|
||
@echo ">>> ⚠️ 全清生产 docker 压测数据 (含 users + stars,走 SSH 隧道)"
|
||
@if ! lsof -iTCP:25432 -sTCP:LISTEN >/dev/null 2>&1; then \
|
||
echo "❌ 25432 端口未监听,请先: ssh -L 25432:127.0.0.1:5432 -N -f root@101.132.250.62"; \
|
||
exit 1; \
|
||
fi
|
||
@DB_PASSWORD=$$(grep '^DB_PASSWORD=' ../docker/.env.prod | cut -d= -f2) \
|
||
./bin/seed --cleanup --full \
|
||
--db-host=127.0.0.1 --db-port=25432 --db-name=topfans --db-user=postgres
|
||
|
||
# 把 reports/ 下的 S*.json + run-metadata.json 合成 final-report.md
|
||
loadgen-report: loadgen-build
|
||
@echo ">>> 生成 final-report.md"
|
||
@./bin/loadgen --cmd=report --input=./reports --output=./reports/final-report.md
|
||
@echo "✅ final-report.md 已更新"
|
||
@ls -la reports/final-report.md
|
||
|
||
# 全部:安装依赖 + 生成文档 + 构建
|
||
all: install-swagger gen-swagger build
|
||
@echo ""
|
||
@echo "✅ 所有步骤完成!"
|
||
@echo " 现在可以运行: make start-swagger"
|