Files
QQuiz/scripts/auto_setup_and_run.bat
handsomezhuzhu a01f3540c5 feat: 实现数据库驱动的API配置管理和项目结构重组
## 新功能
- 实现管理后台API配置管理(OpenAI/Anthropic/Qwen)
- API配置保存到数据库,实时生效无需重启
- API密钥遮罩显示(前10位+后4位)
- 完整endpoint URL自动显示

## 后端改进
- 新增 config_service.py 用于加载数据库配置
- LLMService 支持动态配置注入,回退到环境变量
- 更新 exam.py 和 question.py 使用数据库配置
- 扩展 schemas.py 支持所有API配置字段

## 前端改进
- 重写 AdminSettings.jsx 增强UI体验
- API密钥显示/隐藏切换
- 当前使用的提供商可视化标识
- 移除"需要重启"的误导性提示

## 项目结构重组
- 移动所有脚本到 scripts/ 目录
- 移动所有文档到 docs/ 目录
- 清理 Python 缓存文件

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 19:24:12 +08:00

259 lines
7.5 KiB
Batchfile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@echo off
chcp 65001 >nul
title QQuiz - 全自动部署
color 0A
echo.
echo ██████╗ ██████╗ ██╗ ██╗██╗███████╗
echo ██╔═══██╗██╔═══██╗██║ ██║██║╚══███╔╝
echo ██║ ██║██║ ██║██║ ██║██║ ███╔╝
echo ██║▄▄ ██║██║▄▄ ██║██║ ██║██║ ███╔╝
echo ╚██████╔╝╚██████╔╝╚██████╔╝██║███████╗
echo ╚══▀▀═╝ ╚══▀▀═╝ ╚═════╝ ╚═╝╚══════╝
echo.
echo ==========================================
echo 智能刷题与题库管理平台
echo 全自动部署脚本
echo ==========================================
echo.
cd /d "%~dp0.."
REM ============================================
REM 步骤 1: 检查环境
REM ============================================
echo [1/8] 检查运行环境...
echo.
REM 检查 Python
python --version >nul 2>&1
if %errorlevel% neq 0 (
echo [错误] 未检测到 Python
echo 请先安装 Python 3.11+: https://www.python.org/downloads/
pause
exit /b 1
)
echo ✓ Python 已安装
REM 检查 Node.js
node --version >nul 2>&1
if %errorlevel% neq 0 (
echo [错误] 未检测到 Node.js
echo 请先安装 Node.js 18+: https://nodejs.org/
pause
exit /b 1
)
echo ✓ Node.js 已安装
REM 检查 PostgreSQL
psql --version >nul 2>&1
if %errorlevel% neq 0 (
echo [警告] 未检测到 PostgreSQL 命令行工具
echo 可能已安装但未加入 PATH继续尝试...
)
echo ✓ 环境检查完成
echo.
REM ============================================
REM 步骤 2: 配置环境变量
REM ============================================
echo [2/8] 配置环境变量...
echo.
if not exist ".env" (
copy .env.example .env >nul
echo ✓ 已创建 .env 文件
echo.
echo [重要] 请编辑 .env 文件,配置以下项:
echo 1. SECRET_KEY - JWT密钥至少32字符
echo 2. OPENAI_API_KEY - OpenAI API密钥
echo.
echo 按任意键打开 .env 文件编辑...
pause >nul
notepad .env
echo.
echo 编辑完成后,按任意键继续...
pause >nul
) else (
echo ✓ .env 文件已存在
)
echo.
REM ============================================
REM 步骤 3: 创建数据库
REM ============================================
echo [3/8] 配置数据库...
echo.
echo 请输入 PostgreSQL 信息(或直接回车使用默认值):
echo.
set /p PGHOST="数据库主机 [默认: localhost]: "
if "%PGHOST%"=="" set PGHOST=localhost
set /p PGPORT="数据库端口 [默认: 5432]: "
if "%PGPORT%"=="" set PGPORT=5432
set /p PGUSER="管理员用户名 [默认: postgres]: "
if "%PGUSER%"=="" set PGUSER=postgres
echo.
echo 正在创建数据库和用户...
echo.
REM 创建数据库脚本
echo DROP DATABASE IF EXISTS qquiz_db; > temp_create_db.sql
echo DROP USER IF EXISTS qquiz; >> temp_create_db.sql
echo CREATE USER qquiz WITH PASSWORD 'qquiz_password'; >> temp_create_db.sql
echo CREATE DATABASE qquiz_db OWNER qquiz; >> temp_create_db.sql
echo GRANT ALL PRIVILEGES ON DATABASE qquiz_db TO qquiz; >> temp_create_db.sql
REM 执行 SQL
psql -h %PGHOST% -p %PGPORT% -U %PGUSER% -f temp_create_db.sql 2>nul
if %errorlevel% equ 0 (
echo ✓ 数据库创建成功
del temp_create_db.sql
) else (
echo ! 数据库创建可能失败,继续尝试...
del temp_create_db.sql
)
echo.
REM 更新 .env 中的数据库连接
powershell -Command "(Get-Content .env) -replace 'DATABASE_URL=.*', 'DATABASE_URL=postgresql+asyncpg://qquiz:qquiz_password@%PGHOST%:%PGPORT%/qquiz_db' | Set-Content .env"
echo ✓ 已更新数据库连接配置
echo.
REM ============================================
REM 步骤 4: 安装后端依赖
REM ============================================
echo [4/8] 安装后端依赖...
echo.
cd backend
if not exist "venv" (
echo 创建虚拟环境...
python -m venv venv
)
echo 激活虚拟环境并安装依赖...
call venv\Scripts\activate.bat && pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
if %errorlevel% equ 0 (
echo ✓ 后端依赖安装成功
) else (
echo ! 部分依赖可能安装失败,继续尝试...
)
echo.
REM ============================================
REM 步骤 5: 初始化数据库
REM ============================================
echo [5/8] 初始化数据库表...
echo.
call venv\Scripts\activate.bat && alembic upgrade head 2>nul
if %errorlevel% equ 0 (
echo ✓ 数据库表创建成功
) else (
echo ! 数据库迁移失败,将在启动时自动创建
)
echo.
cd ..
REM ============================================
REM 步骤 6: 安装前端依赖
REM ============================================
echo [6/8] 安装前端依赖...
echo.
cd frontend
if not exist "node_modules" (
echo 使用淘宝镜像加速...
call npm config set registry https://registry.npmmirror.com
echo 安装依赖(需要几分钟)...
call npm install --silent
if %errorlevel% equ 0 (
echo ✓ 前端依赖安装成功
) else (
echo ! 前端依赖安装失败
cd ..
pause
exit /b 1
)
) else (
echo ✓ 前端依赖已安装
)
echo.
cd ..
REM ============================================
REM 步骤 7: 启动后端服务
REM ============================================
echo [7/8] 启动后端服务...
echo.
start "QQuiz Backend" cmd /k "cd /d %~dp0..\backend && call venv\Scripts\activate.bat && echo ======================================== && echo QQuiz 后端服务 && echo ======================================== && echo. && echo API 地址: http://localhost:8000 && echo API 文档: http://localhost:8000/docs && echo. && echo 按 Ctrl+C 停止服务 && echo. && uvicorn main:app --reload"
echo ✓ 后端服务已在新窗口中启动
echo 等待服务启动...
timeout /t 8 /nobreak >nul
echo.
REM ============================================
REM 步骤 8: 启动前端服务
REM ============================================
echo [8/8] 启动前端服务...
echo.
start "QQuiz Frontend" cmd /k "cd /d %~dp0..\frontend && echo ======================================== && echo QQuiz 前端服务 && echo ======================================== && echo. && echo 前端地址: http://localhost:3000 && echo. && echo 按 Ctrl+C 停止服务 && echo. && npm start"
echo ✓ 前端服务已在新窗口中启动
echo 等待服务启动...
timeout /t 5 /nobreak >nul
echo.
REM ============================================
REM 完成
REM ============================================
color 0B
echo.
echo ==========================================
echo 🎉 部署完成!
echo ==========================================
echo.
echo 服务地址:
echo 前端: http://localhost:3000
echo 后端: http://localhost:8000
echo 文档: http://localhost:8000/docs
echo.
echo 默认账户:
echo 用户名: admin
echo 密码: admin123
echo.
echo ⚠️ 首次登录后请立即修改密码!
echo.
echo 测试数据:
echo test_data/sample_questions.txt
echo.
echo ==========================================
echo.
REM 询问是否打开浏览器
choice /C YN /M "是否打开浏览器访问系统"
if %errorlevel% equ 1 (
timeout /t 3 /nobreak >nul
start http://localhost:3000
)
echo.
echo 系统正在运行中...
echo 关闭此窗口不会停止服务
echo 要停止服务,请关闭后端和前端窗口
echo.
pause