@echo off chcp 65001 >nul REM Meeting Assistant Backend - Windows 一鍵設置與啟動腳本 REM 自動安裝依賴、設置環境並啟動後端服務 setlocal enabledelayedexpansion REM 顏色設定 (Windows 10+) set "GREEN=[92m" set "YELLOW=[93m" set "RED=[91m" set "BLUE=[94m" set "CYAN=[96m" set "NC=[0m" REM 專案路徑 set "SCRIPT_DIR=%~dp0" set "PROJECT_DIR=%SCRIPT_DIR%.." set "BACKEND_DIR=%PROJECT_DIR%\backend" set "SIDECAR_DIR=%PROJECT_DIR%\sidecar" REM 預設配置 set "DEFAULT_PORT=8000" set "DEFAULT_HOST=0.0.0.0" REM 解析參數 set "COMMAND=start" set "PORT=%DEFAULT_PORT%" set "HOST=%DEFAULT_HOST%" set "NO_SIDECAR=false" :parse_args if "%~1"=="" goto :main if /i "%~1"=="setup" (set "COMMAND=setup" & shift & goto :parse_args) if /i "%~1"=="start" (set "COMMAND=start" & shift & goto :parse_args) if /i "%~1"=="stop" (set "COMMAND=stop" & shift & goto :parse_args) if /i "%~1"=="help" (set "COMMAND=help" & shift & goto :parse_args) if /i "%~1"=="--port" (set "PORT=%~2" & shift & shift & goto :parse_args) if /i "%~1"=="--host" (set "HOST=%~2" & shift & shift & goto :parse_args) if /i "%~1"=="--no-sidecar" (set "NO_SIDECAR=true" & shift & goto :parse_args) echo %RED%[ERROR]%NC% 未知參數: %~1 goto :show_help :main if "%COMMAND%"=="help" goto :show_help if "%COMMAND%"=="setup" goto :do_setup if "%COMMAND%"=="start" goto :do_start if "%COMMAND%"=="stop" goto :do_stop goto :show_help :show_banner echo. echo %CYAN%========================================== echo Meeting Assistant Backend Setup echo Windows 一鍵設置與啟動腳本 echo ==========================================%NC% echo. goto :eof :check_python echo %BLUE%[STEP]%NC% 檢查 Python 環境... REM 嘗試找到 Python where python >nul 2>&1 if %errorlevel% equ 0 ( for /f "tokens=*" %%i in ('python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"') do set "PY_VERSION=%%i" for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.major)"') do set "PY_MAJOR=%%i" for /f "tokens=*" %%i in ('python -c "import sys; print(sys.version_info.minor)"') do set "PY_MINOR=%%i" if !PY_MAJOR! geq 3 if !PY_MINOR! geq 10 ( set "PYTHON_CMD=python" echo %GREEN%[OK]%NC% Python !PY_VERSION! goto :eof ) ) echo %RED%[ERROR]%NC% 需要 Python 3.10 或更高版本 echo %BLUE%[INFO]%NC% 請安裝 Python: https://www.python.org/downloads/ exit /b 1 :setup_backend_venv echo %BLUE%[STEP]%NC% 設置後端虛擬環境... cd /d "%BACKEND_DIR%" if not exist "venv" ( echo %BLUE%[INFO]%NC% 創建虛擬環境... %PYTHON_CMD% -m venv venv echo %GREEN%[OK]%NC% 虛擬環境已創建 ) else ( echo %BLUE%[INFO]%NC% 虛擬環境已存在 ) echo %BLUE%[INFO]%NC% 安裝後端依賴... call venv\Scripts\activate.bat python -m pip install --upgrade pip -q python -m pip install -r requirements.txt -q echo %GREEN%[OK]%NC% 後端依賴安裝完成 goto :eof :setup_sidecar_venv echo %BLUE%[STEP]%NC% 設置 Sidecar 虛擬環境... cd /d "%SIDECAR_DIR%" if not exist "venv" ( echo %BLUE%[INFO]%NC% 創建 Sidecar 虛擬環境... %PYTHON_CMD% -m venv venv echo %GREEN%[OK]%NC% Sidecar 虛擬環境已創建 ) else ( echo %BLUE%[INFO]%NC% Sidecar 虛擬環境已存在 ) echo %BLUE%[INFO]%NC% 安裝 Sidecar 依賴 (這可能需要幾分鐘)... call venv\Scripts\activate.bat python -m pip install --upgrade pip -q python -m pip install -r requirements.txt -q echo %GREEN%[OK]%NC% Sidecar 依賴安裝完成 goto :eof :setup_env_file echo %BLUE%[STEP]%NC% 檢查環境變數配置... cd /d "%BACKEND_DIR%" if not exist ".env" ( if exist ".env.example" ( copy .env.example .env >nul echo %YELLOW%[WARN]%NC% 已從 .env.example 創建 .env 檔案 echo %YELLOW%[WARN]%NC% 請編輯 %BACKEND_DIR%\.env 設置資料庫和 API 密鑰 ) else ( echo %RED%[ERROR]%NC% 找不到 .env.example 檔案 exit /b 1 ) ) else ( echo %GREEN%[OK]%NC% 環境變數檔案已存在 ) goto :eof :start_backend echo %BLUE%[STEP]%NC% 啟動後端服務... cd /d "%BACKEND_DIR%" REM 載入環境變數 if exist ".env" ( for /f "usebackq tokens=1,* delims==" %%a in (".env") do ( set "%%a=%%b" ) ) REM 使用 .env 中的配置或預設值 if defined BACKEND_HOST set "HOST=%BACKEND_HOST%" if defined BACKEND_PORT set "PORT=%BACKEND_PORT%" REM 啟動虛擬環境 call venv\Scripts\activate.bat echo. echo %GREEN%[OK]%NC% 後端服務準備就緒! echo. echo %CYAN%========================================== echo 服務資訊 echo ==========================================%NC% echo. echo API 地址: http://localhost:%PORT% echo API 文件: http://localhost:%PORT%/docs echo 健康檢查: http://localhost:%PORT%/api/health echo. echo 按 Ctrl+C 停止服務 echo. uvicorn app.main:app --host %HOST% --port %PORT% --reload goto :eof :do_setup call :show_banner call :check_python if errorlevel 1 exit /b 1 call :setup_backend_venv if "%NO_SIDECAR%"=="false" call :setup_sidecar_venv call :setup_env_file echo. echo %GREEN%[OK]%NC% 環境設置完成! echo. echo %BLUE%[INFO]%NC% 啟動服務: %~nx0 start goto :eof :do_start call :show_banner call :check_python if errorlevel 1 exit /b 1 call :setup_backend_venv call :setup_env_file call :start_backend goto :eof :do_stop echo %BLUE%[STEP]%NC% 停止後端服務... REM 查找並終止 uvicorn 程序 for /f "tokens=2" %%i in ('tasklist /fi "imagename eq python.exe" /fo list ^| findstr "PID:"') do ( wmic process where "processid=%%i" get commandline 2>nul | findstr /i "uvicorn" >nul if not errorlevel 1 ( taskkill /pid %%i /f >nul 2>&1 echo %GREEN%[OK]%NC% 已停止 PID: %%i ) ) echo %GREEN%[OK]%NC% 後端服務已停止 goto :eof :show_help echo. echo Meeting Assistant Backend - Windows 一鍵設置與啟動腳本 echo. echo 用法: %~nx0 [命令] [選項] echo. echo 命令: echo setup 僅設置環境 (安裝依賴) echo start 設置並啟動後端服務 (預設) echo stop 停止後端服務 echo help 顯示此幫助訊息 echo. echo 選項: echo --port PORT 服務端口 (預設: %DEFAULT_PORT%) echo --host HOST 綁定地址 (預設: %DEFAULT_HOST%) echo --no-sidecar 不安裝 Sidecar 依賴 echo. echo 範例: echo %~nx0 start 設置並啟動服務 echo %~nx0 start --port 8080 使用自訂端口 echo %~nx0 setup 僅安裝依賴 echo. goto :eof :end endlocal