163 lines
4.1 KiB
Makefile
163 lines
4.1 KiB
Makefile
# 项目名称
|
|
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: 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 "项目已停止!"
|