#!/bin/bash echo "🚀 大模型微调平台 - 一键启动" echo "==================================" echo "" # 确保在正确的目录中 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo "📂 当前目录: $SCRIPT_DIR" echo "" # 获取本机IP地址 SERVER_IP=$(hostname -I | awk '{print $1}') echo "🌐 本机 IP 地址: $SERVER_IP" echo "" # 检查Python是否安装 if ! command -v python3 &> /dev/null; then echo "❌ 错误: Python3 未安装" echo "请先安装 Python3" exit 1 fi echo "请选择启动方式:" echo "1) 启动所有服务(FastAPI + Web前端)" echo "2) 只启动 FastAPI 服务(端口 8001)" echo "3) 只启动 Web 前端服务(端口 8000)" echo "4) 交互式选择" echo "" read -p "请输入选择 (1-4): " choice case $choice in 1) echo "" echo "✅ 启动所有服务..." echo "" # 检查并启动 FastAPI 服务 echo "🔧 启动 FastAPI 服务..." cd "$SCRIPT_DIR/src" if [ ! -d "node_modules" ] 2>/dev/null && [ ! -f "main.py" ]; then echo "⚠️ 警告: 未找到 FastAPI 源码文件" fi # 启动 FastAPI (后台运行) cd "$SCRIPT_DIR/src" python3 -m uvicorn main:app --host 0.0.0.0 --port 8001 & FASTAPI_PID=$! echo "✅ FastAPI 服务已启动 (PID: $FASTAPI_PID)" echo " API 地址: http://localhost:8001" echo " API 文档: http://localhost:8001/docs" echo "" # 等待 FastAPI 启动 sleep 2 # 启动 Web 前端服务 echo "🌐 启动 Web 前端服务..." cd "$SCRIPT_DIR/web" python3 -m http.server 8000 & WEB_PID=$! echo "✅ Web 前端服务已启动 (PID: $WEB_PID)" echo " 前端地址: http://localhost:8000" echo "" echo "==================================" echo "🎉 所有服务启动完成!" echo "" echo "📱 访问地址:" echo " - 前端页面: http://$SERVER_IP:8000/pages/main.html" echo " - 登录页面: http://$SERVER_IP:8000/pages/login.html" echo " - API 服务: http://$SERVER_IP:8001" echo " - API 文档: http://$SERVER_IP:8001/docs" echo "" echo "⚠️ 按 Ctrl+C 停止所有服务" echo "" # 等待用户中断 trap "echo ''; echo '🛑 正在停止服务...'; kill $FASTAPI_PID $WEB_PID 2>/dev/null; echo '✅ 所有服务已停止'; exit 0" INT # 保持脚本运行 while true; do sleep 1 done ;; 2) echo "" echo "🔧 启动 FastAPI 服务..." cd "$SCRIPT_DIR/src" # 检查源码文件是否存在 if [ ! -f "main.py" ]; then echo "❌ 错误: 未找到 main.py 文件" echo "请确保在正确的目录中" exit 1 fi echo "✅ FastAPI 服务启动中..." echo " API 地址: http://localhost:8001" echo " API 文档: http://localhost:8001/docs" echo "" echo "⚠️ 按 Ctrl+C 停止服务" echo "" python3 -m uvicorn main:app --host 0.0.0.0 --port 8001 --reload ;; 3) echo "" echo "🌐 启动 Web 前端服务..." cd "$SCRIPT_DIR/web" # 检查页面文件是否存在 if [ ! -f "pages/main.html" ]; then echo "❌ 错误: 未找到 pages/main.html 文件" echo "请确保在正确的目录中" exit 1 fi echo "✅ Web 前端服务启动中..." echo " 前端地址: http://localhost:8000" echo "" echo "⚠️ 按 Ctrl+C 停止服务" echo "" python3 -m http.server 8000 ;; 4) echo "" echo "🔧 检查服务状态..." echo "" # 检查 FastAPI if curl -s http://localhost:8001 > /dev/null 2>&1; then echo "✅ FastAPI 服务正在运行 (端口 8001)" else echo "❌ FastAPI 服务未运行 (端口 8001)" fi # 检查 Web 服务 if curl -s http://localhost:8000 > /dev/null 2>&1; then echo "✅ Web 前端服务正在运行 (端口 8000)" else echo "❌ Web 前端服务未运行 (端口 8000)" fi echo "" read -p "是否启动 FastAPI 服务?(y/n): " start_fastapi if [[ $start_fastapi == "y" || $start_fastapi == "Y" ]]; then cd "$SCRIPT_DIR/src" python3 -m uvicorn main:app --host 0.0.0.0 --port 8001 & FASTAPI_PID=$! echo "✅ FastAPI 服务已启动 (PID: $FASTAPI_PID)" fi echo "" read -p "是否启动 Web 前端服务?(y/n): " start_web if [[ $start_web == "y" || $start_web == "Y" ]]; then cd "$SCRIPT_DIR/web" python3 -m http.server 8000 & WEB_PID=$! echo "✅ Web 前端服务已启动 (PID: $WEB_PID)" fi if [[ $start_fastapi == "y" || $start_fastapi == "Y" || $start_web == "y" || $start_web == "Y" ]]; then echo "" echo "==================================" echo "🎉 服务启动完成!" echo "" echo "📱 访问地址:" echo " - 前端页面: http://$SERVER_IP:8000/pages/main.html" echo " - 登录页面: http://$SERVER_IP:8000/pages/login.html" echo " - API 服务: http://$SERVER_IP:8001" echo " - API 文档: http://$SERVER_IP:8001/docs" echo "" echo "⚠️ 按 Ctrl+C 停止服务" echo "" # 等待用户中断 trap "echo ''; echo '🛑 正在停止服务...'; kill $FASTAPI_PID $WEB_PID 2>/dev/null; echo '✅ 所有服务已停止'; exit 0" INT # 保持脚本运行 while true; do sleep 1 done else echo "未启动任何服务" fi ;; *) echo "❌ 无效选择,请运行脚本重新选择" exit 1 ;; esac