topfans/backend/Makefile
2026-06-16 22:19:44 +08:00

196 lines
7.8 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-prod-tunnel
# 默认目标
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-prod-tunnel - 清理生产 docker 压测数据 (走 SSH 转发)"
@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-prod-tunnel - 清理生产 docker 压测数据 (走 SSH 转发)"
@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
# --- 本地连生产 (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
# 全部:安装依赖 + 生成文档 + 构建
all: install-swagger gen-swagger build
@echo ""
@echo "✅ 所有步骤完成!"
@echo " 现在可以运行: make start-swagger"