修复 start.sh 未记录后台进程 PID 导致启动后误判失败的问题。\n调整前端认证逻辑,支持开发环境下优先读取 URL token,并使用 POST 请求直连外部认证接口解析新的返回结构。\n补充认证回归测试,覆盖请求方法、请求头和用户信息映射。
113 lines
2.9 KiB
Bash
113 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -u
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$SCRIPT_DIR"
|
|
SERVER_DIR="$ROOT_DIR/server"
|
|
BACKEND_PORT="${PORT:-8002}"
|
|
FRONTEND_PORT="${FRONTEND_PORT:-5173}"
|
|
BACKEND_PID=""
|
|
FRONTEND_PID=""
|
|
|
|
echo "=========================================="
|
|
echo " 启动 AI Chat 平台 (前端 + 后端)"
|
|
echo "=========================================="
|
|
|
|
require_file() {
|
|
local path="$1"
|
|
local message="$2"
|
|
if [[ ! -e "$path" ]]; then
|
|
echo "[错误] $message"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
kill_port() {
|
|
local port="$1"
|
|
local pids
|
|
|
|
if ! command -v lsof >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
|
|
pids="$(lsof -ti :"$port" 2>/dev/null || true)"
|
|
if [[ -n "$pids" ]]; then
|
|
echo "[系统] 端口 $port 已被占用,正在停止旧进程..."
|
|
kill $pids 2>/dev/null || true
|
|
sleep 1
|
|
pids="$(lsof -ti :"$port" 2>/dev/null || true)"
|
|
if [[ -n "$pids" ]]; then
|
|
kill -9 $pids 2>/dev/null || true
|
|
fi
|
|
fi
|
|
}
|
|
|
|
cleanup() {
|
|
local exit_code=$?
|
|
|
|
trap - SIGINT SIGTERM EXIT
|
|
|
|
echo
|
|
echo "[系统] 正在关闭所有服务..."
|
|
|
|
if [[ -n "$FRONTEND_PID" ]] && kill -0 "$FRONTEND_PID" 2>/dev/null; then
|
|
kill "$FRONTEND_PID" 2>/dev/null || true
|
|
fi
|
|
if [[ -n "$BACKEND_PID" ]] && kill -0 "$BACKEND_PID" 2>/dev/null; then
|
|
kill "$BACKEND_PID" 2>/dev/null || true
|
|
fi
|
|
|
|
wait "$FRONTEND_PID" 2>/dev/null || true
|
|
wait "$BACKEND_PID" 2>/dev/null || true
|
|
|
|
exit "$exit_code"
|
|
}
|
|
|
|
trap cleanup SIGINT SIGTERM EXIT
|
|
|
|
require_file "$ROOT_DIR/package.json" "未找到前端 package.json"
|
|
require_file "$SERVER_DIR/main.py" "未找到后端入口 server/main.py"
|
|
require_file "$SERVER_DIR/.venv/bin/python" "未找到后端虚拟环境,请先在 server/.venv 安装依赖"
|
|
|
|
if ! command -v npm >/dev/null 2>&1; then
|
|
echo "[错误] 未找到 npm"
|
|
exit 1
|
|
fi
|
|
|
|
kill_port "$BACKEND_PORT"
|
|
kill_port "$FRONTEND_PORT"
|
|
|
|
echo "[系统] 正在启动后端服务器..."
|
|
cd /home/mt/Projects/ai-chat-ui/server
|
|
if [ -d ".venv" ]; then
|
|
source .venv/bin/activate
|
|
# 使用 -u 参数强制不缓冲输出,实时显示日志
|
|
python3 -u main.py &
|
|
BACKEND_PID=$!
|
|
else
|
|
echo "[错误] 未找到虚拟环境 (.venv)。请先创建。"
|
|
fi
|
|
|
|
# 等待一小段时间确保后端启动
|
|
sleep 2
|
|
if ! kill -0 "$BACKEND_PID" 2>/dev/null; then
|
|
echo "[错误] 后端启动失败"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[系统] 正在启动前端服务器..."
|
|
cd /home/mt/Projects/ai-chat-ui
|
|
# 启动 vite 开发服务器
|
|
npm run dev &
|
|
FRONTEND_PID=$!
|
|
|
|
echo "=========================================="
|
|
echo " 服务已启动,按 Ctrl+C 停止"
|
|
echo "------------------------------------------"
|
|
echo " 前端: http://localhost:$FRONTEND_PORT"
|
|
echo " 后端: http://localhost:$BACKEND_PORT"
|
|
echo "=========================================="
|
|
|
|
wait "$BACKEND_PID" "$FRONTEND_PID"
|