#!/bin/bash set -e echo "=== 啟動巡樓開發環境服務 (不含 infra) ===" echo "前置條件: infra (Mongo/Redis) 必須已啟動,請先執行: make dev-infra" echo "" # 檢查 infra 是否運行 if ! docker compose -f infra/docker-compose.yml ps --status running 2>/dev/null | grep -q "mongo\|redis"; then echo "⚠️ 警告: infra (Mongo/Redis) 似乎未運行" echo " 請先執行: make dev-infra" echo "" read -p "是否繼續啟動服務? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 1. 啟動 Go gateway (port 8890) - 背景執行 echo "[1/4] 啟動 Go gateway (:8890)..." cd backend if [ ! -f etc/gateway.yaml ]; then echo " ✗ 找不到 etc/gateway.yaml" exit 1 fi nohup go run . -f etc/gateway.yaml > /tmp/haixun-gateway.log 2>&1 & GATEWAY_PID=$! cd .. sleep 2 if kill -0 $GATEWAY_PID 2>/dev/null; then echo " ✓ Gateway 已啟動 (PID: $GATEWAY_PID, log: /tmp/haixun-gateway.log)" else echo " ✗ Gateway 啟動失敗,查看日誌: cat /tmp/haixun-gateway.log" exit 1 fi # 2. Go job worker 已內嵌在 gateway(etc/gateway.yaml JobWorker.Enabled=true) echo "[2/4] Go job worker..." echo " ✓ 使用 gateway 內嵌 worker(勿另開 cmd/worker,避免殘留舊進程搶 job)" # 3. 啟動 Node worker (style-8d) - 背景執行 echo "[3/4] 啟動 Node worker (style-8d)..." cd backend/worker if [ ! -f package.json ]; then echo " ✗ 找不到 package.json" exit 1 fi export HAIXUN_WORKER_SECRET=haixun-dev-worker-secret export HAIXUN_BACKEND_URL=http://127.0.0.1:8890 nohup npm run style-8d > /tmp/haixun-node-worker.log 2>&1 & NODE_WORKER_PID=$! cd ../.. sleep 3 if kill -0 $NODE_WORKER_PID 2>/dev/null; then echo " ✓ Node worker 已啟動 (PID: $NODE_WORKER_PID, log: /tmp/haixun-node-worker.log)" else echo " ✗ Node worker 啟動失敗,查看日誌: cat /tmp/haixun-node-worker.log" exit 1 fi # 4. 啟動前端 dev server (port 5173) - 背景執行 echo "[4/4] 啟動前端 dev server (:5173)..." cd frontend if [ ! -f package.json ]; then echo " ✗ 找不到 package.json" exit 1 fi nohup npm run dev > /tmp/haixun-frontend.log 2>&1 & FRONTEND_PID=$! cd .. sleep 3 if kill -0 $FRONTEND_PID 2>/dev/null; then echo " ✓ 前端已啟動 (PID: $FRONTEND_PID, log: /tmp/haixun-frontend.log)" else echo " ✗ 前端啟動失敗,查看日誌: cat /tmp/haixun-frontend.log" exit 1 fi echo "" echo "=== 所有開發環境服務已啟動 ===" echo "" echo "服務狀態:" echo " Gateway (API): http://localhost:8890 (PID: $GATEWAY_PID, 內嵌 Go worker)" echo " Node Worker: style-8d worker (PID: $NODE_WORKER_PID)" echo " Frontend (Vite): http://localhost:5173 (PID: $FRONTEND_PID)" echo "" echo "日誌檔案:" echo " Gateway: tail -f /tmp/haixun-gateway.log" echo " Node Worker: tail -f /tmp/haixun-node-worker.log" echo " Frontend: tail -f /tmp/haixun-frontend.log" echo "" echo "停止所有服務: ./stop-dev.sh" echo "查看 infra: make dev-infra # 或 docker compose -f infra/docker-compose.yml ps"