thread-master/Makefile

201 lines
6.9 KiB
Makefile
Raw 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.

# 巡樓 monorepo Makefile
# 兩種模式:
# dev - 本機開發docker 起 Mongo/Redisgo run / vite dev 在本機跑)
# docker - 全棧一鍵啟動Mongo/Redis/gateway/worker/node-worker/web 全在 docker
#
# 常用:
# make up # 一鍵build + 啟動整套含前後端、worker、DB
# make down # 停掉整套
# make logs # 追全部日誌
# make dev-infra # 本機開發:只起 Mongo/Redis
# make dev-backend # 本機開發go run gateway (:8890)
# make dev-frontend # 本機開發vite dev (:5173)
SHELL := /bin/bash
# --- 路徑 ---
BACKEND_DIR := backend
FRONTEND_DIR := frontend
# --- docker composeprod 全棧)---
COMPOSE_FILE := deploy/docker-compose.yml
ENV_FILE := deploy/.env
COMPOSE := docker compose -f $(COMPOSE_FILE) --env-file $(ENV_FILE)
# --- docker compose本地測試base + dev override + dev env---
DEV_ENV_FILE := deploy/.env.dev
DEV_COMPOSE := docker compose -f $(COMPOSE_FILE) -f deploy/docker-compose.dev.yml --env-file $(DEV_ENV_FILE)
# go worker 用 gateway 內嵌dev 不啟動獨立 worker 容器
DEV_SERVICES := mongo redis init gateway node-worker web
# --- dev 用 worker secret對應 etc/gateway.yaml 的 InternalWorker.Secret---
DEV_WORKER_SECRET := haixun-dev-worker-secret
DEV_BACKEND_URL := http://127.0.0.1:8890
.DEFAULT_GOAL := help
.PHONY: help
help: ## 顯示可用指令
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
| awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}'
$(ENV_FILE):
@test -f $(ENV_FILE) || (cp deploy/.env.example $(ENV_FILE) && echo "已從 deploy/.env.example 建立 $(ENV_FILE),請填入密碼與 secret 後再 make up")
# ============================================================
# DOCKER全棧一鍵
# ============================================================
.PHONY: up
up: $(ENV_FILE) ## [docker] 一鍵啟動整套build + up背景
$(COMPOSE) up -d --build
@echo ""
@echo "=== 啟動中 ==="
@echo " 前端: http://localhost:$$(grep -E '^WEB_PORT=' $(ENV_FILE) | cut -d= -f2)"
@echo " 健康檢查: curl http://localhost:$$(grep -E '^WEB_PORT=' $(ENV_FILE) | cut -d= -f2)/api/v1/health"
@echo " 看狀態: make ps 看日誌: make logs"
.PHONY: down
down: ## [docker] 停掉整套(保留資料 volume
$(COMPOSE) down
.PHONY: down-clean
down-clean: ## [docker] 停掉整套並刪除資料 volume清空 Mongo/Redis
$(COMPOSE) down -v
.PHONY: build
build: $(ENV_FILE) ## [docker] 只 build image不啟動
$(COMPOSE) build
.PHONY: rebuild
rebuild: $(ENV_FILE) ## [docker] 無快取重新 build 並重啟
$(COMPOSE) build --no-cache
$(COMPOSE) up -d
.PHONY: restart
restart: ## [docker] 重啟所有服務
$(COMPOSE) restart
.PHONY: ps
ps: ## [docker] 看服務狀態
$(COMPOSE) ps
.PHONY: logs
logs: ## [docker] 追全部日誌Ctrl-C 離開)
$(COMPOSE) logs -f
.PHONY: logs-gateway
logs-gateway: ## [docker] 只看 gateway 日誌
$(COMPOSE) logs -f gateway
.PHONY: init
init: $(ENV_FILE) ## [docker] 重跑一次 DB 初始化(索引/權限/admin冪等
$(COMPOSE) run --rm init
.PHONY: config
config: $(ENV_FILE) ## [docker] 驗證 compose 設定
$(COMPOSE) config >/dev/null && echo "docker compose config OK"
# ============================================================
# DEV本地測試全走 docker
# ============================================================
.PHONY: dev-up
dev-up: ## [dev] 一鍵:本地 docker 測試gateway 開 :8890web 開 :8080go worker 內嵌)
$(DEV_COMPOSE) up -d --build $(DEV_SERVICES)
@echo ""
@echo "=== 本地測試啟動中 ==="
@echo " 前端: http://localhost:$$(grep -E '^WEB_PORT=' $(DEV_ENV_FILE) | cut -d= -f2)"
@echo " API http://localhost:8890/api/v1/health"
@echo " DevHeaderFallback 已開(可用 X-Tenant-ID / X-UID 模擬登入)"
.PHONY: dev-down
dev-down: ## [dev] 停掉本地 docker保留資料
$(DEV_COMPOSE) down
.PHONY: dev-down-clean
dev-down-clean: ## [dev] 停掉本地 docker 並清空資料 volume
$(DEV_COMPOSE) down -v
.PHONY: dev-rebuild
dev-rebuild: ## [dev] 改 code 後重新 build 並重啟本地 docker
$(DEV_COMPOSE) up -d --build $(DEV_SERVICES)
.PHONY: dev-restart
dev-restart: ## [dev] 只重啟(改了 etc/*.yaml 後不用 rebuild掛載即生效
$(DEV_COMPOSE) restart gateway node-worker
.PHONY: dev-ps
dev-ps: ## [dev] 看本地 docker 狀態
$(DEV_COMPOSE) ps
.PHONY: dev-logs
dev-logs: ## [dev] 追本地 docker 日誌
$(DEV_COMPOSE) logs -f
.PHONY: dev-init
dev-init: ## [dev] 重跑一次 DB 初始化(索引/權限/admin冪等
$(DEV_COMPOSE) run --rm init
.PHONY: dev
dev: ## [dev] 本地 docker 測試說明
@echo "本地測試(全 docker"
@echo " make dev-up # 一鍵起整套(前端 :8080、API :8890"
@echo " make dev-logs # 看日誌"
@echo " make dev-restart # 改 etc/*.yaml 後重啟(免 rebuild"
@echo " make dev-rebuild # 改 Go/前端 code 後重 build"
@echo " make dev-down # 停(保留資料)"
# --- 進階:不進 docker直接本機 go run / vite需自備 Go/Node---
.PHONY: local-infra
local-infra: ## [local] 只起 Mongo + Redisdocker其餘本機跑
$(DEV_COMPOSE) up -d mongo redis
$(DEV_COMPOSE) ps
.PHONY: local-backend
local-backend: ## [local] 本機 go run gateway (:8890)
cd $(BACKEND_DIR) && go run . -f etc/gateway.yaml
.PHONY: local-worker
local-worker: ## [local] 本機 go run Go job worker (:8891)
cd $(BACKEND_DIR) && go run ./cmd/worker -f etc/gateway.worker.yaml
.PHONY: local-node-worker
local-node-worker: ## [local] 本機跑 Node playwright worker (style-8d)
cd $(BACKEND_DIR)/worker && npm install && \
HAIXUN_WORKER_SECRET=$(DEV_WORKER_SECRET) HAIXUN_BACKEND_URL=$(DEV_BACKEND_URL) npm run style-8d
.PHONY: local-frontend
local-frontend: ## [local] 本機跑前端 dev server (:5173)
cd $(FRONTEND_DIR) && npm install && npm run dev
.PHONY: local-init
local-init: ## [local] 本機初始化 DB索引/權限)並建立 admin
cd $(BACKEND_DIR) && go run ./cmd/tool init -f etc/gateway.yaml
# ============================================================
# 驗證 / 維護
# ============================================================
.PHONY: tidy
tidy: ## go mod tidy
cd $(BACKEND_DIR) && go mod tidy
.PHONY: gen-api
gen-api: ## 用 goctl 從 .api 重新產生 handler/logic/types/routes
cd $(BACKEND_DIR) && goctl api go -api generate/api/gateway.api -dir . -home generate/goctl -style go_zero
.PHONY: fmt
fmt: ## gofmt 後端
cd $(BACKEND_DIR) && gofmt -w .
.PHONY: test
test: ## 跑後端測試
cd $(BACKEND_DIR) && go test ./...
.PHONY: verify
verify: $(ENV_FILE) ## 後端 build/test + 前端 build + compose 語法
cd $(BACKEND_DIR) && go build ./... && go test ./...
cd $(FRONTEND_DIR) && npm ci && npm run build
$(COMPOSE) config >/dev/null && echo "docker compose config OK"