170 lines
5.1 KiB
Makefile
170 lines
5.1 KiB
Makefile
.PHONY: build run docker-build docker-run docker-clean tar tar-mac
|
||
|
||
# 变量定义
|
||
BINARY_NAME := dd-fiber-api
|
||
BINARY_PATH := bin/$(BINARY_NAME)
|
||
|
||
# 构建参数(可通过 make tar OS=darwin ARCH=arm64 等方式指定)
|
||
OS ?= linux
|
||
ARCH ?= amd64
|
||
|
||
# 创建必要的目录
|
||
init:
|
||
mkdir -p bin
|
||
mkdir -p deploy
|
||
|
||
# 生成 Wire 代码
|
||
wire:
|
||
@echo "生成 Wire 依赖注入代码..."
|
||
@WIRE_BIN=$$(go env GOPATH)/bin/wire; \
|
||
if [ -f "$$WIRE_BIN" ]; then \
|
||
$$WIRE_BIN gen ./internal/wire; \
|
||
elif command -v wire >/dev/null 2>&1; then \
|
||
wire gen ./internal/wire; \
|
||
else \
|
||
echo "使用 go run 方式运行 Wire..."; \
|
||
go run github.com/google/wire/cmd/wire@latest gen ./internal/wire; \
|
||
fi
|
||
@echo "✅ Wire 代码生成完成"
|
||
|
||
# 构建项目
|
||
build: wire
|
||
@echo "构建项目..."
|
||
@mkdir -p bin
|
||
@CGO_ENABLED=0 GOARCH=$(ARCH) GOOS=$(OS) go build -ldflags="-s -w" -o $(BINARY_PATH) .
|
||
@echo "✅ 构建完成: $(BINARY_PATH)"
|
||
|
||
# 运行服务(开发环境)
|
||
run:
|
||
@echo "启动服务..."
|
||
@go run . -config config.yaml
|
||
|
||
# 使用 Air 热重载运行(开发环境推荐)
|
||
air:
|
||
@echo "使用 Air 热重载启动服务..."
|
||
@AIR_BIN=$$(go env GOPATH)/bin/air; \
|
||
if [ -f "$$AIR_BIN" ]; then \
|
||
$$AIR_BIN; \
|
||
elif command -v air >/dev/null 2>&1; then \
|
||
air; \
|
||
else \
|
||
echo "❌ Air 未安装,请运行: go install github.com/air-verse/air@latest"; \
|
||
echo "或者使用 make run 运行"; \
|
||
exit 1; \
|
||
fi
|
||
|
||
# 打包部署(默认 Linux,可通过 OS=darwin ARCH=arm64 指定 macOS)
|
||
tar:
|
||
@if [ "$(OS)" = "darwin" ]; then \
|
||
echo "构建 macOS 版本 ($(ARCH))..."; \
|
||
echo "清理旧编译文件和生成代码..."; \
|
||
rm -rf bin/; \
|
||
rm -f internal/wire/wire_gen.go; \
|
||
echo "生成 Wire 依赖注入代码..."; \
|
||
WIRE_BIN=$$(go env GOPATH)/bin/wire; \
|
||
if [ -f "$$WIRE_BIN" ]; then \
|
||
$$WIRE_BIN gen ./internal/wire || exit 1; \
|
||
elif command -v wire >/dev/null 2>&1; then \
|
||
wire gen ./internal/wire || exit 1; \
|
||
else \
|
||
echo "使用 go run 方式运行 Wire..."; \
|
||
go run github.com/google/wire/cmd/wire@latest gen ./internal/wire || exit 1; \
|
||
fi; \
|
||
if [ ! -f "internal/wire/wire_gen.go" ]; then \
|
||
echo "❌ Wire 代码生成失败"; \
|
||
exit 1; \
|
||
fi; \
|
||
echo "✅ Wire 代码生成完成"; \
|
||
echo "编译 macOS 版本 ($(ARCH))..."; \
|
||
mkdir -p bin; \
|
||
CGO_ENABLED=0 GOOS=darwin GOARCH=$(ARCH) go build -ldflags="-s -w" -o $(BINARY_PATH) . || exit 1; \
|
||
if [ ! -f "$(BINARY_PATH)" ]; then \
|
||
echo "❌ 编译失败"; \
|
||
exit 1; \
|
||
fi; \
|
||
echo "✅ macOS 版本构建完成: $(BINARY_PATH)"; \
|
||
ls -lh $(BINARY_PATH); \
|
||
else \
|
||
echo "开始创建 Linux 部署包..."; \
|
||
if ! command -v docker >/dev/null 2>&1; then \
|
||
echo "❌ 未找到 Docker"; \
|
||
exit 1; \
|
||
fi; \
|
||
echo "清理旧编译文件和生成代码..."; \
|
||
rm -rf bin/; \
|
||
rm -f internal/wire/wire_gen.go; \
|
||
echo "生成 Wire 依赖注入代码..."; \
|
||
WIRE_BIN=$$(go env GOPATH)/bin/wire; \
|
||
if [ -f "$$WIRE_BIN" ]; then \
|
||
$$WIRE_BIN gen ./internal/wire || exit 1; \
|
||
elif command -v wire >/dev/null 2>&1; then \
|
||
wire gen ./internal/wire || exit 1; \
|
||
else \
|
||
echo "使用 go run 方式运行 Wire..."; \
|
||
go run github.com/google/wire/cmd/wire@latest gen ./internal/wire || exit 1; \
|
||
fi; \
|
||
if [ ! -f "internal/wire/wire_gen.go" ]; then \
|
||
echo "❌ Wire 代码生成失败"; \
|
||
exit 1; \
|
||
fi; \
|
||
echo "✅ Wire 代码生成完成"; \
|
||
echo "编译 Linux 版本 ($(ARCH))..."; \
|
||
mkdir -p bin; \
|
||
CGO_ENABLED=0 GOOS=linux GOARCH=$(ARCH) go build -ldflags="-s -w" -o $(BINARY_PATH) . || exit 1; \
|
||
if [ ! -f "$(BINARY_PATH)" ]; then \
|
||
echo "❌ 编译失败"; \
|
||
exit 1; \
|
||
fi; \
|
||
echo "✅ 编译完成: $(BINARY_PATH)"; \
|
||
ls -lh $(BINARY_PATH); \
|
||
echo "清理旧 Docker 镜像..."; \
|
||
docker rmi dd-fiber-api:latest 2>/dev/null || true; \
|
||
echo "构建容器镜像 (linux/amd64)..."; \
|
||
docker build --platform=linux/amd64 --no-cache -t dd-fiber-api:latest .; \
|
||
echo "导出部署包..."; \
|
||
mkdir -p deploy; \
|
||
rm -f deploy/dd-fiber-api.tar; \
|
||
docker save -o deploy/dd-fiber-api.tar dd-fiber-api:latest; \
|
||
echo "✅ 部署包创建完成: deploy/dd-fiber-api.tar"; \
|
||
ls -lh deploy/dd-fiber-api.tar; \
|
||
fi
|
||
|
||
# 快速构建 macOS 版本(便捷方法)
|
||
tar-mac:
|
||
@$(MAKE) tar OS=darwin ARCH=arm64
|
||
|
||
# 清理构建产物
|
||
clean:
|
||
@echo "清理构建产物..."
|
||
@rm -rf bin/
|
||
@rm -f deploy/dd-fiber-api.tar
|
||
@echo "✅ 清理完成"
|
||
|
||
# Docker 构建(本地测试用)
|
||
docker-build:
|
||
@echo "构建 Docker 镜像..."
|
||
@docker build -t dd-fiber-api:latest .
|
||
@echo "✅ Docker 镜像构建完成"
|
||
|
||
# Docker 运行(本地测试用)
|
||
docker-run:
|
||
@echo "运行 Docker 容器..."
|
||
@docker run -d \
|
||
--name dd-fiber-api \
|
||
--restart=unless-stopped \
|
||
-p 8080:8080 \
|
||
-p 8081:8081 \
|
||
-v $(PWD)/deploy/config.yaml:/app/data/config/config.yaml:ro \
|
||
-v $(PWD)/deploy/storage:/app/data/storage:ro \
|
||
dd-fiber-api:latest
|
||
@echo "✅ 容器已启动"
|
||
|
||
# 清理 Docker 资源
|
||
docker-clean:
|
||
@echo "清理 Docker 资源..."
|
||
@docker stop dd-fiber-api 2>/dev/null || true
|
||
@docker rm dd-fiber-api 2>/dev/null || true
|
||
@docker rmi dd-fiber-api:latest 2>/dev/null || true
|
||
@echo "✅ 清理完成"
|
||
|