ai-chat-ui/start.sh
MT-Mint 4a434f9580 fix(auth): 修复启动脚本与前端认证流程
修复 start.sh 未记录后台进程 PID 导致启动后误判失败的问题。\n调整前端认证逻辑,支持开发环境下优先读取 URL token,并使用 POST 请求直连外部认证接口解析新的返回结构。\n补充认证回归测试,覆盖请求方法、请求头和用户信息映射。
2026-06-12 14:09:19 +08:00

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"