# 项目名称 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 # 多环境运行命令 .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 # 工具命令 .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 "项目已停止!"