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
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; }
|
|
|