mirror of
https://github.com/handsomezhuzhu/QQuiz.git
synced 2026-02-20 12:00:14 +00:00
✨ Add Windows deployment support
## 新增功能 ### 📝 Windows 部署文档 - WINDOWS_DEPLOYMENT.md: 完整的 Windows 部署指南 - Docker Desktop 部署方式 - 本地源码部署方式 - 详细的问题排查指南 - QUICK_START.md: 5 分钟快速上手指南 - 简化的部署步骤 - 测试功能清单 - 常见问题解答 ### 🚀 Windows 启动脚本 - start_windows.bat: 一键启动服务 - stop_windows.bat: 停止服务 - logs_windows.bat: 查看日志 ### 📚 测试数据 - test_data/sample_questions.txt: 10 道基础题目 - 单选题、多选题、判断题 - 适合快速功能测试 - test_data/sample_questions_advanced.txt: 8 道简答题 - 测试 AI 评分功能 - 高级概念题目 ## 改进 - 优化 Windows 用户体验 - 提供一键启动方案 - 包含完整测试数据 🚀 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
234
QUICK_START.md
Normal file
234
QUICK_START.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# 🚀 QQuiz 快速开始指南(5 分钟上手)
|
||||
|
||||
## Windows 用户快速部署
|
||||
|
||||
### 第一步:准备工作(2 分钟)
|
||||
|
||||
1. **安装 Docker Desktop**
|
||||
- 下载:https://www.docker.com/products/docker-desktop/
|
||||
- 安装后重启电脑
|
||||
- 启动 Docker Desktop,等待启动完成
|
||||
|
||||
2. **配置 API Key**
|
||||
```powershell
|
||||
# 在项目目录打开 PowerShell
|
||||
cd E:\QQuiz
|
||||
|
||||
# 复制环境变量模板
|
||||
copy .env.example .env
|
||||
|
||||
# 编辑 .env 文件
|
||||
notepad .env
|
||||
```
|
||||
|
||||
**修改以下两项:**
|
||||
```env
|
||||
SECRET_KEY=change-this-to-a-very-long-random-string-at-least-32-characters
|
||||
OPENAI_API_KEY=sk-your-actual-openai-api-key-here
|
||||
```
|
||||
|
||||
### 第二步:启动服务(2 分钟)
|
||||
|
||||
**方式一:使用启动脚本(推荐)**
|
||||
```powershell
|
||||
# 双击运行
|
||||
start_windows.bat
|
||||
```
|
||||
|
||||
**方式二:手动启动**
|
||||
```powershell
|
||||
cd E:\QQuiz
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
等待服务启动完成(首次启动需要下载镜像,约 1-2 分钟)
|
||||
|
||||
### 第三步:开始使用(1 分钟)
|
||||
|
||||
1. **访问应用**
|
||||
- 打开浏览器访问:http://localhost:3000
|
||||
|
||||
2. **登录**
|
||||
- 用户名:`admin`
|
||||
- 密码:`admin123`
|
||||
|
||||
3. **创建第一个题库**
|
||||
- 点击「题库管理」
|
||||
- 点击「创建题库」
|
||||
- 输入名称:`Python 基础测试`
|
||||
- 上传文件:`test_data/sample_questions.txt`
|
||||
- 等待解析完成(约 10-30 秒)
|
||||
|
||||
4. **开始刷题**
|
||||
- 点击「开始刷题」
|
||||
- 答题并查看解析
|
||||
|
||||
---
|
||||
|
||||
## 🎯 测试功能清单
|
||||
|
||||
完成以下测试,确保所有功能正常:
|
||||
|
||||
### ✅ 基础功能
|
||||
- [ ] 登录系统
|
||||
- [ ] 创建题库
|
||||
- [ ] 上传文档并等待解析完成
|
||||
- [ ] 开始刷题
|
||||
- [ ] 答对一题
|
||||
- [ ] 答错一题(应自动加入错题本)
|
||||
- [ ] 查看错题本
|
||||
|
||||
### ✅ 高级功能
|
||||
- [ ] 向已有题库追加新文档
|
||||
- [ ] 验证去重功能(上传重复题目)
|
||||
- [ ] 测试不同题型(单选、多选、判断、简答)
|
||||
- [ ] 测试断点续做(刷到一半退出,再次进入继续)
|
||||
- [ ] 手动添加/移除错题
|
||||
- [ ] 修改管理员密码
|
||||
|
||||
### ✅ 管理员功能(使用 admin 账户)
|
||||
- [ ] 访问系统设置
|
||||
- [ ] 修改上传限制
|
||||
- [ ] 关闭用户注册
|
||||
|
||||
---
|
||||
|
||||
## 📝 测试数据文件
|
||||
|
||||
项目提供了两个测试文件:
|
||||
|
||||
1. **`test_data/sample_questions.txt`** - 基础选择题和判断题
|
||||
- 10 道题
|
||||
- 包含单选、多选、判断题
|
||||
- 适合快速测试
|
||||
|
||||
2. **`test_data/sample_questions_advanced.txt`** - 简答题
|
||||
- 8 道题
|
||||
- 全部为简答题
|
||||
- 测试 AI 评分功能
|
||||
|
||||
**使用方法:**
|
||||
1. 创建题库时上传 `sample_questions.txt`
|
||||
2. 解析完成后,点击「添加题目文档」
|
||||
3. 再次上传 `sample_questions.txt`(测试去重)
|
||||
4. 观察日志,应该显示"去重 10 题,新增 0 题"
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 常用命令
|
||||
|
||||
### 查看日志
|
||||
```powershell
|
||||
# 方式一:使用脚本
|
||||
logs_windows.bat
|
||||
|
||||
# 方式二:命令行
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 重启服务
|
||||
```powershell
|
||||
docker-compose restart
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
```powershell
|
||||
# 方式一:使用脚本
|
||||
stop_windows.bat
|
||||
|
||||
# 方式二:命令行
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 完全重置(清除所有数据)
|
||||
```powershell
|
||||
docker-compose down -v
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❓ 常见问题
|
||||
|
||||
### 问题 1: 端口被占用
|
||||
|
||||
**错误信息:** `Bind for 0.0.0.0:3000 failed: port is already allocated`
|
||||
|
||||
**解决方案:**
|
||||
```powershell
|
||||
# 查找占用端口的进程
|
||||
netstat -ano | findstr :3000
|
||||
|
||||
# 结束进程(替换 <PID> 为实际进程 ID)
|
||||
taskkill /F /PID <PID>
|
||||
|
||||
# 重新启动
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 问题 2: Docker Desktop 未启动
|
||||
|
||||
**错误信息:** `error during connect: ... Is the docker daemon running?`
|
||||
|
||||
**解决方案:**
|
||||
1. 打开 Docker Desktop 应用
|
||||
2. 等待底部状态显示 "Running"
|
||||
3. 重新运行启动脚本
|
||||
|
||||
### 问题 3: API Key 未配置
|
||||
|
||||
**现象:** 文档解析一直处于 "processing" 状态
|
||||
|
||||
**解决方案:**
|
||||
1. 检查 `.env` 文件中的 `OPENAI_API_KEY` 是否正确
|
||||
2. 查看后端日志:`docker-compose logs backend`
|
||||
3. 重新启动:`docker-compose restart`
|
||||
|
||||
### 问题 4: 前端无法连接后端
|
||||
|
||||
**现象:** 登录失败,显示网络错误
|
||||
|
||||
**解决方案:**
|
||||
```powershell
|
||||
# 检查后端是否运行
|
||||
docker-compose ps
|
||||
|
||||
# 检查后端健康状态
|
||||
# 浏览器访问: http://localhost:8000/health
|
||||
|
||||
# 查看后端日志
|
||||
docker-compose logs backend
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 下一步
|
||||
|
||||
✅ **部署成功后,建议阅读:**
|
||||
|
||||
1. **完整功能说明**: `README.md`
|
||||
2. **详细部署文档**: `DEPLOYMENT.md`
|
||||
3. **Windows 专用指南**: `WINDOWS_DEPLOYMENT.md`
|
||||
4. **项目架构**: `PROJECT_STRUCTURE.md`
|
||||
|
||||
✅ **进阶使用:**
|
||||
|
||||
1. 修改管理员密码
|
||||
2. 创建普通用户账户
|
||||
3. 上传真实的题目文档
|
||||
4. 配置系统限制(上传大小、次数等)
|
||||
5. 尝试不同的 AI 提供商(Qwen、Claude)
|
||||
|
||||
---
|
||||
|
||||
## 🎉 恭喜!
|
||||
|
||||
如果你已经完成了上述测试,说明 QQuiz 已经在你的 Windows 系统上成功部署运行了!
|
||||
|
||||
现在你可以:
|
||||
- 📚 上传自己的题库文档
|
||||
- 🎯 开始高效刷题学习
|
||||
- 📊 通过错题本巩固薄弱知识点
|
||||
- ⚙️ 自定义系统配置
|
||||
|
||||
祝你学习愉快!如有问题,请查看详细文档或提交 Issue。
|
||||
533
WINDOWS_DEPLOYMENT.md
Normal file
533
WINDOWS_DEPLOYMENT.md
Normal file
@@ -0,0 +1,533 @@
|
||||
# QQuiz Windows 部署指南
|
||||
|
||||
## 🚀 方式一:Docker Desktop(推荐)
|
||||
|
||||
这是 Windows 上最简单的部署方式。
|
||||
|
||||
### 前置要求
|
||||
|
||||
1. **安装 Docker Desktop**
|
||||
- 下载地址:https://www.docker.com/products/docker-desktop/
|
||||
- 系统要求:Windows 10/11 64-bit (Pro/Enterprise/Education)
|
||||
- 需要启用 WSL 2
|
||||
|
||||
2. **启用 WSL 2**(如果未启用)
|
||||
```powershell
|
||||
# 以管理员身份运行 PowerShell
|
||||
wsl --install
|
||||
# 重启计算机
|
||||
```
|
||||
|
||||
### 部署步骤
|
||||
|
||||
#### 1. 配置环境变量
|
||||
|
||||
```powershell
|
||||
# 在项目根目录(E:\QQuiz)打开 PowerShell
|
||||
cd E:\QQuiz
|
||||
|
||||
# 复制环境变量模板
|
||||
copy .env.example .env
|
||||
|
||||
# 使用记事本编辑 .env
|
||||
notepad .env
|
||||
```
|
||||
|
||||
**必须修改的配置:**
|
||||
|
||||
```env
|
||||
# JWT 密钥(必须修改!至少 32 字符)
|
||||
SECRET_KEY=your-very-long-secret-key-change-this-to-something-secure
|
||||
|
||||
# 选择一个 AI 提供商并配置 API Key
|
||||
|
||||
# 方案 1: 使用 OpenAI
|
||||
AI_PROVIDER=openai
|
||||
OPENAI_API_KEY=sk-your-openai-api-key
|
||||
OPENAI_MODEL=gpt-4o-mini
|
||||
|
||||
# 方案 2: 使用通义千问(国内推荐)
|
||||
# AI_PROVIDER=qwen
|
||||
# QWEN_API_KEY=sk-your-qwen-api-key
|
||||
# QWEN_MODEL=qwen-plus
|
||||
|
||||
# 方案 3: 使用 Claude
|
||||
# AI_PROVIDER=anthropic
|
||||
# ANTHROPIC_API_KEY=sk-ant-your-key
|
||||
# ANTHROPIC_MODEL=claude-3-haiku-20240307
|
||||
```
|
||||
|
||||
#### 2. 启动 Docker Desktop
|
||||
|
||||
- 打开 Docker Desktop 应用
|
||||
- 等待 Docker Engine 启动(底部状态显示 "Running")
|
||||
|
||||
#### 3. 启动服务
|
||||
|
||||
```powershell
|
||||
# 在项目根目录
|
||||
cd E:\QQuiz
|
||||
|
||||
# 启动所有服务(第一次会比较慢,需要下载镜像)
|
||||
docker-compose up -d
|
||||
|
||||
# 查看服务状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
#### 4. 访问应用
|
||||
|
||||
- **前端**: http://localhost:3000
|
||||
- **后端 API**: http://localhost:8000
|
||||
- **API 文档**: http://localhost:8000/docs
|
||||
|
||||
#### 5. 默认账户登录
|
||||
|
||||
- **用户名**: `admin`
|
||||
- **密码**: `admin123`
|
||||
|
||||
⚠️ **首次登录后请立即修改密码!**
|
||||
|
||||
### 常用 Docker 命令
|
||||
|
||||
```powershell
|
||||
# 查看运行状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f backend
|
||||
docker-compose logs -f frontend
|
||||
|
||||
# 停止服务
|
||||
docker-compose stop
|
||||
|
||||
# 重启服务
|
||||
docker-compose restart
|
||||
|
||||
# 停止并删除容器
|
||||
docker-compose down
|
||||
|
||||
# 重新构建并启动
|
||||
docker-compose up -d --build
|
||||
|
||||
# 进入容器内部
|
||||
docker-compose exec backend bash
|
||||
docker-compose exec postgres psql -U qquiz qquiz_db
|
||||
```
|
||||
|
||||
### 问题排查
|
||||
|
||||
#### 问题 1: Docker Desktop 无法启动
|
||||
|
||||
**解决方案:**
|
||||
```powershell
|
||||
# 确保 WSL 2 已安装
|
||||
wsl --list --verbose
|
||||
|
||||
# 如果版本是 1,升级到 2
|
||||
wsl --set-version Ubuntu 2
|
||||
|
||||
# 设置默认版本为 2
|
||||
wsl --set-default-version 2
|
||||
```
|
||||
|
||||
#### 问题 2: 端口被占用
|
||||
|
||||
```powershell
|
||||
# 查看端口占用
|
||||
netstat -ano | findstr :3000
|
||||
netstat -ano | findstr :8000
|
||||
netstat -ano | findstr :5432
|
||||
|
||||
# 结束占用进程(替换 PID)
|
||||
taskkill /F /PID <进程ID>
|
||||
```
|
||||
|
||||
#### 问题 3: 容器启动失败
|
||||
|
||||
```powershell
|
||||
# 查看详细错误日志
|
||||
docker-compose logs backend
|
||||
|
||||
# 重新构建
|
||||
docker-compose down
|
||||
docker-compose build --no-cache
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 方式二:本地源码部署
|
||||
|
||||
适合开发调试,需要手动安装各种依赖。
|
||||
|
||||
### 前置要求
|
||||
|
||||
1. **Python 3.11+**
|
||||
- 下载:https://www.python.org/downloads/
|
||||
- 安装时勾选 "Add Python to PATH"
|
||||
|
||||
2. **Node.js 18+**
|
||||
- 下载:https://nodejs.org/
|
||||
- 推荐安装 LTS 版本
|
||||
|
||||
3. **PostgreSQL 15+**
|
||||
- 下载:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
|
||||
- 记住安装时设置的密码
|
||||
|
||||
### 部署步骤
|
||||
|
||||
#### 1. 安装 PostgreSQL
|
||||
|
||||
1. 下载并安装 PostgreSQL 15
|
||||
2. 安装完成后,打开 **pgAdmin 4** 或 **SQL Shell (psql)**
|
||||
|
||||
3. 创建数据库:
|
||||
|
||||
```sql
|
||||
-- 使用 psql 或 pgAdmin 执行
|
||||
CREATE DATABASE qquiz_db;
|
||||
CREATE USER qquiz WITH PASSWORD 'qquiz_password';
|
||||
GRANT ALL PRIVILEGES ON DATABASE qquiz_db TO qquiz;
|
||||
```
|
||||
|
||||
#### 2. 配置环境变量
|
||||
|
||||
```powershell
|
||||
cd E:\QQuiz
|
||||
copy .env.example .env
|
||||
notepad .env
|
||||
```
|
||||
|
||||
**修改数据库连接为本地:**
|
||||
|
||||
```env
|
||||
# 数据库(本地部署)
|
||||
DATABASE_URL=postgresql+asyncpg://qquiz:qquiz_password@localhost:5432/qquiz_db
|
||||
|
||||
# JWT 密钥
|
||||
SECRET_KEY=your-super-secret-key-at-least-32-characters-long
|
||||
|
||||
# AI 配置(选择一个)
|
||||
AI_PROVIDER=openai
|
||||
OPENAI_API_KEY=sk-your-openai-api-key
|
||||
OPENAI_MODEL=gpt-4o-mini
|
||||
```
|
||||
|
||||
#### 3. 启动后端
|
||||
|
||||
**打开第一个 PowerShell 窗口:**
|
||||
|
||||
```powershell
|
||||
cd E:\QQuiz\backend
|
||||
|
||||
# 创建虚拟环境
|
||||
python -m venv venv
|
||||
|
||||
# 激活虚拟环境
|
||||
.\venv\Scripts\Activate.ps1
|
||||
|
||||
# 如果遇到执行策略错误,运行:
|
||||
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 运行数据库迁移
|
||||
alembic upgrade head
|
||||
|
||||
# 启动后端服务
|
||||
uvicorn main:app --reload
|
||||
```
|
||||
|
||||
**成功后会看到:**
|
||||
```
|
||||
INFO: Uvicorn running on http://127.0.0.1:8000
|
||||
INFO: Application startup complete.
|
||||
```
|
||||
|
||||
#### 4. 启动前端
|
||||
|
||||
**打开第二个 PowerShell 窗口:**
|
||||
|
||||
```powershell
|
||||
cd E:\QQuiz\frontend
|
||||
|
||||
# 安装依赖(第一次需要)
|
||||
npm install
|
||||
|
||||
# 启动开发服务器
|
||||
npm start
|
||||
```
|
||||
|
||||
**成功后会自动打开浏览器:**
|
||||
```
|
||||
VITE v5.0.11 ready in 1234 ms
|
||||
|
||||
➜ Local: http://localhost:3000/
|
||||
➜ Network: use --host to expose
|
||||
```
|
||||
|
||||
#### 5. 访问应用
|
||||
|
||||
- **前端**: http://localhost:3000
|
||||
- **后端**: http://localhost:8000
|
||||
- **API 文档**: http://localhost:8000/docs
|
||||
|
||||
### 问题排查
|
||||
|
||||
#### 问题 1: PowerShell 执行策略错误
|
||||
|
||||
```powershell
|
||||
# 错误信息:无法加载文件 xxx.ps1,因为在此系统上禁止运行脚本
|
||||
|
||||
# 解决方案:
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
# 然后重新激活虚拟环境
|
||||
.\venv\Scripts\Activate.ps1
|
||||
```
|
||||
|
||||
#### 问题 2: pip 安装依赖失败
|
||||
|
||||
```powershell
|
||||
# 使用国内镜像加速
|
||||
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
```
|
||||
|
||||
#### 问题 3: PostgreSQL 连接失败
|
||||
|
||||
```powershell
|
||||
# 确认 PostgreSQL 服务正在运行
|
||||
# 打开 "服务" (services.msc)
|
||||
# 找到 "postgresql-x64-15",确保状态为 "正在运行"
|
||||
|
||||
# 或使用命令行
|
||||
sc query postgresql-x64-15
|
||||
```
|
||||
|
||||
#### 问题 4: npm 安装慢
|
||||
|
||||
```powershell
|
||||
# 使用淘宝镜像
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
|
||||
# 然后重新安装
|
||||
npm install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 测试部署是否成功
|
||||
|
||||
### 1. 检查后端健康状态
|
||||
|
||||
浏览器访问:http://localhost:8000/health
|
||||
|
||||
**预期返回:**
|
||||
```json
|
||||
{"status": "healthy"}
|
||||
```
|
||||
|
||||
### 2. 查看 API 文档
|
||||
|
||||
访问:http://localhost:8000/docs
|
||||
|
||||
应该能看到 Swagger UI 界面,显示所有 API 接口。
|
||||
|
||||
### 3. 测试登录
|
||||
|
||||
1. 访问 http://localhost:3000
|
||||
2. 使用默认账户登录:
|
||||
- 用户名:`admin`
|
||||
- 密码:`admin123`
|
||||
3. 成功后应该进入 Dashboard
|
||||
|
||||
### 4. 测试创建题库
|
||||
|
||||
1. 点击「题库管理」
|
||||
2. 点击「创建题库」
|
||||
3. 输入题库名称
|
||||
4. 上传测试文档(可以创建一个简单的 TXT 文件)
|
||||
|
||||
**测试文档示例 (test_questions.txt):**
|
||||
```txt
|
||||
1. Python 是一种什么类型的语言?
|
||||
A. 编译型语言
|
||||
B. 解释型语言
|
||||
C. 汇编语言
|
||||
D. 机器语言
|
||||
答案:B
|
||||
解析:Python 是一种解释型、面向对象的高级编程语言。
|
||||
|
||||
2. 以下哪个不是 Python 的数据类型?
|
||||
A. list
|
||||
B. tuple
|
||||
C. array
|
||||
D. dict
|
||||
答案:C
|
||||
解析:Python 内置的数据类型包括 list、tuple、dict 等,array 需要导入 array 模块。
|
||||
```
|
||||
|
||||
5. 上传后等待解析完成(状态会从「处理中」变为「就绪」)
|
||||
6. 点击「开始刷题」测试刷题功能
|
||||
|
||||
---
|
||||
|
||||
## 📝 Windows 特定配置
|
||||
|
||||
### 1. 设置环境变量(可选)
|
||||
|
||||
**通过 GUI 设置:**
|
||||
1. 右键「此电脑」→「属性」
|
||||
2. 「高级系统设置」→「环境变量」
|
||||
3. 在「用户变量」中添加:
|
||||
- `OPENAI_API_KEY`: 你的 API Key
|
||||
- `SECRET_KEY`: 你的密钥
|
||||
|
||||
### 2. 配置防火墙(如果需要局域网访问)
|
||||
|
||||
```powershell
|
||||
# 允许端口访问(以管理员身份运行)
|
||||
netsh advfirewall firewall add rule name="QQuiz Frontend" dir=in action=allow protocol=TCP localport=3000
|
||||
netsh advfirewall firewall add rule name="QQuiz Backend" dir=in action=allow protocol=TCP localport=8000
|
||||
```
|
||||
|
||||
### 3. 创建启动脚本
|
||||
|
||||
**创建 `start.bat` 文件:**
|
||||
|
||||
```batch
|
||||
@echo off
|
||||
echo Starting QQuiz...
|
||||
|
||||
REM 检查 Docker Desktop 是否运行
|
||||
docker info >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo Starting Docker Desktop...
|
||||
start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"
|
||||
timeout /t 10
|
||||
)
|
||||
|
||||
REM 启动服务
|
||||
cd /d "%~dp0"
|
||||
docker-compose up -d
|
||||
|
||||
echo.
|
||||
echo QQuiz is starting...
|
||||
echo Frontend: http://localhost:3000
|
||||
echo Backend: http://localhost:8000
|
||||
echo.
|
||||
pause
|
||||
```
|
||||
|
||||
**使用方法:**
|
||||
- 双击 `start.bat` 即可启动服务
|
||||
|
||||
---
|
||||
|
||||
## 🎯 性能优化建议
|
||||
|
||||
### 1. Docker Desktop 配置
|
||||
|
||||
1. 打开 Docker Desktop
|
||||
2. 设置 → Resources
|
||||
3. 调整资源分配:
|
||||
- **CPUs**: 4 核(推荐)
|
||||
- **Memory**: 4 GB(推荐)
|
||||
- **Swap**: 1 GB
|
||||
- **Disk image size**: 60 GB
|
||||
|
||||
### 2. WSL 2 优化
|
||||
|
||||
**限制 WSL 2 内存占用(可选):**
|
||||
|
||||
创建 `%USERPROFILE%\.wslconfig` 文件:
|
||||
|
||||
```ini
|
||||
[wsl2]
|
||||
memory=4GB
|
||||
processors=4
|
||||
swap=1GB
|
||||
```
|
||||
|
||||
重启 WSL:
|
||||
```powershell
|
||||
wsl --shutdown
|
||||
```
|
||||
|
||||
### 3. 开发工具推荐
|
||||
|
||||
- **代码编辑器**: VS Code(安装 Python、ESLint、Prettier 插件)
|
||||
- **API 测试**: Postman 或 Insomnia
|
||||
- **数据库管理**: pgAdmin 4 或 DBeaver
|
||||
- **终端**: Windows Terminal(更好的 PowerShell 体验)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 常见问题汇总
|
||||
|
||||
### Q: 如何完全重置项目?
|
||||
|
||||
```powershell
|
||||
# Docker 方式
|
||||
docker-compose down -v # 删除容器和数据卷
|
||||
docker-compose up -d # 重新启动
|
||||
|
||||
# 本地方式
|
||||
# 1. 删除数据库
|
||||
DROP DATABASE qquiz_db;
|
||||
CREATE DATABASE qquiz_db;
|
||||
# 2. 重新运行迁移
|
||||
cd E:\QQuiz\backend
|
||||
alembic upgrade head
|
||||
```
|
||||
|
||||
### Q: 如何查看日志?
|
||||
|
||||
```powershell
|
||||
# Docker 方式
|
||||
docker-compose logs -f backend
|
||||
docker-compose logs -f frontend
|
||||
|
||||
# 本地方式
|
||||
# 直接在运行的 PowerShell 窗口中查看
|
||||
```
|
||||
|
||||
### Q: 如何停止服务?
|
||||
|
||||
```powershell
|
||||
# Docker 方式
|
||||
docker-compose stop
|
||||
|
||||
# 本地方式
|
||||
# 在运行的 PowerShell 窗口中按 Ctrl+C
|
||||
```
|
||||
|
||||
### Q: 如何更新代码后重启?
|
||||
|
||||
```powershell
|
||||
# Docker 方式
|
||||
docker-compose restart
|
||||
|
||||
# 本地方式(uvicorn 和 vite 会自动重载)
|
||||
# 无需操作,保存文件后自动刷新
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
如果遇到问题:
|
||||
|
||||
1. **查看日志**: `docker-compose logs -f`
|
||||
2. **检查文档**: 阅读 `DEPLOYMENT.md`
|
||||
3. **查看 API 文档**: http://localhost:8000/docs
|
||||
4. **GitHub Issues**: 提交问题报告
|
||||
|
||||
---
|
||||
|
||||
祝你部署顺利!🎉
|
||||
13
logs_windows.bat
Normal file
13
logs_windows.bat
Normal file
@@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 查看日志
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo QQuiz 服务日志
|
||||
echo ==========================================
|
||||
echo.
|
||||
echo 按 Ctrl+C 退出日志查看
|
||||
echo.
|
||||
|
||||
docker-compose logs -f
|
||||
92
start_windows.bat
Normal file
92
start_windows.bat
Normal file
@@ -0,0 +1,92 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 启动服务
|
||||
|
||||
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
|
||||
22
stop_windows.bat
Normal file
22
stop_windows.bat
Normal file
@@ -0,0 +1,22 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
title QQuiz - 停止服务
|
||||
|
||||
echo.
|
||||
echo ==========================================
|
||||
echo 停止 QQuiz 服务
|
||||
echo ==========================================
|
||||
echo.
|
||||
|
||||
docker-compose down
|
||||
|
||||
if %errorlevel% equ 0 (
|
||||
echo.
|
||||
echo [完成] 服务已停止
|
||||
) else (
|
||||
echo.
|
||||
echo [错误] 停止服务失败
|
||||
)
|
||||
|
||||
echo.
|
||||
pause
|
||||
77
test_data/sample_questions.txt
Normal file
77
test_data/sample_questions.txt
Normal file
@@ -0,0 +1,77 @@
|
||||
测试题库 - Python 基础
|
||||
|
||||
1. Python 是一种什么类型的编程语言?
|
||||
A. 编译型语言
|
||||
B. 解释型语言
|
||||
C. 汇编语言
|
||||
D. 机器语言
|
||||
答案:B
|
||||
解析:Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。它不需要编译成机器码,而是通过解释器直接执行源代码。
|
||||
|
||||
2. 下列哪个不是 Python 的核心数据类型?
|
||||
A. 列表 (list)
|
||||
B. 元组 (tuple)
|
||||
C. 数组 (array)
|
||||
D. 字典 (dict)
|
||||
答案:C
|
||||
解析:Python 的核心数据类型包括 list、tuple、dict、set、str、int、float、bool 等。array 不是内置类型,需要导入 array 模块才能使用。
|
||||
|
||||
3. 在 Python 中,以下哪个关键字用于定义函数?
|
||||
A. function
|
||||
B. def
|
||||
C. func
|
||||
D. define
|
||||
答案:B
|
||||
解析:Python 使用 def 关键字来定义函数,例如:def my_function():
|
||||
|
||||
4. Python 中如何创建一个空字典?
|
||||
A. dict = []
|
||||
B. dict = ()
|
||||
C. dict = {}
|
||||
D. dict = set()
|
||||
答案:C
|
||||
解析:{} 用于创建空字典,[] 创建空列表,() 创建空元组,set() 创建空集合。
|
||||
|
||||
5. 以下哪个语句可以正确导入 Python 的 random 模块?
|
||||
A. import random
|
||||
B. include random
|
||||
C. using random
|
||||
D. require random
|
||||
答案:A
|
||||
解析:Python 使用 import 关键字导入模块,例如:import random 或 from random import randint
|
||||
|
||||
6. Python 是否支持多继承?
|
||||
A. 正确
|
||||
B. 错误
|
||||
答案:A
|
||||
解析:Python 支持多继承,一个类可以继承多个父类。语法为:class ChildClass(Parent1, Parent2):
|
||||
|
||||
7. Python 中的 None 表示什么?
|
||||
A. 空字符串
|
||||
B. 数字 0
|
||||
C. 空值/空对象
|
||||
D. False
|
||||
答案:C
|
||||
解析:None 是 Python 中的一个特殊常量,表示"无值"或"空值"。它不等同于 0、空字符串或 False。
|
||||
|
||||
8. 以下哪些是 Python 的合法变量名?(多选)
|
||||
A. my_var
|
||||
B. _private
|
||||
C. 2nd_var
|
||||
D. myVar
|
||||
答案:ABD
|
||||
解析:Python 变量名必须以字母或下划线开头,不能以数字开头。因此 2nd_var 不合法。
|
||||
|
||||
9. Python 中的缩进是强制性的吗?
|
||||
A. 正确
|
||||
B. 错误
|
||||
答案:A
|
||||
解析:Python 使用缩进来表示代码块,这是语法的一部分,不正确的缩进会导致 IndentationError。
|
||||
|
||||
10. 在 Python 中,如何注释单行代码?
|
||||
A. // 注释内容
|
||||
B. /* 注释内容 */
|
||||
C. # 注释内容
|
||||
D. -- 注释内容
|
||||
答案:C
|
||||
解析:Python 使用 # 进行单行注释,使用三引号 ''' 或 """ 进行多行注释。
|
||||
33
test_data/sample_questions_advanced.txt
Normal file
33
test_data/sample_questions_advanced.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
测试题库 - 高级编程概念
|
||||
|
||||
1. 什么是时间复杂度?请简要说明。
|
||||
答案:时间复杂度是用来衡量算法执行时间与输入规模之间关系的度量标准。它描述了算法运行时间如何随着输入数据规模的增长而增长。常见的时间复杂度有 O(1)、O(log n)、O(n)、O(n log n)、O(n²) 等。
|
||||
解析:时间复杂度是算法分析的重要指标,帮助我们评估算法的效率。
|
||||
|
||||
2. 解释什么是闭包(Closure)。
|
||||
答案:闭包是指一个函数能够记住并访问其词法作用域,即使这个函数在其词法作用域之外执行。闭包允许内部函数访问外部函数的变量,即使外部函数已经执行完毕。
|
||||
解析:闭包在 JavaScript、Python 等语言中广泛应用,常用于数据封装和创建私有变量。
|
||||
|
||||
3. 数据库索引的作用是什么?
|
||||
答案:数据库索引的主要作用是加快数据检索速度。索引类似于书籍的目录,可以让数据库快速定位到需要的数据,而不需要扫描整个表。索引可以显著提高查询性能,但会增加存储空间和降低写入性能。
|
||||
解析:合理使用索引是数据库优化的关键,需要在查询性能和写入性能之间取得平衡。
|
||||
|
||||
4. RESTful API 的设计原则包括哪些?
|
||||
答案:RESTful API 的主要设计原则包括:1) 使用 HTTP 方法(GET、POST、PUT、DELETE)表示操作;2) 资源用 URI 表示;3) 无状态通信;4) 统一的接口;5) 客户端-服务器分离;6) 可缓存性;7) 分层系统。
|
||||
解析:遵循 REST 原则可以构建可扩展、易维护的 Web API。
|
||||
|
||||
5. 简述 Docker 容器化的优势。
|
||||
答案:Docker 容器化的主要优势包括:1) 环境一致性,消除"在我机器上能运行"的问题;2) 轻量级,相比虚拟机启动更快、资源占用更少;3) 可移植性,可以在任何支持 Docker 的平台运行;4) 快速部署和扩展;5) 版本控制和回滚;6) 微服务架构支持。
|
||||
解析:Docker 已成为现代应用部署的标准工具,极大提高了开发和运维效率。
|
||||
|
||||
6. 解释什么是 SQL 注入攻击,如何防范?
|
||||
答案:SQL 注入是一种代码注入攻击,攻击者通过在输入中插入恶意 SQL 代码来操纵数据库。防范措施包括:1) 使用参数化查询(预处理语句);2) 输入验证和过滤;3) 最小权限原则;4) 使用 ORM 框架;5) 错误信息不暴露敏感信息;6) Web 应用防火墙。
|
||||
解析:SQL 注入是最常见的 Web 安全威胁之一,使用参数化查询是最有效的防护方法。
|
||||
|
||||
7. 什么是 CORS?它解决了什么问题?
|
||||
答案:CORS(跨域资源共享)是一种机制,允许浏览器向跨源服务器发出请求。它解决了浏览器的同源策略限制问题,使得前后端分离的应用可以安全地进行跨域通信。通过设置适当的 HTTP 响应头(如 Access-Control-Allow-Origin),服务器可以控制哪些域名可以访问资源。
|
||||
解析:理解 CORS 对于开发现代 Web 应用至关重要,特别是前后端分离架构。
|
||||
|
||||
8. 简述 Git 的工作流程。
|
||||
答案:Git 的基本工作流程包括:1) 工作区:修改文件;2) 暂存区(git add):将修改添加到暂存区;3) 本地仓库(git commit):提交更改到本地仓库;4) 远程仓库(git push):推送到远程仓库。常见操作还包括分支管理(git branch)、合并(git merge)、拉取(git pull)等。
|
||||
解析:掌握 Git 是现代开发者的必备技能,理解其三区模型有助于更好地使用版本控制。
|
||||
Reference in New Issue
Block a user