#!/bin/bash # 智慧培训管理系统 本地一键启动脚本(含 Tailscale 跳板机数据库隧道自动打通) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo "=== 1. 检查并建立 Kingbase 数据库 SSH 隧道 (通过 100.70.157.41) ===" if nc -zv -G 1 127.0.0.1 4321 >/dev/null 2>&1; then echo "数据库隧道已就绪 (127.0.0.1:4321)。" else echo "正在通过 wzbmatebook (100.70.157.41) 建立 4321 端口隧道..." pkill -f "ssh.*4321:192.168.139.218:4321" 2>/dev/null nohup ssh -f -N -L 4321:192.168.139.218:4321 -o ExitOnForwardFailure=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=3 wzbmatebook > /dev/null 2>&1 sleep 1 if nc -zv -G 2 127.0.0.1 4321 >/dev/null 2>&1; then echo "数据库隧道建立成功!" else echo "警告:隧道建立异常,请检查与 100.70.157.41 的连通性。" fi fi echo "" echo "=== 2. 检查并启动 Redis 服务 ===" if redis-cli ping >/dev/null 2>&1; then echo "Redis 已在运行。" else echo "正在启动 Redis..." /opt/homebrew/opt/redis/bin/redis-server --daemonize yes sleep 1 if redis-cli ping >/dev/null 2>&1; then echo "Redis 启动成功!" else echo "警告:Redis 启动可能失败,请检查。" fi fi echo "" echo "=== 3. 检查后端服务 (8090) ===" if curl -s http://localhost:8090/captchaImage >/dev/null 2>&1; then echo "后端服务已在运行 (端口 8090)。" else echo "正在启动后端服务 (ruoyi-admin)..." mkdir -p "$SCRIPT_DIR/uploadPath" nohup java --add-opens java.base/java.lang=ALL-UNNAMED \ --add-opens java.base/java.lang.reflect=ALL-UNNAMED \ --add-opens java.base/java.util=ALL-UNNAMED \ -jar "$SCRIPT_DIR/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar" \ > "$SCRIPT_DIR/RuoYi-Vue/ruoyi-admin/backend.log" 2>&1 & echo "后端已在后台启动,PID: $!,日志写入 RuoYi-Vue/ruoyi-admin/backend.log" echo "等待后端就绪..." for i in {1..30}; do if curl -s http://localhost:8090/captchaImage | grep -q "200"; then echo "后端已就绪!" break fi sleep 1 done fi echo "" echo "=== 4. 检查前端服务 (8080) ===" if curl -s http://localhost:8080 >/dev/null 2>&1; then echo "前端服务已在运行 (http://localhost:8080)。" else echo "正在启动前端服务 (build_ui)..." cd "$SCRIPT_DIR/build_ui" npm run dev fi