You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 lines
3.9 KiB

#!/usr/bin/env bash
# 本地开发一键启动:console 服务 + admin 前端
# 用法:./dev.sh [--no-build]
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
SERVICES_DIR="$ROOT/apps/services"
CONSOLE_DIR="$SERVICES_DIR/services/console"
ADMIN_DIR="$ROOT/apps/admin"
BIN_DIR="$ROOT/.build"
LOG_DIR="$ROOT/.logs"
NO_BUILD=${1:-""}
mkdir -p "$BIN_DIR" "$LOG_DIR"
# ── 颜色输出 ─────────────────────────────────────────────
green() { echo -e "\033[32m$*\033[0m"; }
red() { echo -e "\033[31m$*\033[0m"; }
blue() { echo -e "\033[34m$*\033[0m"; }
# ── 清理子进程 ────────────────────────────────────────────
PIDS=()
cleanup() {
echo ""
blue ">>> 停止所有服务..."
for pid in "${PIDS[@]}"; do
kill "$pid" 2>/dev/null || true
done
wait 2>/dev/null || true
green ">>> 已停止"
}
trap cleanup EXIT INT TERM
# ── 1. 检查依赖 ──────────────────────────────────────────
blue ">>> 检查环境..."
command -v go >/dev/null || { red "未找到 go,请先安装 Go"; exit 1; }
command -v node >/dev/null || { red "未找到 node"; exit 1; }
# ── 2. 编译 console 服务 ─────────────────────────────────
if [[ "$NO_BUILD" != "--no-build" ]]; then
blue ">>> 编译 console 服务..."
(cd "$SERVICES_DIR" && go build -o "$BIN_DIR/console" "./services/console/") \
&& green ">>> console 编译完成" \
|| { red ">>> console 编译失败"; exit 1; }
else
[[ -f "$BIN_DIR/console" ]] || { red ">>> 找不到 $BIN_DIR/console,请先编译(去掉 --no-build)"; exit 1; }
fi
# ── 3. 启动 console 服务 ─────────────────────────────────
blue ">>> 启动 console 服务(:8080)..."
mkdir -p "$CONSOLE_DIR/log" "$CONSOLE_DIR/consoleweb"
(cd "$CONSOLE_DIR" && "$BIN_DIR/console" -conf ./conf/console.yaml >> "$LOG_DIR/console.log" 2>&1) &
CONSOLE_PID=$!
PIDS+=($CONSOLE_PID)
green ">>> console 已启动 PID=$CONSOLE_PID,日志:$LOG_DIR/console.log"
# 等待 console 端口就绪(最多 15 秒)
blue ">>> 等待 console 就绪..."
for i in $(seq 1 15); do
if nc -z 127.0.0.1 8080 2>/dev/null; then
green ">>> console 端口就绪 (${i}s)"
break
fi
sleep 1
if [[ $i -eq 15 ]]; then
red ">>> console 15 秒内未就绪,检查日志:$LOG_DIR/console.log"
tail -30 "$LOG_DIR/console.log" 2>/dev/null || true
exit 1
fi
done
# ── 4. 启动 admin 前端 ───────────────────────────────────
blue ">>> 启动 admin 前端(:3000)..."
(cd "$ADMIN_DIR" && pnpm dev >> "$LOG_DIR/admin.log" 2>&1) &
ADMIN_PID=$!
PIDS+=($ADMIN_PID)
green ">>> admin 已启动 PID=$ADMIN_PID,日志:$LOG_DIR/admin.log"
# ── 5. 汇总 ─────────────────────────────────────────────
echo ""
green "============================================"
green " console API : http://localhost:8080"
green " admin 前端 : http://localhost:3000"
green " 账号/密码 : admin / 123456"
green "============================================"
echo ""
blue "日志文件:"
echo " console : $LOG_DIR/console.log"
echo " admin : $LOG_DIR/admin.log"
echo ""
blue "按 Ctrl+C 停止所有服务"
# 尾随输出(同时看两个日志)
tail -f "$LOG_DIR/console.log" "$LOG_DIR/admin.log" &
TAIL_PID=$!
PIDS+=($TAIL_PID)
# 如果任一子进程意外退出就报错
wait $CONSOLE_PID || { red ">>> console 意外退出"; exit 1; }
wait $ADMIN_PID || { red ">>> admin 意外退出"; exit 1; }