Ai_GirlFriend/启动项目.bat
2026-03-02 18:57:11 +08:00

238 lines
7.4 KiB
Batchfile

@echo off
chcp 65001 >nul
title AI 女友项目 - 启动服务
REM ==========================================
REM 配置区域
REM ==========================================
set PHP_PATH=D:\IDMDownload\php-8.0.0-Win32-vs16-x64\php.exe
set PHP_PORT=30100
set PYTHON_PORT=30101
REM ==========================================
REM 检查 PHP
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ AI 女友项目 - 启动服务 ║
echo ╚════════════════════════════════════╝
echo.
echo [检查] 正在检查 PHP...
if not exist "%PHP_PATH%" (
echo [错误] PHP 未找到: %PHP_PATH%
echo.
echo 请修改脚本中的 PHP_PATH 变量
echo.
pause
exit /b 1
)
"%PHP_PATH%" -v >nul 2>&1
if errorlevel 1 (
echo [错误] PHP 无法运行
pause
exit /b 1
)
echo [成功] PHP 已就绪
echo.
REM ==========================================
REM 检查 Python
REM ==========================================
echo [检查] 正在检查 Python...
python --version >nul 2>&1
if errorlevel 1 (
echo [错误] Python 未找到或未添加到 PATH
echo.
pause
exit /b 1
)
echo [成功] Python 已就绪
echo.
REM ==========================================
REM 检查项目目录
REM ==========================================
echo [检查] 正在检查项目目录...
if not exist "%~dp0xunifriend_RaeeC\public" (
echo [错误] PHP 项目目录未找到
pause
exit /b 1
)
if not exist "%~dp0lover" (
echo [错误] Python 项目目录未找到
pause
exit /b 1
)
echo [成功] 项目目录已就绪
echo.
REM ==========================================
REM 获取本机 IP
REM ==========================================
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /C:"IPv4"') do (
set LOCAL_IP=%%a
goto :IP_FOUND
)
:IP_FOUND
set LOCAL_IP=%LOCAL_IP: =%
REM ==========================================
REM 显示启动信息
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ AI 女友项目 - 启动服务 ║
echo ╚════════════════════════════════════╝
echo.
echo 准备启动以下服务:
echo.
echo [PHP 服务器]
echo → 端口: %PHP_PORT%
echo → 本地: http://127.0.0.1:%PHP_PORT%
echo → 局域网: http://%LOCAL_IP%:%PHP_PORT%
echo.
echo [Python 后端]
echo → 端口: %PYTHON_PORT%
echo → 本地: http://127.0.0.1:%PYTHON_PORT%
echo → 局域网: http://%LOCAL_IP%:%PYTHON_PORT%
echo.
echo ────────────────────────────────────
echo.
echo 按任意键开始启动...
pause >nul
REM ==========================================
REM 清理旧的服务进程
REM ==========================================
echo [清理] 正在检查并清理旧的服务进程...
echo.
REM 先杀死所有 PHP 和 Python 相关的服务进程
echo [清理] 终止旧的 PHP 服务器进程...
taskkill /F /FI "WINDOWTITLE eq PHP 服务器*" >nul 2>&1
for /f "tokens=2" %%a in ('tasklist ^| findstr /I "php.exe"') do (
netstat -ano | findstr :30100 | findstr %%a >nul 2>&1
if not errorlevel 1 (
echo [清理] 终止 PHP 进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
)
echo [清理] 终止旧的 Python 后端进程...
taskkill /F /FI "WINDOWTITLE eq Python 后端*" >nul 2>&1
for /f "tokens=2" %%a in ('tasklist ^| findstr /I "python.exe"') do (
netstat -ano | findstr :30101 | findstr %%a >nul 2>&1
if not errorlevel 1 (
echo [清理] 终止 Python 进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
)
REM 查找占用 30100 端口的进程并终止
echo [清理] 检查端口 %PHP_PORT%...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :%PHP_PORT%') do (
echo [清理] 终止占用端口 %PHP_PORT% 的进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
REM 查找占用 30101 端口的进程并终止
echo [清理] 检查端口 %PYTHON_PORT%...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :%PYTHON_PORT%') do (
echo [清理] 终止占用端口 %PYTHON_PORT% 的进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
echo.
echo [成功] 进程和端口清理完成
echo.
REM 等待端口完全释放
echo [等待] 等待端口完全释放...
timeout /t 3 >nul
echo.
REM ==========================================
REM 启动 PHP 服务器
REM ==========================================
cls
echo.
echo [1/2] 启动 PHP 服务器...
echo.
start "PHP 服务器 - 端口 %PHP_PORT%" cmd /k "title PHP 服务器 - 端口 %PHP_PORT% && cd /d "%~dp0xunifriend_RaeeC\public" && echo [PHP 服务器] 正在启动... && echo [PHP 服务器] 端口: %PHP_PORT% && echo [PHP 服务器] 访问: http://127.0.0.1:%PHP_PORT% && echo [PHP 服务器] 测试: http://127.0.0.1:%PHP_PORT%/test_api.php && echo. && "%PHP_PATH%" -S 0.0.0.0:%PHP_PORT% router.php"
echo [成功] PHP 服务器已启动
echo.
REM 等待 3 秒让 PHP 完全启动
echo 等待 PHP 服务器启动...
timeout /t 3 >nul
REM ==========================================
REM 启动 Python 后端
REM ==========================================
echo [2/2] 启动 Python 后端...
echo.
start "Python 后端 - 端口 %PYTHON_PORT%" cmd /k "title Python 后端 - 端口 %PYTHON_PORT% && cd /d "%~dp0" && echo [Python 后端] 正在启动... && echo [Python 后端] 端口: %PYTHON_PORT% && echo [Python 后端] 访问: http://127.0.0.1:%PYTHON_PORT% && echo [Python 后端] API 文档: http://127.0.0.1:%PYTHON_PORT%/docs && echo. && python -m uvicorn lover.main:app --host 0.0.0.0 --port %PYTHON_PORT% --reload"
echo [成功] Python 后端已启动
echo.
REM 等待 3 秒让 Python 完全启动
echo 等待 Python 后端启动...
timeout /t 3 >nul
REM ==========================================
REM 显示完成信息
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ 启动成功! ║
echo ╚════════════════════════════════════╝
echo.
echo [PHP 服务器] ✓ 已启动
echo → http://127.0.0.1:%PHP_PORT%
echo → http://127.0.0.1:%PHP_PORT%/admin
echo → http://%LOCAL_IP%:%PHP_PORT%
echo.
echo [Python 后端] ✓ 已启动
echo → http://127.0.0.1:%PYTHON_PORT%
echo → http://127.0.0.1:%PYTHON_PORT%/docs
echo → http://%LOCAL_IP%:%PYTHON_PORT%
echo.
echo ────────────────────────────────────
echo.
echo 提示:
echo • 两个服务已在独立窗口中启动
echo • 可以在窗口中查看运行日志
echo • 关闭对应窗口可停止服务
echo.
echo 按任意键打开浏览器...
pause >nul
REM ==========================================
REM 打开浏览器
REM ==========================================
start http://127.0.0.1:%PHP_PORT%
timeout /t 1 >nul
start http://127.0.0.1:%PYTHON_PORT%/docs
echo.
echo 浏览器已打开!
echo.
echo 按任意键退出(不影响服务运行)...
pause >nul
exit