2025-11-17 14:11:46 +08:00
# 项目名称
PROJECT_NAME := dianshang
SERVER_DIR := server
BINARY_NAME := dianshang
# Go 相关变量
GO_VERSION := 1.21
GOOS := linux
GOARCH := amd64
# Docker 相关变量
DOCKER_IMAGE := $( PROJECT_NAME) -server
DOCKER_TAG := latest
# 默认目标
.PHONY : help
help : ## 显示帮助信息
@echo "可用的命令:"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $( MAKEFILE_LIST)
# 开发相关命令
.PHONY : dev
dev : ## 启动开发环境
cd $( SERVER_DIR) && go run cmd/server/main.go
.PHONY : build
build : ## 构建二进制文件
cd $( SERVER_DIR) && CGO_ENABLED = 0 GOOS = $( GOOS) GOARCH = $( GOARCH) go build -a -installsuffix cgo -o $( BINARY_NAME) cmd/server/main.go
.PHONY : clean
clean : ## 清理构建文件
cd $( SERVER_DIR) && rm -f $( BINARY_NAME)
docker system prune -f
.PHONY : test
test : ## 运行测试
cd $( SERVER_DIR) && go test -v ./...
.PHONY : fmt
fmt : ## 格式化代码
cd $( SERVER_DIR) && go fmt ./...
.PHONY : lint
lint : ## 代码检查
cd $( SERVER_DIR) && golangci-lint run
.PHONY : deps
deps : ## 下载依赖
cd $( SERVER_DIR) && go mod download && go mod tidy
# 数据库相关命令
.PHONY : migrate
migrate : ## 运行数据库迁移
cd $( SERVER_DIR) && go run cmd/migrate/main.go
.PHONY : migrate -seed
migrate-seed : ## 运行数据库迁移并初始化数据
cd $( SERVER_DIR) && go run cmd/migrate/main.go --seed
.PHONY : db -reset
db-reset : ## 重置数据库
docker-compose exec mysql mysql -uroot -proot123456 -e "DROP DATABASE IF EXISTS dianshang; CREATE DATABASE dianshang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
$( MAKE) migrate-seed
# Docker 相关命令
.PHONY : docker -build
docker-build : ## 构建 Docker 镜像
docker build -t $( DOCKER_IMAGE) :$( DOCKER_TAG) $( SERVER_DIR)
.PHONY : docker -run
docker-run : ## 运行 Docker 容器
docker run -d --name $( PROJECT_NAME) -server -p 8080:8080 $( DOCKER_IMAGE) :$( DOCKER_TAG)
.PHONY : docker -stop
docker-stop : ## 停止 Docker 容器
docker stop $( PROJECT_NAME) -server || true
docker rm $( PROJECT_NAME) -server || true
.PHONY : docker -logs
docker-logs : ## 查看 Docker 容器日志
docker logs -f $( PROJECT_NAME) -server
# Docker Compose 相关命令
.PHONY : up
up : ## 启动所有服务
docker-compose up -d
.PHONY : down
down : ## 停止所有服务
docker-compose down
.PHONY : restart
restart : ## 重启所有服务
docker-compose restart
.PHONY : logs
logs : ## 查看所有服务日志
docker-compose logs -f
.PHONY : logs -server
logs-server : ## 查看服务器日志
docker-compose logs -f server
.PHONY : logs -mysql
logs-mysql : ## 查看 MySQL 日志
docker-compose logs -f mysql
.PHONY : logs -redis
logs-redis : ## 查看 Redis 日志
docker-compose logs -f redis
.PHONY : ps
ps : ## 查看服务状态
docker-compose ps
# 生产部署相关命令
.PHONY : deploy -build
deploy-build : ## 构建生产版本
cd $( SERVER_DIR) && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 go build -ldflags= "-w -s" -a -installsuffix cgo -o $( BINARY_NAME) cmd/server/main.go
.PHONY : deploy -docker
deploy-docker : ## 构建并推送 Docker 镜像
docker build -t $( DOCKER_IMAGE) :$( DOCKER_TAG) $( SERVER_DIR)
docker tag $( DOCKER_IMAGE) :$( DOCKER_TAG) $( DOCKER_IMAGE) :latest
# docker push $(DOCKER_IMAGE):$(DOCKER_TAG)
# docker push $(DOCKER_IMAGE):latest
2025-11-28 15:18:10 +08:00
# 多环境运行命令
.PHONY : run -dev
run-dev : ## 运行开发环境
cd $( SERVER_DIR) && GO_ENV = development go run cmd/server/main.go
.PHONY : run -test
run-test : ## 运行测试环境
cd $( SERVER_DIR) && GO_ENV = test go run cmd/server/main.go
.PHONY : run -prod
run-prod : ## 运行生产环境(通用)
cd $( SERVER_DIR) && GO_ENV = production go run cmd/server/main.go
.PHONY : run -prod -cn
run-prod-cn : ## 运行生产环境-中国区
cd $( SERVER_DIR) && GO_ENV = prod-cn go run cmd/server/main.go
.PHONY : run -prod -us
run-prod-us : ## 运行生产环境-美国区
cd $( SERVER_DIR) && GO_ENV = prod-us go run cmd/server/main.go
.PHONY : run -prod -eu
run-prod-eu : ## 运行生产环境-欧洲区
cd $( SERVER_DIR) && GO_ENV = prod-eu go run cmd/server/main.go
# 多环境构建命令
.PHONY : build -prod -cn
build-prod-cn : ## 构建中国区生产版本
cd $( SERVER_DIR) && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 go build -ldflags= "-w -s" -a -installsuffix cgo -o $( BINARY_NAME) -cn cmd/server/main.go
.PHONY : build -prod -us
build-prod-us : ## 构建美国区生产版本
cd $( SERVER_DIR) && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 go build -ldflags= "-w -s" -a -installsuffix cgo -o $( BINARY_NAME) -us cmd/server/main.go
.PHONY : build -prod -eu
build-prod-eu : ## 构建欧洲区生产版本
cd $( SERVER_DIR) && CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 go build -ldflags= "-w -s" -a -installsuffix cgo -o $( BINARY_NAME) -eu cmd/server/main.go
2025-11-17 14:11:46 +08:00
# 工具命令
.PHONY : install -tools
install-tools : ## 安装开发工具
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
go install github.com/swaggo/swag/cmd/swag@latest
.PHONY : gen -docs
gen-docs : ## 生成 API 文档
cd $( SERVER_DIR) && swag init -g cmd/server/main.go
.PHONY : check -env
check-env : ## 检查环境
@echo "检查 Go 版本..."
@go version
@echo "检查 Docker 版本..."
@docker --version
@echo "检查 Docker Compose 版本..."
@docker-compose --version
# 快速启动命令
.PHONY : quick -start
quick-start : ## 快速启动项目
@echo "正在启动项目..."
$( MAKE) up
@echo "等待服务启动..."
@sleep 10
$( MAKE) migrate-seed
@echo "项目启动完成!"
@echo "API 地址: http://localhost:8080"
@echo "健康检查: http://localhost:8080/health"
.PHONY : quick -stop
quick-stop : ## 快速停止项目
@echo "正在停止项目..."
$( MAKE) down
@echo "项目已停止!"