mirror of
https://github.com/handsomezhuzhu/QQuiz.git
synced 2026-02-20 12:00:14 +00:00
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>
This commit is contained in:
5
scripts/activate_venv.bat
Normal file
5
scripts/activate_venv.bat
Normal file
@@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
REM 激活虚拟环境的批处理脚本
|
||||
cd /d "%~dp0..\backend"
|
||||
call venv\Scripts\activate.bat
|
||||
cmd /k
|
||||
258
scripts/auto_setup_and_run.bat
Normal file
258
scripts/auto_setup_and_run.bat
Normal file
@@ -0,0 +1,258 @@
|
||||
@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
|
||||
93
scripts/check_postgres.bat
Normal file
93
scripts/check_postgres.bat
Normal file
@@ -0,0 +1,93 @@
|
||||
@echo off
|
||||
title PostgreSQL Status Check
|
||||
color 0B
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo PostgreSQL Database Status Check
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM Check PostgreSQL installation
|
||||
echo [1] Checking PostgreSQL Installation...
|
||||
if exist "C:\Program Files\PostgreSQL\18" (
|
||||
echo OK - PostgreSQL 18 is installed
|
||||
echo Location: C:\Program Files\PostgreSQL\18
|
||||
) else (
|
||||
echo ERROR - PostgreSQL 18 not found!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo.
|
||||
|
||||
REM Check PostgreSQL service
|
||||
echo [2] Checking PostgreSQL Service...
|
||||
sc query postgresql-x64-18 >nul 2>&1
|
||||
if %errorlevel% equ 0 (
|
||||
echo OK - PostgreSQL service exists
|
||||
echo.
|
||||
echo Service details:
|
||||
sc query postgresql-x64-18
|
||||
echo.
|
||||
) else (
|
||||
echo WARNING - PostgreSQL service not found!
|
||||
echo Trying alternative names...
|
||||
sc query | findstr /i "postgres"
|
||||
)
|
||||
echo.
|
||||
|
||||
REM Check if port 5432 is listening
|
||||
echo [3] Checking Port 5432...
|
||||
netstat -ano | findstr ":5432" | findstr "LISTENING" >nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo OK - PostgreSQL is listening on port 5432
|
||||
netstat -ano | findstr ":5432" | findstr "LISTENING"
|
||||
) else (
|
||||
echo ERROR - Port 5432 is NOT listening!
|
||||
echo PostgreSQL service is probably not running.
|
||||
echo.
|
||||
echo To start the service, you can:
|
||||
echo 1. Open Services (services.msc)
|
||||
echo 2. Find "postgresql-x64-18" service
|
||||
echo 3. Right-click and select "Start"
|
||||
echo.
|
||||
echo OR run: net start postgresql-x64-18
|
||||
)
|
||||
echo.
|
||||
|
||||
REM Try to connect to database
|
||||
echo [4] Testing Database Connection...
|
||||
set PGPASSWORD=postgres
|
||||
"C:\Program Files\PostgreSQL\18\pgAdmin 4\runtime\psql.exe" -h localhost -U postgres -c "SELECT version();" postgres >nul 2>&1
|
||||
if %errorlevel% equ 0 (
|
||||
echo OK - Successfully connected to PostgreSQL!
|
||||
echo.
|
||||
"C:\Program Files\PostgreSQL\18\pgAdmin 4\runtime\psql.exe" -h localhost -U postgres -c "SELECT version();" postgres
|
||||
echo.
|
||||
|
||||
REM Check if qquiz database exists
|
||||
echo [5] Checking QQuiz Database...
|
||||
"C:\Program Files\PostgreSQL\18\pgAdmin 4\runtime\psql.exe" -h localhost -U postgres -c "\l" postgres | findstr "qquiz_db" >nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo OK - qquiz_db database exists
|
||||
) else (
|
||||
echo INFO - qquiz_db database does not exist yet
|
||||
echo This is normal for first-time setup
|
||||
)
|
||||
) else (
|
||||
echo ERROR - Cannot connect to PostgreSQL!
|
||||
echo.
|
||||
echo Possible reasons:
|
||||
echo 1. PostgreSQL service is not running
|
||||
echo 2. Default password 'postgres' is incorrect
|
||||
echo 3. PostgreSQL is not configured to accept local connections
|
||||
echo.
|
||||
echo Please start the PostgreSQL service first!
|
||||
)
|
||||
echo.
|
||||
|
||||
echo ========================================
|
||||
echo Check Complete
|
||||
echo ========================================
|
||||
echo.
|
||||
pause
|
||||
89
scripts/check_status.bat
Normal file
89
scripts/check_status.bat
Normal file
@@ -0,0 +1,89 @@
|
||||
@echo off
|
||||
title QQuiz - System Status Check
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo QQuiz System Status Check
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo [1] Checking Python...
|
||||
python --version
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Python not found!
|
||||
) else (
|
||||
echo OK
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [2] Checking Node.js...
|
||||
node --version
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Node.js not found!
|
||||
) else (
|
||||
echo OK
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [3] Checking PostgreSQL...
|
||||
psql --version
|
||||
if %errorlevel% neq 0 (
|
||||
echo WARNING: PostgreSQL command not found in PATH
|
||||
) else (
|
||||
echo OK
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [4] Checking if backend is running...
|
||||
curl -s http://localhost:8000/health >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Backend is NOT running on port 8000
|
||||
echo.
|
||||
echo Backend must be started first!
|
||||
echo Run the backend window manually:
|
||||
echo cd backend
|
||||
echo venv\Scripts\activate.bat
|
||||
echo uvicorn main:app --reload
|
||||
) else (
|
||||
echo OK - Backend is running
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [5] Checking if frontend is running...
|
||||
curl -s http://localhost:3000 >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo WARNING: Frontend is NOT running on port 3000
|
||||
) else (
|
||||
echo OK - Frontend is running
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [6] Checking ports...
|
||||
echo Checking port 8000 (Backend):
|
||||
netstat -ano | findstr :8000
|
||||
echo.
|
||||
echo Checking port 3000 (Frontend):
|
||||
netstat -ano | findstr :3000
|
||||
echo.
|
||||
|
||||
echo [7] Checking .env configuration...
|
||||
if exist ".env" (
|
||||
echo OK - .env file exists
|
||||
findstr /C:"OPENAI_API_KEY=sk-" .env >nul
|
||||
if %errorlevel% neq 0 (
|
||||
echo WARNING: OPENAI_API_KEY may not be configured properly
|
||||
) else (
|
||||
echo OK - API Key appears to be configured
|
||||
)
|
||||
) else (
|
||||
echo ERROR: .env file not found!
|
||||
)
|
||||
echo.
|
||||
|
||||
echo ========================================
|
||||
echo Diagnosis Complete
|
||||
echo ========================================
|
||||
echo.
|
||||
pause
|
||||
140
scripts/fix_and_start.bat
Normal file
140
scripts/fix_and_start.bat
Normal file
@@ -0,0 +1,140 @@
|
||||
@echo off
|
||||
title QQuiz - Fix and Start
|
||||
color 0E
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo QQuiz - Automatic Fix and Start
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
REM Check if .env exists
|
||||
if not exist ".env" (
|
||||
echo Creating .env file...
|
||||
copy .env.example .env >nul
|
||||
echo.
|
||||
echo IMPORTANT: Edit .env and set your OPENAI_API_KEY
|
||||
echo Opening .env file...
|
||||
timeout /t 2 /nobreak >nul
|
||||
notepad .env
|
||||
echo.
|
||||
echo Save and close .env, then press any key to continue...
|
||||
pause >nul
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Choose database option:
|
||||
echo.
|
||||
echo [1] Use Docker (Recommended - Easy)
|
||||
echo [2] Use Local PostgreSQL (Advanced)
|
||||
echo.
|
||||
choice /C 12 /M "Select option"
|
||||
|
||||
if %errorlevel% equ 1 (
|
||||
echo.
|
||||
echo Using Docker PostgreSQL...
|
||||
echo.
|
||||
|
||||
REM Check Docker
|
||||
docker --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Docker not found!
|
||||
echo.
|
||||
echo Please install Docker Desktop:
|
||||
echo https://www.docker.com/products/docker-desktop/
|
||||
echo.
|
||||
echo After installing Docker, run this script again.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Starting MySQL in Docker...
|
||||
docker-compose up -d mysql
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo.
|
||||
echo Docker failed to start. Trying to fix...
|
||||
docker-compose down
|
||||
docker-compose up -d mysql
|
||||
)
|
||||
|
||||
echo Waiting for database...
|
||||
timeout /t 10 /nobreak >nul
|
||||
|
||||
) else (
|
||||
echo.
|
||||
echo Using Local MySQL...
|
||||
echo.
|
||||
echo Make sure MySQL is running on port 3306
|
||||
echo.
|
||||
echo If you see connection errors, you need to:
|
||||
echo 1. Start MySQL service
|
||||
echo 2. Or install MySQL from https://dev.mysql.com/downloads/installer/
|
||||
echo 3. Or choose option 1 to use Docker instead
|
||||
echo.
|
||||
pause
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Starting Backend...
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd backend
|
||||
|
||||
if not exist "venv\Scripts\activate.bat" (
|
||||
echo Creating virtual environment...
|
||||
python -m venv venv
|
||||
)
|
||||
|
||||
echo Installing dependencies...
|
||||
call venv\Scripts\activate.bat
|
||||
pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
echo.
|
||||
echo Running database migrations...
|
||||
alembic upgrade head
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo.
|
||||
echo WARNING: Database migration failed
|
||||
echo The app will try to create tables automatically
|
||||
echo.
|
||||
)
|
||||
|
||||
cd ..
|
||||
|
||||
echo.
|
||||
echo Starting services...
|
||||
echo.
|
||||
|
||||
start "QQuiz Backend" cmd /k "cd /d %~dp0..backend && call venv\Scripts\activate.bat && echo Backend: http://localhost:8000 && echo Docs: http://localhost:8000/docs && echo. && uvicorn main:app --reload"
|
||||
|
||||
timeout /t 8 /nobreak >nul
|
||||
|
||||
start "QQuiz Frontend" cmd /k "cd /d %~dp0..frontend && echo Frontend: http://localhost:3000 && echo. && npm start"
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo SUCCESS! QQuiz is starting...
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Frontend: http://localhost:3000
|
||||
echo Backend: http://localhost:8000
|
||||
echo.
|
||||
echo Login: admin / admin123
|
||||
echo.
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
timeout /t 5 /nobreak >nul
|
||||
start http://localhost:3000
|
||||
|
||||
echo.
|
||||
echo System is running...
|
||||
echo Close backend/frontend windows to stop
|
||||
echo.
|
||||
pause
|
||||
15
scripts/logs_windows.bat
Normal file
15
scripts/logs_windows.bat
Normal file
@@ -0,0 +1,15 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 查看日志
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz 服务日志
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 按 Ctrl+C 退出日志查看
|
||||
echo.
|
||||
|
||||
docker-compose logs -f
|
||||
83
scripts/push_to_github.bat
Normal file
83
scripts/push_to_github.bat
Normal file
@@ -0,0 +1,83 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 推送到 GitHub
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 推送 QQuiz 到 GitHub
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
REM 检查是否有远程仓库
|
||||
git remote -v | findstr "origin" >nul
|
||||
if %errorlevel% neq 0 (
|
||||
echo [提示] 首次推送,正在配置远程仓库...
|
||||
git remote add origin https://github.com/handsomezhuzhu/QQuiz.git
|
||||
echo [完成] 远程仓库已配置
|
||||
echo.
|
||||
)
|
||||
|
||||
echo [1/4] 检查更改...
|
||||
git status
|
||||
|
||||
echo.
|
||||
echo [2/4] 添加所有更改...
|
||||
git add .
|
||||
|
||||
echo.
|
||||
set /p commit_msg="请输入提交信息 (或直接回车使用默认): "
|
||||
|
||||
if "%commit_msg%"=="" (
|
||||
set commit_msg=Update: minor changes
|
||||
)
|
||||
|
||||
echo.
|
||||
echo [3/4] 提交更改...
|
||||
git commit -m "%commit_msg%"
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo [提示] 没有需要提交的更改
|
||||
)
|
||||
|
||||
echo.
|
||||
echo [4/4] 推送到 GitHub...
|
||||
echo.
|
||||
echo [重要] 如果是首次推送,需要输入 GitHub 认证:
|
||||
echo Username: handsomezhuzhu
|
||||
echo Password: 使用 Personal Access Token (不是密码!)
|
||||
echo.
|
||||
echo 如何获取 Token: 参考 docs/GITHUB_PUSH_GUIDE.md
|
||||
echo.
|
||||
pause
|
||||
|
||||
git push -u origin main
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo ✅ 推送成功!
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 访问仓库: https://github.com/handsomezhuzhu/QQuiz
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo ❌ 推送失败!
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 可能的原因:
|
||||
echo 1. 未配置 GitHub 认证
|
||||
echo 2. Token 过期或无效
|
||||
echo 3. 网络连接问题
|
||||
echo.
|
||||
echo 解决方案:
|
||||
echo 1. 阅读 docs/GITHUB_PUSH_GUIDE.md 配置认证
|
||||
echo 2. 确认 Personal Access Token 有效
|
||||
echo 3. 检查网络连接
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
||||
56
scripts/quick_config.bat
Normal file
56
scripts/quick_config.bat
Normal file
@@ -0,0 +1,56 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 快速配置
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz 快速配置
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
REM 创建 .env 文件
|
||||
echo 正在创建配置文件...
|
||||
echo.
|
||||
|
||||
(
|
||||
echo # QQuiz 配置文件 - 快速启动版
|
||||
echo.
|
||||
echo # 数据库配置
|
||||
echo DATABASE_URL=postgresql+asyncpg://qquiz:qquiz_password@localhost:5432/qquiz_db
|
||||
echo.
|
||||
echo # JWT 密钥(安全随机生成)
|
||||
echo SECRET_KEY=qquiz-secret-key-for-development-change-in-production-32chars
|
||||
echo.
|
||||
echo # AI 配置 - OpenAI
|
||||
echo AI_PROVIDER=openai
|
||||
echo OPENAI_API_KEY=sk-your-openai-api-key-here
|
||||
echo OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
echo OPENAI_MODEL=gpt-4o-mini
|
||||
echo.
|
||||
echo # 系统配置
|
||||
echo ALLOW_REGISTRATION=true
|
||||
echo MAX_UPLOAD_SIZE_MB=10
|
||||
echo MAX_DAILY_UPLOADS=20
|
||||
echo.
|
||||
echo # CORS
|
||||
echo CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
|
||||
echo.
|
||||
echo # 上传目录
|
||||
echo UPLOAD_DIR=./uploads
|
||||
) > .env
|
||||
|
||||
echo ✓ 配置文件已创建
|
||||
echo.
|
||||
echo [重要] 请编辑 OPENAI_API_KEY
|
||||
echo.
|
||||
echo 按任意键打开配置文件...
|
||||
pause >nul
|
||||
|
||||
notepad .env
|
||||
|
||||
echo.
|
||||
echo 配置完成!现在可以运行 scripts\auto_setup_and_run.bat 启动系统
|
||||
echo.
|
||||
pause
|
||||
31
scripts/restart_backend.bat
Normal file
31
scripts/restart_backend.bat
Normal file
@@ -0,0 +1,31 @@
|
||||
@echo off
|
||||
title QQuiz - Restart Backend
|
||||
color 0B
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Restarting Backend Container
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo Restarting backend...
|
||||
docker-compose restart backend
|
||||
|
||||
echo.
|
||||
echo Waiting for backend to start...
|
||||
timeout /t 5 /nobreak >nul
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Backend Restarted!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Backend URL: http://localhost:8000
|
||||
echo API Docs: http://localhost:8000/docs
|
||||
echo.
|
||||
echo View logs: scripts\view_backend_logs.bat
|
||||
echo.
|
||||
|
||||
pause
|
||||
47
scripts/restart_docker.bat
Normal file
47
scripts/restart_docker.bat
Normal file
@@ -0,0 +1,47 @@
|
||||
@echo off
|
||||
title QQuiz - Restart Docker Services
|
||||
color 0B
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Restarting QQuiz Docker Services
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo [1/4] Stopping existing containers...
|
||||
docker-compose down
|
||||
echo OK
|
||||
echo.
|
||||
|
||||
echo [2/4] Rebuilding backend image...
|
||||
docker-compose build backend --no-cache
|
||||
echo OK
|
||||
echo.
|
||||
|
||||
echo [3/4] Starting all services...
|
||||
docker-compose up -d
|
||||
echo OK
|
||||
echo.
|
||||
|
||||
echo [4/4] Waiting for services to be ready...
|
||||
timeout /t 15 /nobreak >nul
|
||||
echo.
|
||||
|
||||
echo ========================================
|
||||
echo Services Restarted!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Checking service status...
|
||||
docker-compose ps
|
||||
echo.
|
||||
|
||||
echo Frontend: http://localhost:3000
|
||||
echo Backend: http://localhost:8000
|
||||
echo Database: MySQL on port 3306
|
||||
echo.
|
||||
echo Login: admin / admin123
|
||||
echo.
|
||||
|
||||
pause
|
||||
60
scripts/run_backend_local.bat
Normal file
60
scripts/run_backend_local.bat
Normal file
@@ -0,0 +1,60 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz Backend - 本地运行
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz Backend - 本地启动
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0..\backend"
|
||||
|
||||
REM 检查虚拟环境是否存在
|
||||
if not exist "venv\Scripts\activate.bat" (
|
||||
echo [1/5] 创建虚拟环境...
|
||||
python -m venv venv
|
||||
echo [完成]
|
||||
echo.
|
||||
) else (
|
||||
echo [1/5] 虚拟环境已存在
|
||||
echo.
|
||||
)
|
||||
|
||||
echo [2/5] 激活虚拟环境...
|
||||
call venv\Scripts\activate.bat
|
||||
echo [完成]
|
||||
echo.
|
||||
|
||||
echo [3/5] 安装依赖...
|
||||
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] 依赖安装失败
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo [完成]
|
||||
echo.
|
||||
|
||||
echo [4/5] 运行数据库迁移...
|
||||
alembic upgrade head
|
||||
if %errorlevel% neq 0 (
|
||||
echo [警告] 数据库迁移失败,请检查 PostgreSQL 是否运行
|
||||
echo.
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [5/5] 启动后端服务...
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 后端服务启动中...
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo API 地址: http://localhost:8000
|
||||
echo API 文档: http://localhost:8000/docs
|
||||
echo.
|
||||
echo 按 Ctrl+C 停止服务
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
uvicorn main:app --reload
|
||||
44
scripts/run_frontend_local.bat
Normal file
44
scripts/run_frontend_local.bat
Normal file
@@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz Frontend - 本地运行
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz Frontend - 本地启动
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0..\frontend"
|
||||
|
||||
REM 检查 node_modules 是否存在
|
||||
if not exist "node_modules" (
|
||||
echo [1/2] 安装前端依赖(首次运行需要几分钟)...
|
||||
echo.
|
||||
echo [提示] 使用淘宝镜像加速下载...
|
||||
call npm config set registry https://registry.npmmirror.com
|
||||
call npm install
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] 依赖安装失败
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo [完成]
|
||||
echo.
|
||||
) else (
|
||||
echo [1/2] 依赖已安装
|
||||
echo.
|
||||
)
|
||||
|
||||
echo [2/2] 启动前端服务...
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 前端服务启动中...
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 前端地址: http://localhost:3000
|
||||
echo.
|
||||
echo 按 Ctrl+C 停止服务
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
call npm start
|
||||
88
scripts/run_local.sh
Normal file
88
scripts/run_local.sh
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
echo "===== QQuiz Local Deployment Script ====="
|
||||
|
||||
# Check if .env exists
|
||||
if [ ! -f .env ]; then
|
||||
echo "Error: .env file not found!"
|
||||
echo "Please copy .env.example to .env and configure it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Load environment variables
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
|
||||
# Check Python version
|
||||
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
|
||||
echo "Python version: $PYTHON_VERSION"
|
||||
|
||||
# Check if PostgreSQL is running
|
||||
echo "Checking PostgreSQL connection..."
|
||||
if ! pg_isready -h localhost -p 5432 &> /dev/null; then
|
||||
echo "Warning: PostgreSQL is not running on localhost:5432"
|
||||
echo "Please start PostgreSQL or use Docker: docker-compose up -d postgres"
|
||||
read -p "Continue anyway? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Install backend dependencies
|
||||
echo "Installing backend dependencies..."
|
||||
cd backend
|
||||
if [ ! -d "venv" ]; then
|
||||
echo "Creating virtual environment..."
|
||||
python3 -m venv venv
|
||||
fi
|
||||
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Run database migrations
|
||||
echo "Running database migrations..."
|
||||
alembic upgrade head || echo "Warning: Alembic migration failed. Database might not be initialized."
|
||||
|
||||
# Create uploads directory
|
||||
mkdir -p uploads
|
||||
|
||||
# Start backend
|
||||
echo "Starting backend on http://localhost:8000..."
|
||||
uvicorn main:app --host 0.0.0.0 --port 8000 --reload &
|
||||
BACKEND_PID=$!
|
||||
|
||||
cd ../frontend
|
||||
|
||||
# Install frontend dependencies
|
||||
echo "Installing frontend dependencies..."
|
||||
if [ ! -d "node_modules" ]; then
|
||||
npm install
|
||||
fi
|
||||
|
||||
# Start frontend
|
||||
echo "Starting frontend on http://localhost:3000..."
|
||||
npm start &
|
||||
FRONTEND_PID=$!
|
||||
|
||||
echo ""
|
||||
echo "===== QQuiz is running! ====="
|
||||
echo "Backend: http://localhost:8000"
|
||||
echo "Frontend: http://localhost:3000"
|
||||
echo "API Docs: http://localhost:8000/docs"
|
||||
echo ""
|
||||
echo "Press Ctrl+C to stop all services"
|
||||
|
||||
# Handle cleanup on exit
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "Stopping services..."
|
||||
kill $BACKEND_PID $FRONTEND_PID 2>/dev/null
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
# Wait for processes
|
||||
wait
|
||||
34
scripts/setup.bat
Normal file
34
scripts/setup.bat
Normal file
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo Creating .env configuration file...
|
||||
echo.
|
||||
|
||||
(
|
||||
echo DATABASE_URL=mysql+aiomysql://qquiz:qquiz_password@localhost:3306/qquiz_db
|
||||
echo SECRET_KEY=qquiz-secret-key-for-development-change-in-production-32chars
|
||||
echo AI_PROVIDER=openai
|
||||
echo OPENAI_API_KEY=sk-your-openai-api-key-here
|
||||
echo OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
echo OPENAI_MODEL=gpt-4o-mini
|
||||
echo ALLOW_REGISTRATION=true
|
||||
echo MAX_UPLOAD_SIZE_MB=10
|
||||
echo MAX_DAILY_UPLOADS=20
|
||||
echo CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
|
||||
echo UPLOAD_DIR=./uploads
|
||||
) > .env
|
||||
|
||||
echo Done! .env file created.
|
||||
echo.
|
||||
echo IMPORTANT: Please edit OPENAI_API_KEY in .env file
|
||||
echo.
|
||||
echo Opening .env file now...
|
||||
timeout /t 2 /nobreak >nul
|
||||
|
||||
notepad .env
|
||||
|
||||
echo.
|
||||
echo Configuration complete!
|
||||
echo Now you can run: start_app.bat
|
||||
echo.
|
||||
pause
|
||||
56
scripts/setup_docker_mirror.bat
Normal file
56
scripts/setup_docker_mirror.bat
Normal file
@@ -0,0 +1,56 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 配置 Docker 镜像加速器
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 配置 Docker 镜像加速器
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
echo [提示] 此脚本将帮助您配置 Docker Desktop 使用国内镜像源
|
||||
echo.
|
||||
echo 请按照以下步骤操作:
|
||||
echo.
|
||||
echo 1. 打开 Docker Desktop
|
||||
echo 2. 点击右上角的齿轮图标 ⚙️ (设置)
|
||||
echo 3. 选择左侧菜单的 "Docker Engine"
|
||||
echo 4. 在 JSON 配置中找到或添加 "registry-mirrors" 部分
|
||||
echo.
|
||||
echo 将以下内容复制到配置中:
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo "registry-mirrors": [
|
||||
echo "https://docker.mirrors.ustc.edu.cn",
|
||||
echo "https://hub-mirror.c.163.com",
|
||||
echo "https://mirror.baidubce.com"
|
||||
echo ]
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 完整配置示例:
|
||||
echo.
|
||||
echo {
|
||||
echo "builder": {
|
||||
echo "gc": {
|
||||
echo "defaultKeepStorage": "20GB",
|
||||
echo "enabled": true
|
||||
echo }
|
||||
echo },
|
||||
echo "experimental": false,
|
||||
echo "registry-mirrors": [
|
||||
echo "https://docker.mirrors.ustc.edu.cn",
|
||||
echo "https://hub-mirror.c.163.com",
|
||||
echo "https://mirror.baidubce.com"
|
||||
echo ]
|
||||
echo }
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 5. 点击 "Apply & Restart" 应用并重启 Docker
|
||||
echo 6. 等待 Docker Desktop 重启完成
|
||||
echo 7. 重新运行 start_windows.bat
|
||||
echo.
|
||||
|
||||
pause
|
||||
117
scripts/start_app.bat
Normal file
117
scripts/start_app.bat
Normal file
@@ -0,0 +1,117 @@
|
||||
@echo off
|
||||
title QQuiz - Starting Application
|
||||
color 0A
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo QQuiz - Auto Deploy Script
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
REM Check if .env exists
|
||||
if not exist ".env" (
|
||||
echo ERROR: .env file not found!
|
||||
echo Please run setup.bat first
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [1/7] Checking Python...
|
||||
python --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Python not found!
|
||||
echo Please install Python 3.11+ from https://www.python.org/
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo OK - Python installed
|
||||
echo.
|
||||
|
||||
echo [2/7] Checking Node.js...
|
||||
node --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Node.js not found!
|
||||
echo Please install Node.js 18+ from https://nodejs.org/
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo OK - Node.js installed
|
||||
echo.
|
||||
|
||||
echo [3/7] Creating MySQL database...
|
||||
echo.
|
||||
echo Please enter MySQL root password when prompted
|
||||
echo (Leave blank if no password set)
|
||||
echo.
|
||||
|
||||
mysql -u root -p -e "DROP DATABASE IF EXISTS qquiz_db; DROP USER IF EXISTS 'qquiz'@'localhost'; CREATE DATABASE qquiz_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'qquiz'@'localhost' IDENTIFIED BY 'qquiz_password'; GRANT ALL PRIVILEGES ON qquiz_db.* TO 'qquiz'@'localhost'; FLUSH PRIVILEGES;" 2>nul
|
||||
|
||||
echo Database setup complete
|
||||
echo.
|
||||
|
||||
echo [4/7] Installing backend dependencies...
|
||||
cd backend
|
||||
|
||||
if not exist "venv" (
|
||||
python -m venv venv
|
||||
)
|
||||
|
||||
call venv\Scripts\activate.bat
|
||||
pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
echo Backend dependencies installed
|
||||
echo.
|
||||
|
||||
echo [5/7] Running database migrations...
|
||||
alembic upgrade head 2>nul
|
||||
|
||||
cd ..
|
||||
echo.
|
||||
|
||||
echo [6/7] Installing frontend dependencies...
|
||||
cd frontend
|
||||
|
||||
if not exist "node_modules" (
|
||||
call npm config set registry https://registry.npmmirror.com
|
||||
call npm install --silent
|
||||
)
|
||||
|
||||
cd ..
|
||||
echo.
|
||||
|
||||
echo [7/7] Starting services...
|
||||
echo.
|
||||
|
||||
start "QQuiz Backend" cmd /k "cd /d %~dp0..\backend && call venv\Scripts\activate.bat && echo Backend API: http://localhost:8000 && echo API Docs: http://localhost:8000/docs && echo. && uvicorn main:app --reload"
|
||||
|
||||
timeout /t 5 /nobreak >nul
|
||||
|
||||
start "QQuiz Frontend" cmd /k "cd /d %~dp0..\frontend && echo Frontend: http://localhost:3000 && echo. && npm start"
|
||||
|
||||
timeout /t 3 /nobreak >nul
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo SUCCESS! QQuiz is starting...
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Frontend: http://localhost:3000
|
||||
echo Backend: http://localhost:8000
|
||||
echo API Docs: http://localhost:8000/docs
|
||||
echo.
|
||||
echo Default login:
|
||||
echo Username: admin
|
||||
echo Password: admin123
|
||||
echo.
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
timeout /t 5 /nobreak >nul
|
||||
start http://localhost:3000
|
||||
|
||||
echo System is running...
|
||||
echo Close backend and frontend windows to stop
|
||||
echo.
|
||||
pause
|
||||
44
scripts/start_backend_only.bat
Normal file
44
scripts/start_backend_only.bat
Normal file
@@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
title QQuiz Backend Server
|
||||
color 0B
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Starting QQuiz Backend Server
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0..\backend"
|
||||
|
||||
if not exist "venv\Scripts\activate.bat" (
|
||||
echo Creating virtual environment...
|
||||
python -m venv venv
|
||||
)
|
||||
|
||||
echo Activating virtual environment...
|
||||
call venv\Scripts\activate.bat
|
||||
|
||||
echo.
|
||||
echo Installing/updating dependencies...
|
||||
pip install -q -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
echo.
|
||||
echo Running database migrations...
|
||||
alembic upgrade head
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Backend Server Starting...
|
||||
echo ========================================
|
||||
echo.
|
||||
echo API URL: http://localhost:8000
|
||||
echo API Docs: http://localhost:8000/docs
|
||||
echo Health: http://localhost:8000/health
|
||||
echo.
|
||||
echo Press Ctrl+C to stop
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
|
||||
|
||||
pause
|
||||
34
scripts/start_frontend_only.bat
Normal file
34
scripts/start_frontend_only.bat
Normal file
@@ -0,0 +1,34 @@
|
||||
@echo off
|
||||
title QQuiz Frontend Server
|
||||
color 0B
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Starting QQuiz Frontend Server
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0..\frontend"
|
||||
|
||||
if not exist "node_modules" (
|
||||
echo Installing dependencies (first time only)...
|
||||
call npm config set registry https://registry.npmmirror.com
|
||||
call npm install
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Frontend Server Starting...
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Frontend URL: http://localhost:3000
|
||||
echo.
|
||||
echo Make sure backend is running on port 8000!
|
||||
echo.
|
||||
echo Press Ctrl+C to stop
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
npm start
|
||||
|
||||
pause
|
||||
44
scripts/start_postgres.bat
Normal file
44
scripts/start_postgres.bat
Normal file
@@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
title Start PostgreSQL Service
|
||||
color 0B
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Starting PostgreSQL Service
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo Attempting to start PostgreSQL service...
|
||||
echo.
|
||||
|
||||
net start postgresql-x64-18
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo SUCCESS!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo PostgreSQL service is now running
|
||||
echo Port: 5432
|
||||
echo.
|
||||
echo You can now run: scripts\fix_and_start.bat
|
||||
echo.
|
||||
) else (
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Failed to start service
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Please try starting manually:
|
||||
echo 1. Press Win+R
|
||||
echo 2. Type: services.msc
|
||||
echo 3. Find "postgresql-x64-18"
|
||||
echo 4. Right-click and select "Start"
|
||||
echo.
|
||||
echo OR run this script as Administrator:
|
||||
echo Right-click this bat file and select "Run as administrator"
|
||||
echo.
|
||||
)
|
||||
|
||||
pause
|
||||
94
scripts/start_windows.bat
Normal file
94
scripts/start_windows.bat
Normal file
@@ -0,0 +1,94 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 启动服务
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz - 智能刷题与题库管理平台
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
REM 检查是否在项目目录
|
||||
if not exist "docker-compose.yml" (
|
||||
echo [错误] 请在项目根目录运行此脚本!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 检查 .env 文件
|
||||
if not exist ".env" (
|
||||
echo [警告] .env 文件不存在,正在从模板创建...
|
||||
copy .env.example .env >nul
|
||||
echo [完成] 已创建 .env 文件,请编辑后重新运行此脚本
|
||||
notepad .env
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [1/4] 检查 Docker Desktop...
|
||||
docker info >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [提示] Docker Desktop 未运行,正在启动...
|
||||
echo.
|
||||
echo 请手动启动 Docker Desktop,然后按任意键继续...
|
||||
pause >nul
|
||||
|
||||
REM 再次检查
|
||||
docker info >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] Docker Desktop 启动失败!
|
||||
echo 请确保已安装 Docker Desktop: https://www.docker.com/products/docker-desktop/
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
echo [完成] Docker Desktop 运行正常
|
||||
echo.
|
||||
|
||||
echo [2/4] 停止旧容器...
|
||||
docker-compose down >nul 2>&1
|
||||
echo [完成] 旧容器已停止
|
||||
echo.
|
||||
|
||||
echo [3/4] 启动服务(首次启动需要几分钟下载镜像)...
|
||||
docker-compose up -d
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] 服务启动失败!
|
||||
echo 请查看错误信息或运行: docker-compose logs
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo [完成] 服务启动成功
|
||||
echo.
|
||||
|
||||
echo [4/4] 等待服务就绪...
|
||||
timeout /t 5 /nobreak >nul
|
||||
echo.
|
||||
|
||||
echo ==========================================
|
||||
echo 服务已启动!
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 前端地址: http://localhost:3000
|
||||
echo 后端地址: http://localhost:8000
|
||||
echo API 文档: http://localhost:8000/docs
|
||||
echo.
|
||||
echo 默认账户:
|
||||
echo 用户名: admin
|
||||
echo 密码: admin123
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
REM 询问是否打开浏览器
|
||||
choice /C YN /M "是否打开浏览器"
|
||||
if %errorlevel% equ 1 (
|
||||
start http://localhost:3000
|
||||
)
|
||||
|
||||
echo.
|
||||
echo 按任意键查看日志(Ctrl+C 退出日志查看)...
|
||||
pause >nul
|
||||
docker-compose logs -f
|
||||
134
scripts/start_windows_china.bat
Normal file
134
scripts/start_windows_china.bat
Normal file
@@ -0,0 +1,134 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 启动服务 (国内优化版)
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz - 智能刷题与题库管理平台
|
||||
echo (国内网络优化版)
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
REM 检查是否在项目目录
|
||||
if not exist "docker-compose.yml" (
|
||||
echo [错误] 请在项目根目录运行此脚本!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 检查 .env 文件
|
||||
if not exist ".env" (
|
||||
echo [警告] .env 文件不存在,正在从模板创建...
|
||||
copy .env.example .env >nul
|
||||
echo [完成] 已创建 .env 文件,请编辑后重新运行此脚本
|
||||
notepad .env
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [1/5] 检查 Docker Desktop...
|
||||
docker info >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] Docker Desktop 未运行!
|
||||
echo.
|
||||
echo 请先启动 Docker Desktop,然后按任意键继续...
|
||||
pause >nul
|
||||
|
||||
REM 再次检查
|
||||
docker info >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo [错误] Docker Desktop 启动失败!
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
echo [完成] Docker Desktop 运行正常
|
||||
echo.
|
||||
|
||||
echo [2/5] 检查镜像加速器配置...
|
||||
docker info | findstr "Registry Mirrors" >nul
|
||||
if %errorlevel% neq 0 (
|
||||
echo [警告] 未检测到镜像加速器配置
|
||||
echo.
|
||||
echo 强烈建议配置镜像加速器以提高下载速度!
|
||||
echo.
|
||||
choice /C YN /M "是否现在配置镜像加速器"
|
||||
if %errorlevel% equ 1 (
|
||||
echo.
|
||||
echo 请按照提示配置 Docker Desktop 镜像加速器...
|
||||
call scripts\setup_docker_mirror.bat
|
||||
echo.
|
||||
echo 配置完成后,请重新运行此脚本
|
||||
pause
|
||||
exit /b 0
|
||||
)
|
||||
) else (
|
||||
echo [完成] 已配置镜像加速器
|
||||
)
|
||||
echo.
|
||||
|
||||
echo [3/5] 停止旧容器...
|
||||
docker-compose down >nul 2>&1
|
||||
echo [完成]
|
||||
echo.
|
||||
|
||||
echo [4/5] 启动服务(首次启动需要几分钟)...
|
||||
echo.
|
||||
echo [提示] 如果下载镜像失败,请:
|
||||
echo 1. 配置镜像加速器(运行 setup_docker_mirror.bat)
|
||||
echo 2. 或使用备用启动方式(见下方提示)
|
||||
echo.
|
||||
|
||||
docker-compose up -d
|
||||
if %errorlevel% neq 0 (
|
||||
echo.
|
||||
echo [错误] 服务启动失败!
|
||||
echo.
|
||||
echo 可能的原因:
|
||||
echo 1. 网络问题 - 无法下载 Docker 镜像
|
||||
echo 2. 端口被占用 - 3000/8000/5432 端口已被使用
|
||||
echo 3. 配置错误 - 检查 .env 文件
|
||||
echo.
|
||||
echo 解决方案:
|
||||
echo 1. 配置镜像加速器: 运行 scripts\setup_docker_mirror.bat
|
||||
echo 2. 查看详细错误: docker-compose logs
|
||||
echo 3. 阅读文档: docs\DOCKER_MIRROR_SETUP.md
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo [完成] 服务启动成功
|
||||
echo.
|
||||
|
||||
echo [5/5] 等待服务就绪...
|
||||
timeout /t 8 /nobreak >nul
|
||||
echo.
|
||||
|
||||
echo ==========================================
|
||||
echo 服务已启动!
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 前端地址: http://localhost:3000
|
||||
echo 后端地址: http://localhost:8000
|
||||
echo API 文档: http://localhost:8000/docs
|
||||
echo.
|
||||
echo 默认账户:
|
||||
echo 用户名: admin
|
||||
echo 密码: admin123
|
||||
echo.
|
||||
echo 镜像加速: 已配置国内镜像源
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
REM 询问是否打开浏览器
|
||||
choice /C YN /M "是否打开浏览器"
|
||||
if %errorlevel% equ 1 (
|
||||
start http://localhost:3000
|
||||
)
|
||||
|
||||
echo.
|
||||
echo 按任意键查看日志(Ctrl+C 退出日志查看)...
|
||||
pause >nul
|
||||
docker-compose logs -f
|
||||
74
scripts/start_with_docker_db.bat
Normal file
74
scripts/start_with_docker_db.bat
Normal file
@@ -0,0 +1,74 @@
|
||||
@echo off
|
||||
title QQuiz - Start with Docker Database
|
||||
color 0B
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo QQuiz - Starting with Docker DB
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo [1/4] Checking Docker...
|
||||
docker --version >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Docker not found!
|
||||
echo Please install Docker Desktop from https://www.docker.com/
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
echo OK - Docker installed
|
||||
echo.
|
||||
|
||||
echo [2/4] Starting MySQL in Docker...
|
||||
docker-compose up -d mysql
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo ERROR: Failed to start MySQL
|
||||
echo Try: docker-compose down
|
||||
echo Then run this script again
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo OK - MySQL started
|
||||
echo Waiting for database to be ready...
|
||||
echo.
|
||||
timeout /t 10 /nobreak >nul
|
||||
echo.
|
||||
|
||||
echo [3/4] Starting Backend...
|
||||
start "QQuiz Backend" cmd /k "cd /d %~dp0..backend && call venv\Scripts\activate.bat && echo ======================================== && echo QQuiz Backend Server && echo ======================================== && echo. && echo API: http://localhost:8000 && echo Docs: http://localhost:8000/docs && echo. && alembic upgrade head && echo. && uvicorn main:app --reload"
|
||||
|
||||
echo Waiting for backend to start...
|
||||
timeout /t 8 /nobreak >nul
|
||||
echo.
|
||||
|
||||
echo [4/4] Starting Frontend...
|
||||
start "QQuiz Frontend" cmd /k "cd /d %~dp0..frontend && echo ======================================== && echo QQuiz Frontend Server && echo ======================================== && echo. && echo URL: http://localhost:3000 && echo. && npm start"
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo SUCCESS! QQuiz is starting...
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Frontend: http://localhost:3000
|
||||
echo Backend: http://localhost:8000
|
||||
echo Database: Running in Docker
|
||||
echo.
|
||||
echo Login:
|
||||
echo Username: admin
|
||||
echo Password: admin123
|
||||
echo.
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
timeout /t 5 /nobreak >nul
|
||||
start http://localhost:3000
|
||||
|
||||
echo System running...
|
||||
echo To stop: Close the backend/frontend windows
|
||||
echo To stop database: docker-compose down
|
||||
echo.
|
||||
pause
|
||||
24
scripts/stop_windows.bat
Normal file
24
scripts/stop_windows.bat
Normal file
@@ -0,0 +1,24 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 停止服务
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 停止 QQuiz 服务
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
docker-compose down
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo [完成] 服务已停止
|
||||
) else (
|
||||
echo.
|
||||
echo [错误] 停止服务失败
|
||||
)
|
||||
|
||||
echo.
|
||||
pause
|
||||
15
scripts/view_backend_logs.bat
Normal file
15
scripts/view_backend_logs.bat
Normal file
@@ -0,0 +1,15 @@
|
||||
@echo off
|
||||
title QQuiz - Backend Logs
|
||||
color 0B
|
||||
|
||||
cd /d "%~dp0.."
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo QQuiz Backend Logs (Real-time)
|
||||
echo ========================================
|
||||
echo.
|
||||
echo Press Ctrl+C to stop viewing logs
|
||||
echo.
|
||||
|
||||
docker-compose logs -f --tail=50 backend
|
||||
Reference in New Issue
Block a user