.PHONY: start dev backend frontend install stop frontend-build docker-pull-caddy docker-build docker-up docker-down docker-logs ifneq (,$(wildcard .env)) include .env export endif CADDY_RUNTIME_IMAGE ?= affiliate-caddy:2 CADDY_SOURCE_IMAGE ?= caddy:2 CADDY_FALLBACK_IMAGES ?= docker.m.daocloud.io/library/caddy:2 registry.cn-hangzhou.aliyuncs.com/caddy/caddy:2 # 一键启动前后端(推荐) start dev: @bash ./start.sh backend: cd backend && go run ./cmd/server frontend: cd frontend && npm run dev install: cd backend && go mod tidy cd frontend && npm install # 停止占用默认端口的进程 stop: @-lsof -tiTCP:8080 -sTCP:LISTEN | xargs kill 2>/dev/null || true @-lsof -tiTCP:5173 -sTCP:LISTEN | xargs kill 2>/dev/null || true @echo "已尝试停止 8080 / 5173 端口服务" # Docker 部署相关命令 frontend-build: @echo "构建前端静态文件..." cd frontend && npm ci && npm run build docker-pull-caddy: @set -e; \ echo "准备 Caddy 运行镜像: $(CADDY_RUNTIME_IMAGE)"; \ for image in $(CADDY_SOURCE_IMAGE) $(CADDY_FALLBACK_IMAGES); do \ echo "尝试拉取 Caddy 镜像: $$image"; \ if docker pull "$$image"; then \ docker tag "$$image" "$(CADDY_RUNTIME_IMAGE)"; \ echo "已将 $$image 标记为 $(CADDY_RUNTIME_IMAGE)"; \ exit 0; \ fi; \ done; \ echo "错误: Caddy 镜像拉取失败,可在 .env 中设置 CADDY_SOURCE_IMAGE 或 CADDY_FALLBACK_IMAGES"; \ exit 1 docker-build: frontend-build docker-pull-caddy @echo "构建后端 Docker 镜像..." docker build -f Dockerfile.backend -t affiliate-backend:latest . @echo "构建完成,可执行: docker compose up -d --build" docker-up: frontend-build docker-pull-caddy @echo "启动 Docker Compose 服务..." docker compose up -d --build docker-down: @echo "停止并移除容器..." docker compose down docker-logs: @echo "查看 backend 和 caddy 日志..." docker compose logs -f backend caddy