duidui_fiber/Makefile
2026-03-27 10:34:03 +08:00

170 lines
5.1 KiB
Makefile
Raw Permalink 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.

.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 "✅ 清理完成"