Backend: - Add setup-backend.sh/bat for one-click backend setup - Fix test_auth.py mock settings (JWT_EXPIRE_HOURS) - Fix test_excel_export.py TEMPLATE_DIR reference Frontend: - Add config.json for runtime API URL configuration - Add init.js and settings.js for config loading - Update main.js to load config from external file - Update api.js to use dynamic API_BASE_URL - Update all pages to initialize config before API calls - Update package.json with extraResources for config Build: - Add build-client.sh/bat for packaging Electron + Sidecar - Add build-all.ps1 PowerShell script with -ApiUrl parameter - Add GitHub Actions workflow for Windows builds - Add scripts/README.md documentation This allows IT to configure backend URL without rebuilding. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
238 lines
6.3 KiB
Batchfile
238 lines
6.3 KiB
Batchfile
@echo off
|
|
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
|
|
pip install --upgrade pip -q
|
|
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
|
|
pip install --upgrade pip -q
|
|
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
|