99 lines
3.2 KiB
Makefile
99 lines
3.2 KiB
Makefile
GO ?= go
|
||
GOFMT ?= gofmt
|
||
GOCTL ?= goctl
|
||
GO_ZERO_STYLE := go_zero
|
||
API_ENTRY := ./generate/api/gateway.api
|
||
GOFILES := $(shell find . -name '*.go')
|
||
|
||
.DEFAULT_GOAL := help
|
||
|
||
help: ## 顯示可用指令
|
||
@echo "Haixun Backend"
|
||
@echo ""
|
||
@grep -E '^[a-zA-Z0-9_-]+:.*## ' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*## "}; {printf " make %-12s %s\n", $$1, $$2}'
|
||
|
||
tools: ## 安裝 goctl / goimports
|
||
@command -v $(GOCTL) >/dev/null 2>&1 || (echo ">> installing goctl" && $(GO) install github.com/zeromicro/go-zero/tools/goctl@latest)
|
||
@command -v goimports >/dev/null 2>&1 || (echo ">> installing goimports" && $(GO) install golang.org/x/tools/cmd/goimports@latest)
|
||
|
||
gen-api: tools ## 由 .api 生成 handler / logic / types
|
||
$(GOCTL) api go -api $(API_ENTRY) -dir . -style $(GO_ZERO_STYLE) -home generate/goctl
|
||
|
||
fmt: ## gofmt + goimports
|
||
$(GOFMT) -s -w $(GOFILES)
|
||
@command -v goimports >/dev/null 2>&1 && goimports -w . || true
|
||
|
||
test: ## 執行測試
|
||
$(GO) test ./...
|
||
|
||
run: ## 啟動 API(前景)
|
||
$(GO) run ./gateway.go -f etc/gateway.yaml
|
||
|
||
dev-all: ## 一鍵啟動 Mongo/Redis + API + 前端 + 8D worker(背景)
|
||
bash scripts/start-all.sh
|
||
|
||
stop-all: ## 一鍵停止全部開發服務
|
||
bash scripts/stop-all.sh
|
||
|
||
restart-all: ## 一鍵重啟全部開發服務
|
||
bash scripts/restart-all.sh
|
||
|
||
status-all: ## 查看全部開發服務狀態
|
||
bash scripts/status-all.sh
|
||
|
||
stop: stop-all ## 同 stop-all
|
||
|
||
restart: restart-all ## 同 restart-all
|
||
|
||
dev-8d: ## 一鍵啟動 API + Node 8D worker(前景,Ctrl+C 結束)
|
||
bash scripts/dev-with-style-8d.sh
|
||
|
||
CONFIG ?= etc/gateway.yaml
|
||
INIT_TENANT ?= default
|
||
INIT_EMAIL ?= admin@30cm.net
|
||
INIT_PASSWORD ?= Fafafa54088
|
||
|
||
tool-init: ## 初始化 Mongo indexes、預設權限與 admin 帳號
|
||
$(GO) run ./cmd/tool init -f $(CONFIG) -tenant $(INIT_TENANT) -email $(INIT_EMAIL) -password '$(INIT_PASSWORD)'
|
||
|
||
tool: ## 執行 cmd/tool(例:make tool ARGS="init -f etc/gateway.yaml")
|
||
$(GO) run ./cmd/tool $(ARGS)
|
||
|
||
web-install: ## 安裝前端依賴
|
||
cd web && npm install
|
||
|
||
web-dev: web-install ## 啟動前端 dev server(proxy 到 :8890)
|
||
cd web && npm run dev
|
||
|
||
extension-pack: ## 打包 Chrome 擴充為 web/public/downloads/*.zip
|
||
bash scripts/package-extension.sh
|
||
|
||
web-build: web-install extension-pack ## 建置前端靜態檔
|
||
cd web && npm run build
|
||
|
||
node-worker-style-8d: ## 啟動 Node 8D 爬蟲 worker
|
||
cd .. && npm run worker:style-8d
|
||
|
||
check: fmt test ## 格式化並測試
|
||
|
||
prod: ## 一鍵啟動 production Docker(API + Web + workers,分身數見 deploy/.env)
|
||
bash scripts/prod-up.sh
|
||
|
||
prod-update: ## 只重建/重啟 API+Web+Workers;mongo/redis 不重啟,資料留在 volume
|
||
bash scripts/prod-update.sh
|
||
|
||
prod-deps: ## 只啟動 mongo+redis(named volume 持久化)
|
||
bash scripts/prod-deps.sh
|
||
|
||
prod-down: ## 停止 stack(不刪 volume;Mongo/Redis 資料保留)
|
||
bash scripts/prod-down.sh
|
||
|
||
prod-wipe-data: ## 停止並刪除 mongo/redis volume(危險,需輸入 yes)
|
||
bash scripts/prod-wipe-data.sh
|
||
|
||
prod-logs: ## 追蹤 production logs(可傳 service 名,例:make prod-logs ARGS=api)
|
||
bash scripts/prod-logs.sh $(ARGS)
|
||
|
||
prod-build: web-build ## 建置靜態前端 + production images(不啟動)
|
||
cd deploy && docker compose -f docker-compose.prod.yml build
|