docs: 完善文档和清理项目,添加 Gemini 配置指南

主要更新:

📚 文档改进
- 新增 AI_CONFIGURATION.md:详细的 AI 提供商配置指南
- 新增 CHINA_MIRROR_GUIDE.md:中国镜像加速指南
- 删除 6 个过时文档(DEPLOYMENT.md, QUICK_START.md 等)
- 更新 README.md:添加 Gemini 功能特性和 AI 提供商对比表

🧹 脚本清理
- 删除 11 个重复/过时脚本(从 25 个减少到 14 个)
- 删除 PostgreSQL 相关脚本(项目使用 MySQL)
- 删除重复的启动脚本(start_windows.bat, start_app.bat 等)

⚙️ 配置文件更新
- 更新 .env.example:添加 Gemini 配置示例和说明
- 默认 AI_PROVIDER 改为 gemini(推荐)
- 添加各提供商的获取 API Key 链接

🎯 核心改进
- 突出 Gemini 原生 PDF 理解优势
- 提供清晰的 AI 提供商选择指南
- 简化项目结构,提高可维护性

清理内容:
- 删除 docs: DEPLOYMENT.md, DOCKER_MIRROR_SETUP.md, GITHUB_PUSH_GUIDE.md,
  QUICK_START.md, README_QUICKSTART.md, START_HERE.txt
- 删除 scripts: auto_setup_and_run.bat, check_postgres.bat, logs_windows.bat,
  push_to_github.bat, quick_config.bat, restart_docker.bat, setup_docker_mirror.bat,
  start_app.bat, start_postgres.bat, start_windows.bat, start_windows_china.bat

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-01 23:21:04 +08:00
parent f403eacb9d
commit ed87aae014
30 changed files with 531 additions and 2206 deletions

View File

@@ -7,19 +7,27 @@ DATABASE_URL=mysql+aiomysql://qquiz:qquiz_password@localhost:3306/qquiz_db
SECRET_KEY=your-super-secret-key-change-in-production-minimum-32-characters
# AI Provider Configuration
AI_PROVIDER=openai
# Options: openai, anthropic, qwen
AI_PROVIDER=gemini
# Options: gemini (推荐), openai, anthropic, qwen
# 推荐 Gemini支持原生 PDF 理解,完整保留图片、表格、公式
# OpenAI Configuration
# Google Gemini Configuration (推荐)
GEMINI_API_KEY=AIza-your-gemini-api-key
GEMINI_BASE_URL=https://generativelanguage.googleapis.com
# GEMINI_BASE_URL 可选,留空使用默认。如需使用代理或 Key 轮训服务,可配置自定义地址
GEMINI_MODEL=gemini-2.0-flash-exp
# 获取 API Key: https://aistudio.google.com/apikey (免费额度充足)
# OpenAI Configuration (仅文本PDF会丢失格式)
OPENAI_API_KEY=sk-your-openai-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
# Anthropic Configuration
# Anthropic Configuration (仅文本PDF会丢失格式)
ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key
ANTHROPIC_MODEL=claude-3-haiku-20240307
# Qwen Configuration
# Qwen Configuration (仅文本PDF会丢失格式)
QWEN_API_KEY=sk-your-qwen-api-key
QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-plus

1
.gitignore vendored
View File

@@ -54,3 +54,4 @@ htmlcov/
# Docker
*.log
docker-compose.override.yml

View File

@@ -5,7 +5,9 @@ QQuiz 是一个支持 Docker/源码双模部署的智能刷题平台,核心功
## 功能特性
- 📚 **多文件上传与去重**: 支持向同一题库追加文档,自动识别并过滤重复题目
- 🤖 **AI 智能解析**: 支持 OpenAI/Anthropic/Qwen 多种 AI 提供商
- 🤖 **AI 智能解析**: 支持 Google Gemini (推荐) / OpenAI / Anthropic / Qwen 多种 AI 提供商
- 📄 **原生 PDF 理解**: Gemini 支持直接处理 PDF最多1000页完整保留图片、表格、公式等内容
- 🎓 **AI 参考答案**: 对于没有提供答案的题目,自动生成 AI 参考答案
- 📊 **断点续做**: 自动记录刷题进度,随时继续
-**错题本管理**: 自动收集错题,支持手动添加/移除
- 🎯 **多题型支持**: 单选、多选、判断、简答
@@ -66,6 +68,23 @@ chmod +x scripts/run_local.sh
**MySQL 安装指南:** 详见 [docs/MYSQL_SETUP.md](docs/MYSQL_SETUP.md)
### Docker 构建加速(中国用户)
如果你在中国大陆Docker 构建速度可能较慢。我们提供了使用国内镜像的可选配置:
**详细指南:** 参见 [docs/CHINA_MIRROR_GUIDE.md](docs/CHINA_MIRROR_GUIDE.md)
**快速使用:**
```bash
# 后端使用中国镜像构建
docker build -f backend/Dockerfile.china -t qquiz-backend ./backend
# 前端使用中国镜像构建
docker build -f frontend/Dockerfile.china -t qquiz-frontend ./frontend
```
构建速度可提升 3-5 倍 ⚡
## 默认账户
**管理员账户:**
@@ -98,11 +117,13 @@ QQuiz/
│ ├── fix_and_start.bat # Windows 快速启动(推荐)
│ ├── start_with_docker_db.bat # Docker 数据库启动
│ ├── setup.bat # 环境配置脚本
── run_local.sh # Linux/macOS 启动脚本
── run_local.sh # Linux/macOS 启动脚本
│ └── [其他辅助脚本...]
├── docs/ # 文档目录
│ ├── QUICK_START.md # 快速入门指南
│ ├── WINDOWS_DEPLOYMENT.md # Windows 部署指南
│ ├── DOCKER_MIRROR_SETUP.md # Docker 镜像加速配置
│ ├── AI_CONFIGURATION.md # AI 提供商配置指南(重要)
│ ├── MYSQL_SETUP.md # MySQL 安装配置指南
│ ├── CHINA_MIRROR_GUIDE.md # 中国镜像加速指南
│ ├── WINDOWS_DEPLOYMENT.md # Windows 部署详细指南
│ └── PROJECT_STRUCTURE.md # 项目架构详解
├── test_data/ # 测试数据
│ └── sample_questions.txt # 示例题目
@@ -141,12 +162,51 @@ QQuiz/
|------|------|--------|
| `DATABASE_URL` | 数据库连接字符串 | - |
| `SECRET_KEY` | JWT 密钥 | - |
| `AI_PROVIDER` | AI 提供商 (openai/anthropic/qwen) | openai |
| `AI_PROVIDER` | AI 提供商 (gemini/openai/anthropic/qwen) | gemini |
| `GEMINI_API_KEY` | Google Gemini API 密钥 | - |
| `GEMINI_BASE_URL` | Gemini API 地址(可选,支持代理) | https://generativelanguage.googleapis.com |
| `GEMINI_MODEL` | Gemini 模型 | gemini-2.0-flash-exp |
| `OPENAI_API_KEY` | OpenAI API 密钥 | - |
| `OPENAI_BASE_URL` | OpenAI API 地址 | https://api.openai.com/v1 |
| `OPENAI_MODEL` | OpenAI 模型 | gpt-4o-mini |
| `ANTHROPIC_API_KEY` | Anthropic API 密钥 | - |
| `ANTHROPIC_MODEL` | Anthropic 模型 | claude-3-haiku-20240307 |
| `QWEN_API_KEY` | 通义千问 API 密钥 | - |
| `QWEN_BASE_URL` | 通义千问 API 地址 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| `QWEN_MODEL` | 通义千问模型 | qwen-plus |
| `ALLOW_REGISTRATION` | 是否允许注册 | true |
| `MAX_UPLOAD_SIZE_MB` | 最大上传文件大小 (MB) | 10 |
| `MAX_DAILY_UPLOADS` | 每日上传次数限制 | 20 |
### AI 提供商对比
| 提供商 | PDF 原生支持 | 文本解析 | 推荐度 | 说明 |
|--------|--------------|----------|--------|------|
| **Google Gemini** | ✅ | ✅ | ⭐⭐⭐⭐⭐ | 支持原生 PDF最多1000页保留图片、表格、公式 |
| OpenAI | ❌ | ✅ | ⭐⭐⭐⭐ | 仅文本提取PDF 会丢失格式和图片 |
| Anthropic | ❌ | ✅ | ⭐⭐⭐⭐ | 仅文本提取PDF 会丢失格式和图片 |
| Qwen (通义千问) | ❌ | ✅ | ⭐⭐⭐ | 仅文本提取PDF 会丢失格式和图片 |
**推荐使用 Gemini**:如果你的题库包含 PDF 文件(特别是含有图片、公式、表格的学科试卷),强烈推荐使用 Gemini。
### 如何获取 API Key
- **Google Gemini**: https://aistudio.google.com/apikey (免费额度充足)
- **OpenAI**: https://platform.openai.com/api-keys
- **Anthropic**: https://console.anthropic.com/settings/keys
- **Qwen (通义千问)**: https://dashscope.console.aliyun.com/apiKey
### AI 配置方式
QQuiz 支持两种配置方式:
1. **环境变量配置** (`.env` 文件):适合 Docker 部署和开发环境
2. **数据库配置** (管理员后台):适合生产环境,支持在线修改,无需重启服务
**推荐流程**:首次部署使用环境变量,部署成功后通过管理员后台修改配置。
**Gemini 自定义代理**: 如果需要使用 Key 轮训服务或代理,可以在管理员后台配置 `GEMINI_BASE_URL`,支持自定义 Gemini API 地址。
## 技术栈
**后端:**

View File

@@ -2,10 +2,9 @@ FROM python:3.11-slim
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
# Install system dependencies (gcc for compiling Python packages)
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements and install Python dependencies

32
backend/Dockerfile.china Normal file
View File

@@ -0,0 +1,32 @@
# Dockerfile with China mirrors for faster builds
# Usage: docker build -f Dockerfile.china -t qquiz-backend .
FROM python:3.11-slim
WORKDIR /app
# Use Alibaba Cloud mirror for faster apt-get
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources 2>/dev/null || \
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list || true
# Install system dependencies (gcc for compiling Python packages)
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements and install Python dependencies
COPY requirements.txt .
# Use Tsinghua PyPI mirror for faster pip install
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# Copy application code
COPY . .
# Create uploads directory
RUN mkdir -p uploads
# Expose port
EXPOSE 8000
# Run database migrations and start server
CMD alembic upgrade head && uvicorn main:app --host 0.0.0.0 --port 8000

View File

@@ -28,24 +28,19 @@ async def get_current_user(
headers={"WWW-Authenticate": "Bearer"},
)
print(f"🔍 Received token (first 50 chars): {token[:50] if token else 'None'}...")
# Decode token
payload = decode_access_token(token)
if payload is None:
print(f"❌ Token decode failed - Invalid or expired token")
raise credentials_exception
user_id = payload.get("sub")
if user_id is None:
print(f"❌ No 'sub' in payload: {payload}")
raise credentials_exception
# Convert user_id to int if it's a string
try:
user_id = int(user_id)
except (ValueError, TypeError):
print(f"❌ Invalid user_id format: {user_id}")
raise credentials_exception
# Get user from database
@@ -53,10 +48,8 @@ async def get_current_user(
user = result.scalar_one_or_none()
if user is None:
print(f"❌ User not found with id: {user_id}")
raise credentials_exception
print(f"✅ User authenticated: {user.username} (id={user.id})")
return user

View File

@@ -37,8 +37,6 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -
expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
to_encode.update({"exp": expire})
print(f"🔑 Creating token with SECRET_KEY (first 20 chars): {SECRET_KEY[:20]}...")
print(f"📦 Token payload: {to_encode}")
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
@@ -46,12 +44,9 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) -
def decode_access_token(token: str) -> Optional[dict]:
"""Decode a JWT access token"""
try:
print(f"🔑 SECRET_KEY (first 20 chars): {SECRET_KEY[:20]}...")
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
print(f"✅ Token decoded successfully: {payload}")
return payload
except JWTError as e:
print(f"❌ JWT decode error: {type(e).__name__}: {str(e)}")
except JWTError:
return None

201
docs/AI_CONFIGURATION.md Normal file
View File

@@ -0,0 +1,201 @@
# AI 提供商配置指南
QQuiz 支持多个 AI 提供商,推荐使用 Google Gemini 以获得最佳的 PDF 解析体验。
## 🌟 推荐Google Gemini
### 优势
-**原生 PDF 理解**:直接处理 PDF最多1000页完整保留图片、表格、公式
-**免费额度充足**:每天免费 15 次/分钟1500 次/天
-**多模态理解**:支持图片、图表、公式的理解
-**自定义代理**:支持配置自定义 Base URL 实现 Key 轮训等功能
### 获取 API Key
1. 访问 https://aistudio.google.com/apikey
2. 使用 Google 账号登录
3. 点击 "Create API Key"
4. 复制生成的 API Key格式`AIza...`
### 配置方式
#### 方式一:环境变量配置(推荐首次部署)
编辑 `.env` 文件:
```env
AI_PROVIDER=gemini
GEMINI_API_KEY=AIza-your-actual-gemini-api-key
GEMINI_BASE_URL=https://generativelanguage.googleapis.com
GEMINI_MODEL=gemini-2.0-flash-exp
```
#### 方式二:管理员后台配置(推荐生产环境)
1. 使用管理员账号登录默认admin / admin123
2. 进入"系统设置"
3. 选择 AI 提供商:"Google Gemini (推荐)"
4. 填入 API Key
5. 点击"保存所有设置"
**优势**:无需重启服务即可生效,支持在线修改配置
### 自定义 Gemini Base URL可选
如果需要使用 Key 轮训服务或代理(例如提高速度、负载均衡),可以配置自定义 Base URL
```env
# 使用自定义代理服务
GEMINI_BASE_URL=https://your-proxy-service.com/proxy/gemini-self
```
**使用场景**
- Key 轮训(多个 API Key 负载均衡)
- 国内加速代理
- 自建中转服务
---
## 其他 AI 提供商
### OpenAI (GPT)
**限制**:⚠️ 仅支持文本解析PDF 文件会通过文本提取处理,丢失图片和格式信息
#### 获取 API Key
- 访问https://platform.openai.com/api-keys
- 创建新的 Secret Key
#### 配置
```env
AI_PROVIDER=openai
OPENAI_API_KEY=sk-your-openai-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
```
**推荐模型**
- `gpt-4o-mini`(推荐,性价比高)
- `gpt-4o`(最强,成本高)
- `gpt-3.5-turbo`(便宜,效果一般)
---
### Anthropic (Claude)
**限制**:⚠️ 仅支持文本解析PDF 文件会通过文本提取处理,丢失图片和格式信息
#### 获取 API Key
- 访问https://console.anthropic.com/settings/keys
- 创建新的 API Key
#### 配置
```env
AI_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-your-anthropic-api-key
ANTHROPIC_MODEL=claude-3-haiku-20240307
```
**推荐模型**
- `claude-3-haiku-20240307`(推荐,速度快)
- `claude-3-5-sonnet-20241022`(最强,成本高)
- `claude-3-opus-20240229`(超强,成本很高)
---
### Qwen (通义千问)
**限制**:⚠️ 仅支持文本解析PDF 文件会通过文本提取处理,丢失图片和格式信息
#### 获取 API Key
- 访问https://dashscope.console.aliyun.com/apiKey
- 使用阿里云账号登录
- 创建新的 API Key
#### 配置
```env
AI_PROVIDER=qwen
QWEN_API_KEY=sk-your-qwen-api-key
QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-plus
```
**推荐模型**
- `qwen-plus`(推荐,平衡)
- `qwen-max`(最强,成本高)
- `qwen-turbo`(快速,效果一般)
- `qwen-long`(超长文本支持)
---
## AI 提供商对比表
| 提供商 | PDF 原生支持 | 图片/表格/公式 | 文本解析 | 免费额度 | 推荐度 |
|--------|--------------|----------------|----------|----------|--------|
| **Google Gemini** | ✅ 支持 | ✅ 完整保留 | ✅ | ⭐⭐⭐⭐⭐ | 最推荐 |
| OpenAI (GPT) | ❌ 不支持 | ❌ 丢失 | ✅ | 💰 | ⭐⭐⭐⭐ |
| Anthropic (Claude) | ❌ 不支持 | ❌ 丢失 | ✅ | 💰 | ⭐⭐⭐⭐ |
| Qwen (通义千问) | ❌ 不支持 | ❌ 丢失 | ✅ | ✅ | ⭐⭐⭐ |
---
## 常见问题
### Q1: 如何判断 AI 提供商是否配置正确?
上传一个包含题目的文档,如果能成功解析出题目,说明配置正确。查看后端日志可以看到详细的解析过程。
### Q2: 可以同时配置多个 AI 提供商吗?
可以。配置多个提供商的 API Key通过 `AI_PROVIDER` 环境变量或管理员后台切换使用哪个提供商。
### Q3: Gemini 原生 PDF 处理和文本提取有什么区别?
- **原生 PDF 处理**GeminiAI 直接"看"PDF能识别图片中的文字、理解表格结构、识别数学公式
- **文本提取**(其他提供商):先用 PyPDF2/python-docx 提取纯文本,然后交给 AI丢失所有图片和格式
**示例**如果试卷中有带图的选择题Gemini 能理解图片内容并提取题目,其他提供商只能提取文字部分。
### Q4: Gemini 自定义 Base URL 有什么用?
- **场景一**:使用多个 API Key 的轮训服务,避免单个 Key 频率限制
- **场景二**:使用国内加速代理,提高访问速度
- **场景三**:自建中转服务,统一管理和监控 API 调用
**格式要求**Base URL 应该是完整的域名,例如 `https://your-service.com`,后端会自动拼接 `/v1beta/models/{model}:generateContent`
### Q5: 如果文档中没有提供答案怎么办?
QQuiz 会自动使用 AI 生成参考答案,标注为"AI参考答案"。这个功能对所有 AI 提供商都支持。
---
## 推荐配置方案
### 方案一:仅使用 Gemini推荐
```env
AI_PROVIDER=gemini
GEMINI_API_KEY=your-key
```
- ✅ 最佳 PDF 支持
- ✅ 免费额度充足
- ✅ 配置简单
### 方案二Gemini + OpenAI备用
```env
AI_PROVIDER=gemini
GEMINI_API_KEY=your-gemini-key
OPENAI_API_KEY=your-openai-key
```
- 主用 Gemini当遇到限制时手动切换到 OpenAI
### 方案三:全配置(多选)
配置所有提供商,根据需求灵活切换
---
**推荐流程**
1. 首次部署:使用 Gemini免费额度充足
2. 生产环境:使用管理员后台配置,支持在线切换
3. 高频使用:配置 Gemini 自定义 Base URL 使用 Key 轮训服务

124
docs/CHINA_MIRROR_GUIDE.md Normal file
View File

@@ -0,0 +1,124 @@
# 中国镜像加速指南
如果你在中国大陆Docker 构建速度可能很慢。我们提供了使用国内镜像的可选 Dockerfile。
## 使用方法
### 方法一:使用中国镜像版 Dockerfile推荐
```bash
# 构建后端(使用中国镜像)
cd backend
docker build -f Dockerfile.china -t qquiz-backend .
# 构建前端(使用中国镜像)
cd ../frontend
docker build -f Dockerfile.china -t qquiz-frontend .
# 或者一次性构建所有服务
docker-compose build
```
### 方法二:临时使用 Docker Compose 覆盖
创建 `docker-compose.override.yml`(已在 .gitignore 中):
```yaml
version: '3.8'
services:
backend:
build:
context: ./backend
dockerfile: Dockerfile.china
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.china
```
然后正常运行:
```bash
docker-compose up -d --build
```
### 方法三:配置 Docker Hub 镜像加速
编辑 Docker 配置文件:
- **Windows**: Docker Desktop → Settings → Docker Engine
- **Linux**: `/etc/docker/daemon.json`
添加以下内容:
```json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
```
重启 Docker 服务。
## 镜像源说明
### Dockerfile.china 使用的镜像源:
- **apt-get**: 阿里云镜像 (mirrors.aliyun.com)
- **pip**: 清华大学镜像 (pypi.tuna.tsinghua.edu.cn)
- **npm**: 淘宝镜像 (registry.npmmirror.com)
### 其他可选镜像源:
**Python PyPI:**
- 清华https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云https://mirrors.aliyun.com/pypi/simple/
- 中科大https://pypi.mirrors.ustc.edu.cn/simple/
**Node.js npm:**
- 淘宝https://registry.npmmirror.com
- 华为云https://repo.huaweicloud.com/repository/npm/
**Debian/Ubuntu apt:**
- 阿里云mirrors.aliyun.com
- 清华mirrors.tuna.tsinghua.edu.cn
- 中科大mirrors.ustc.edu.cn
## 注意事项
⚠️ **不要提交 docker-compose.override.yml 到 Git**
⚠️ **Dockerfile.china 仅供中国大陆用户使用**
⚠️ **国际用户请使用默认的 Dockerfile**
## 速度对比
| 构建步骤 | 默认源 | 中国镜像 | 加速比 |
|---------|--------|---------|--------|
| apt-get update | 30-60s | 5-10s | 3-6x |
| pip install | 3-5min | 30-60s | 3-5x |
| npm install | 2-4min | 30-60s | 2-4x |
| **总计** | **5-10min** | **1-3min** | **3-5x** |
## 故障排除
### 如果镜像源失效
1. 尝试其他镜像源(见上方"其他可选镜像源"
2. 检查镜像源是否可访问:
```bash
# 测试 PyPI 镜像
curl -I https://pypi.tuna.tsinghua.edu.cn/simple
# 测试 npm 镜像
curl -I https://registry.npmmirror.com
```
3. 如果所有镜像都不可用,使用默认的 Dockerfile
### 如果构建仍然很慢
1. 检查 Docker Desktop 内存分配(建议 ≥ 4GB
2. 清理 Docker 缓存:`docker system prune -a`
3. 使用 BuildKit`DOCKER_BUILDKIT=1 docker-compose build`

View File

@@ -1,376 +0,0 @@
# QQuiz 部署指南
## 🚀 快速开始
### 方式一Docker Compose推荐
这是最简单的部署方式,适合快速体验和生产环境。
```bash
# 1. 配置环境变量
cp .env.example .env
# 2. 编辑 .env 文件,填入必要配置
# 必填项:
# - SECRET_KEY: JWT 密钥(至少 32 字符)
# - OPENAI_API_KEY: OpenAI API 密钥(或其他 AI 提供商)
# 3. 启动所有服务
docker-compose up -d
# 4. 查看日志
docker-compose logs -f
# 5. 访问应用
# 前端http://localhost:3000
# 后端http://localhost:8000
# API 文档http://localhost:8000/docs
```
### 方式二:本地源码运行
适合开发环境和自定义部署。
#### 前置要求
- Python 3.11+
- Node.js 18+
- PostgreSQL 15+
#### 步骤
**1. 安装并启动 PostgreSQL**
```bash
# macOS
brew install postgresql@15
brew services start postgresql@15
# Ubuntu/Debian
sudo apt install postgresql-15
sudo systemctl start postgresql
# Windows
# 下载并安装 PostgreSQL 官方安装包
```
**2. 创建数据库**
```bash
psql -U postgres
CREATE DATABASE qquiz_db;
CREATE USER qquiz WITH PASSWORD 'qquiz_password';
GRANT ALL PRIVILEGES ON DATABASE qquiz_db TO qquiz;
\q
```
**3. 配置环境变量**
```bash
cp .env.example .env
```
编辑 `.env` 文件:
```env
# 数据库(本地部署)
DATABASE_URL=postgresql+asyncpg://qquiz:qquiz_password@localhost:5432/qquiz_db
# JWT 密钥(必须修改!)
SECRET_KEY=your-very-long-secret-key-at-least-32-characters-long
# AI 提供商(选择一个)
AI_PROVIDER=openai
OPENAI_API_KEY=sk-your-openai-api-key
OPENAI_MODEL=gpt-4o-mini
# 或者使用其他提供商
# AI_PROVIDER=anthropic
# ANTHROPIC_API_KEY=sk-ant-your-key
# ANTHROPIC_MODEL=claude-3-haiku-20240307
# AI_PROVIDER=qwen
# QWEN_API_KEY=sk-your-key
# QWEN_MODEL=qwen-plus
```
**4. 启动后端**
```bash
cd backend
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
# 运行数据库迁移
alembic upgrade head
# 启动服务
uvicorn main:app --reload
```
**5. 启动前端**
打开新终端:
```bash
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm start
```
**6. 访问应用**
- 前端http://localhost:3000
- 后端http://localhost:8000
- API 文档http://localhost:8000/docs
---
## 🔐 默认账户
首次启动后,系统会自动创建管理员账户:
- **用户名:** `admin`
- **密码:** `admin123`
⚠️ **重要:** 首次登录后请立即修改密码!
---
## ⚙️ 配置说明
### 必填配置
| 配置项 | 说明 | 示例 |
|--------|------|------|
| `DATABASE_URL` | 数据库连接字符串 | `postgresql+asyncpg://user:pass@host:5432/db` |
| `SECRET_KEY` | JWT 密钥(至少 32 字符) | `your-super-secret-key-change-in-production` |
| `OPENAI_API_KEY` | OpenAI API 密钥 | `sk-...` |
### 可选配置
| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| `ALLOW_REGISTRATION` | 是否允许用户注册 | `true` |
| `MAX_UPLOAD_SIZE_MB` | 最大上传文件大小MB | `10` |
| `MAX_DAILY_UPLOADS` | 每日上传次数限制 | `20` |
| `AI_PROVIDER` | AI 提供商 | `openai` |
### AI 提供商配置
#### OpenAI
```env
AI_PROVIDER=openai
OPENAI_API_KEY=sk-your-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
```
#### Anthropic Claude
```env
AI_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-your-key
ANTHROPIC_MODEL=claude-3-haiku-20240307
```
#### 通义千问 (Qwen)
```env
AI_PROVIDER=qwen
QWEN_API_KEY=sk-your-key
QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
QWEN_MODEL=qwen-plus
```
---
## 📋 使用流程
### 1. 创建题库
1. 登录后进入「题库管理」
2. 点击「创建题库」
3. 输入题库名称
4. 上传题目文档(支持 TXT/PDF/DOCX/XLSX
5. 等待 AI 解析完成(状态会自动刷新)
### 2. 追加题目
1. 进入题库详情页
2. 点击「添加题目文档」
3. 上传新文档
4. 系统会自动解析并去重
### 3. 开始刷题
1. 题库状态为「就绪」后,点击「开始刷题」或「继续刷题」
2. 选择答案并提交
3. 查看解析和正确答案
4. 点击「下一题」继续
### 4. 错题本
- 答错的题目会自动加入错题本
- 可以手动添加或移除题目
- 在错题本中复习和巩固
---
## 🛠️ 常见问题
### Q: 文档解析失败?
**A:** 检查以下几点:
1. AI API Key 是否正确配置
2. 文档格式是否支持
3. 文档内容是否包含题目
4. 查看后端日志获取详细错误信息
### Q: 如何修改上传限制?
**A:** 在「系统设置」中修改:
- 最大文件大小
- 每日上传次数
或直接修改 `.env` 文件:
```env
MAX_UPLOAD_SIZE_MB=20
MAX_DAILY_UPLOADS=50
```
### Q: 如何更换 AI 提供商?
**A:** 修改 `.env` 文件中的 `AI_PROVIDER` 和对应的 API Key
```env
AI_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-your-key
```
### Q: 如何备份数据?
**A:** 备份 PostgreSQL 数据库:
```bash
# Docker 环境
docker exec qquiz_postgres pg_dump -U qquiz qquiz_db > backup.sql
# 本地环境
pg_dump -U qquiz qquiz_db > backup.sql
```
### Q: 如何关闭用户注册?
**A:** 在「系统设置」中关闭「允许用户注册」,或修改 `.env`
```env
ALLOW_REGISTRATION=false
```
---
## 📊 生产环境建议
### 安全配置
1. **更改默认密码**
- 首次登录后立即修改 `admin` 账户密码
2. **生成强密钥**
```bash
# 生成随机密钥
openssl rand -hex 32
```
3. **配置 HTTPS**
- 使用 Nginx 或 Caddy 作为反向代理
- 配置 SSL 证书
4. **限制 CORS**
```env
CORS_ORIGINS=https://yourdomain.com
```
### 性能优化
1. **数据库连接池**
- 根据负载调整连接池大小
2. **文件存储**
- 考虑使用对象存储(如 S3替代本地存储
3. **缓存**
- 使用 Redis 缓存频繁查询的数据
### 监控和日志
1. **日志收集**
```bash
# 查看 Docker 日志
docker-compose logs -f backend
# 保存日志到文件
docker-compose logs backend > backend.log
```
2. **健康检查**
- 访问 `http://localhost:8000/health` 检查服务状态
---
## 🐛 故障排查
### 后端无法启动
```bash
# 检查数据库连接
psql -U qquiz -d qquiz_db
# 检查端口占用
lsof -i :8000
# 查看详细日志
uvicorn main:app --reload --log-level debug
```
### 前端无法访问
```bash
# 检查端口占用
lsof -i :3000
# 清除缓存重新安装
rm -rf node_modules package-lock.json
npm install
```
### Docker 容器无法启动
```bash
# 查看容器状态
docker-compose ps
# 查看特定容器日志
docker-compose logs backend
# 重新构建
docker-compose build --no-cache
docker-compose up -d
```
---
## 📞 获取帮助
- GitHub Issues: [报告问题](https://github.com/your-repo/qquiz/issues)
- 文档: [README.md](./README.md)
- API 文档: http://localhost:8000/docs
---
## 📄 许可证
MIT License

View File

@@ -1,199 +0,0 @@
# Docker 镜像加速器配置指南
## 问题描述
错误信息:`failed to resolve reference "docker.io/library/postgres:15-alpine"`
**原因**:无法访问 Docker Hub需要配置国内镜像加速器。
---
## 解决方案一:配置 Docker Desktop 镜像加速(推荐)
### 方法 1使用阿里云镜像加速器
1. **打开 Docker Desktop**
2. **进入设置**
- 点击右上角齿轮图标 ⚙️
- 选择 "Docker Engine"
3. **添加镜像加速器配置**
在 JSON 配置中添加以下内容:
```json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
```
4. **应用并重启**
- 点击 "Apply & Restart"
- 等待 Docker Desktop 重启完成
5. **验证配置**
```powershell
docker info | findstr "Registry Mirrors"
```
应该看到配置的镜像地址。
---
## 解决方案二:手动拉取镜像(临时方案)
如果配置镜像加速器后仍然失败,可以手动拉取镜像:
```powershell
# 尝试使用不同的镜像源拉取
docker pull docker.mirrors.ustc.edu.cn/library/postgres:15-alpine
docker tag docker.mirrors.ustc.edu.cn/library/postgres:15-alpine postgres:15-alpine
docker pull docker.mirrors.ustc.edu.cn/library/node:18-alpine
docker tag docker.mirrors.ustc.edu.cn/library/node:18-alpine node:18-alpine
docker pull docker.mirrors.ustc.edu.cn/library/python:3.11-slim
docker tag docker.mirrors.ustc.edu.cn/library/python:3.11-slim python:3.11-slim
```
---
## 解决方案三:使用国内可用的基础镜像
修改 `docker-compose.yml` 使用国内镜像源:
```yaml
services:
postgres:
image: registry.cn-hangzhou.aliyuncs.com/library/postgres:15-alpine
# 或使用
# image: docker.mirrors.ustc.edu.cn/library/postgres:15-alpine
```
---
## 推荐配置(完整版)
### Docker Desktop 完整配置
```json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://dockerproxy.com"
],
"insecure-registries": [],
"debug": false
}
```
---
## 常用镜像加速器地址
| 提供商 | 镜像地址 | 说明 |
|--------|----------|------|
| 中科大 | https://docker.mirrors.ustc.edu.cn | 稳定,推荐 |
| 网易 | https://hub-mirror.c.163.com | 速度快 |
| 百度云 | https://mirror.baidubce.com | 国内访问快 |
| Docker Proxy | https://dockerproxy.com | 备用 |
---
## 验证是否成功
### 1. 检查配置
```powershell
docker info
```
查找 "Registry Mirrors" 部分,应该显示配置的镜像地址。
### 2. 测试拉取镜像
```powershell
docker pull hello-world
```
如果成功,说明镜像加速器配置正确。
### 3. 重新启动 QQuiz
```powershell
cd E:\QQuiz
docker-compose up -d
```
---
## 如果仍然失败
### 检查网络连接
```powershell
# 测试是否能访问镜像加速器
curl https://docker.mirrors.ustc.edu.cn
```
### 尝试其他镜像源
如果某个镜像源不可用,尝试注释掉它,只保留可用的:
```json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
```
### 检查防火墙/代理
- 暂时关闭防火墙测试
- 如果使用代理,在 Docker Desktop 设置中配置代理
---
## 完成后的下一步
配置成功后:
```powershell
# 1. 重新启动服务
cd E:\QQuiz
docker-compose down
docker-compose up -d
# 2. 查看启动日志
docker-compose logs -f
# 3. 访问应用
# http://localhost:3000
```
---
祝你成功!🎉

View File

@@ -1,214 +0,0 @@
# GitHub 推送指南
## 方式一:使用 Personal Access Token推荐
GitHub 已不再支持密码认证,需要使用 Personal Access Token (PAT)。
### 步骤 1创建 GitHub Personal Access Token
1. **访问 GitHub 设置**
- 登录 GitHub: https://github.com
- 点击右上角头像 → Settings
- 左侧菜单选择 **Developer settings**
- 选择 **Personal access tokens****Tokens (classic)**
- 点击 **Generate new token****Generate new token (classic)**
2. **配置 Token**
- Note: `QQuiz Deploy`
- Expiration: 选择过期时间(建议 90 days 或 No expiration
- 勾选权限:
-**repo** (完整仓库访问权限)
- 点击 **Generate token**
3. **保存 Token**
- ⚠️ **重要**:立即复制生成的 token它只会显示一次
- 格式类似:`ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
### 步骤 2配置 Git 凭据
**方式 A使用 Git Credential Manager推荐**
```powershell
# 配置凭据存储
git config --global credential.helper manager-core
# 首次推送时会弹出窗口,输入:
# Username: handsomezhuzhu
# Password: 粘贴你的 Personal Access Token
```
**方式 B直接在 URL 中使用 Token**
```powershell
cd E:\QQuiz
# 移除旧的 remote
git remote remove origin
# 添加包含 token 的 remote
git remote add origin https://ghp_YOUR_TOKEN_HERE@github.com/handsomezhuzhu/QQuiz.git
# 推送
git push -u origin main
```
`ghp_YOUR_TOKEN_HERE` 替换为你的实际 token。
### 步骤 3推送到 GitHub
```powershell
cd E:\QQuiz
# 推送代码
git push -u origin main
```
如果使用方式 A会弹出认证窗口输入
- **Username**: `handsomezhuzhu`
- **Password**: 粘贴你的 Personal Access Token
---
## 方式二:使用 SSH Key适合频繁推送
### 步骤 1生成 SSH Key
```powershell
# 生成新的 SSH Key
ssh-keygen -t ed25519 -C "your_email@example.com"
# 按提示操作:
# - 文件位置:直接回车(使用默认)
# - 密码:可以留空或设置密码
```
### 步骤 2添加 SSH Key 到 GitHub
```powershell
# 查看公钥
cat ~/.ssh/id_ed25519.pub
# 或在 Windows 上
type %USERPROFILE%\.ssh\id_ed25519.pub
```
复制输出的公钥(以 `ssh-ed25519` 开头)
1. 访问 GitHub Settings → SSH and GPG keys
2. 点击 **New SSH key**
3. Title: `QQuiz Dev PC`
4. Key: 粘贴公钥
5. 点击 **Add SSH key**
### 步骤 3修改 Remote 为 SSH
```powershell
cd E:\QQuiz
# 移除旧的 HTTPS remote
git remote remove origin
# 添加 SSH remote
git remote add origin git@github.com:handsomezhuzhu/QQuiz.git
# 推送
git push -u origin main
```
---
## 快速推送脚本
创建 `push_to_github.bat`
```batch
@echo off
echo Pushing to GitHub...
cd /d "%~dp0"
git add .
git status
echo.
set /p commit_msg="Enter commit message: "
git commit -m "%commit_msg%"
git push origin main
echo.
echo Done!
pause
```
---
## 验证推送成功
推送成功后:
1. 访问https://github.com/handsomezhuzhu/QQuiz
2. 应该能看到所有代码文件
3. 查看 Commits 历史
---
## 常见问题
### Q1: 推送失败 - Authentication failed
**原因**:密码认证已被 GitHub 禁用
**解决**:使用 Personal Access Token 或 SSH Key
### Q2: 推送被拒绝 - Updates were rejected
```
! [rejected] main -> main (fetch first)
```
**解决**
```powershell
# 拉取远程更改
git pull origin main --allow-unrelated-histories
# 再次推送
git push -u origin main
```
### Q3: 推送很慢
**解决**:配置代理(如果使用 VPN
```powershell
# 设置 HTTP 代理
git config --global http.proxy http://127.0.0.1:7890
# 取消代理
git config --global --unset http.proxy
```
---
## 后续推送
首次推送成功后,以后只需:
```powershell
cd E:\QQuiz
# 查看更改
git status
# 添加文件
git add .
# 提交
git commit -m "your commit message"
# 推送
git push
```
---
祝你推送成功!🚀

View File

@@ -1,234 +0,0 @@
# 🚀 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。

View File

@@ -1,94 +0,0 @@
# QQuiz Quick Start Guide
## Step 1: Configure (30 seconds)
Double-click to run:
```
setup.bat
```
This will:
- Create `.env` file
- Open it in Notepad
- You need to replace `sk-your-openai-api-key-here` with your real OpenAI API key
**Where to get API key:**
- Visit: https://platform.openai.com/api-keys
- Create new secret key
- Copy and paste into `.env` file
## Step 2: Start Application (3-5 minutes)
Double-click to run:
```
start_app.bat
```
**PostgreSQL Password:**
- When prompted, enter your PostgreSQL password
- Default is usually: `postgres`
- Or just press Enter to try without password
The script will automatically:
- ✓ Check Python and Node.js
- ✓ Create database
- ✓ Install all dependencies
- ✓ Start backend (new window)
- ✓ Start frontend (new window)
## Step 3: Access System
Browser will open automatically: http://localhost:3000
**Login:**
- Username: `admin`
- Password: `admin123`
**Test the system:**
1. Click "题库管理" (Exam Management)
2. Click "创建题库" (Create Exam)
3. Enter name: `Test Exam`
4. Upload file: `test_data/sample_questions.txt`
5. Wait 10-30 seconds for AI to process
6. Click "开始刷题" (Start Quiz)
## What You'll See
✅ Beautiful login page
✅ Dashboard with statistics
✅ Create exam and upload documents
✅ AI processes questions automatically
✅ Quiz player with different question types
✅ Automatic mistake collection
✅ Progress tracking
## Troubleshooting
### Can't find PostgreSQL password
- Try: `postgres` or leave empty
- Or check PostgreSQL installation
### Port already in use
```cmd
netstat -ano | findstr :3000
taskkill /F /PID <PID>
```
### Dependencies install failed
- Check internet connection
- Script uses China mirrors for speed
## Success!
If you see the login page at http://localhost:3000 - congratulations! 🎉
The system is now running. You can:
- Create exam banks
- Upload documents (TXT/PDF/DOCX/XLSX)
- Start quizzing
- Review mistakes
- Track progress
---
Enjoy using QQuiz! 🚀

View File

@@ -1,64 +0,0 @@
==========================================
QQuiz 快速启动指南 (3步完成)
==========================================
【第1步】配置 OpenAI API Key
-------------------------------------------
1. 双击运行: quick_config.bat
2. 会自动打开记事本,找到这一行:
OPENAI_API_KEY=sk-your-openai-api-key-here
3. 将 "sk-your-openai-api-key-here" 替换为你的真实 API Key
4. 保存并关闭记事本
如果没有 API Key可以
- 去 https://platform.openai.com/api-keys 创建
- 或者暂时使用测试 Key功能受限
【第2步】启动系统
-------------------------------------------
双击运行: auto_setup_and_run.bat
脚本会自动:
✓ 检查 Python 和 Node.js
✓ 创建数据库
✓ 安装所有依赖
✓ 启动后端和前端
整个过程 3-5 分钟,请耐心等待
【第3步】访问系统
-------------------------------------------
浏览器打开: http://localhost:3000
默认账户:
用户名: admin
密码: admin123
【如果遇到问题】
-------------------------------------------
1. PostgreSQL 密码
- 脚本会询问 PostgreSQL 管理员密码
- 如果是首次安装,密码可能是你安装时设置的
- 常见默认密码: postgres 或 root
2. 数据库连接失败
- 确保 PostgreSQL 服务正在运行
- 打开"服务"查看 postgresql 服务状态
3. 端口被占用
- 3000/8000 端口可能被占用
- 关闭占用端口的程序重试
【测试数据】
-------------------------------------------
创建题库时可以上传:
test_data/sample_questions.txt
==========================================
准备好了吗现在开始第1步
==========================================

22
frontend/Dockerfile.china Normal file
View File

@@ -0,0 +1,22 @@
# Dockerfile with China mirrors for faster builds
# Usage: docker build -f Dockerfile.china -t qquiz-frontend .
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies using Taobao npm registry
RUN npm config set registry https://registry.npmmirror.com && \
npm install
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Start development server
CMD ["npm", "start"]

View File

@@ -98,9 +98,17 @@ export const ExamList = () => {
toast.success('题库创建成功,正在解析文档...')
setShowCreateModal(false)
setFormData({ title: '', file: null })
await loadExams()
// 跳转到新创建的试卷详情页
if (response.data && response.data.exam_id) {
navigate(`/exams/${response.data.exam_id}`)
} else {
// 如果没有返回 exam_id刷新列表
await loadExams()
}
} catch (error) {
console.error('Failed to create exam:', error)
toast.error('创建失败:' + (error.response?.data?.detail || error.message))
} finally {
setCreating(false)
}

View File

@@ -1,258 +0,0 @@
@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

View File

@@ -1,93 +0,0 @@
@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

View File

@@ -1,15 +0,0 @@
@echo off
chcp 65001 >nul
title QQuiz - 查看日志
cd /d "%~dp0.."
echo.
echo ==========================================
echo QQuiz 服务日志
echo ==========================================
echo.
echo 按 Ctrl+C 退出日志查看
echo.
docker-compose logs -f

View File

@@ -1,83 +0,0 @@
@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

View File

@@ -1,56 +0,0 @@
@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

View File

@@ -0,0 +1,48 @@
@echo off
chcp 65001 >nul
echo ========================================
echo 重新构建并启动后端服务
echo ========================================
echo.
cd /d "%~dp0.."
echo [1/3] 停止后端容器...
docker-compose stop backend
if %ERRORLEVEL% NEQ 0 (
echo ❌ 停止后端失败
pause
exit /b 1
)
echo ✅ 后端已停止
echo.
echo [2/3] 重新构建后端镜像(这可能需要几分钟)...
docker-compose build backend
if %ERRORLEVEL% NEQ 0 (
echo ❌ 构建失败
pause
exit /b 1
)
echo ✅ 构建完成
echo.
echo [3/3] 启动后端容器...
docker-compose up -d backend
if %ERRORLEVEL% NEQ 0 (
echo ❌ 启动失败
pause
exit /b 1
)
echo ✅ 后端已启动
echo.
echo ========================================
echo 重新构建完成!
echo ========================================
echo.
echo 现在可以查看后端日志:
echo docker-compose logs -f backend
echo.
echo 或者按任意键退出...
pause >nul

View File

@@ -1,47 +0,0 @@
@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

View File

@@ -1,56 +0,0 @@
@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

View File

@@ -1,117 +0,0 @@
@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

View File

@@ -1,44 +0,0 @@
@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

View File

@@ -1,94 +0,0 @@
@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

View File

@@ -1,134 +0,0 @@
@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

View File

@@ -0,0 +1,12 @@
@echo off
chcp 65001 >nul
echo ========================================
echo 实时查看后端日志
echo ========================================
echo.
echo 按 Ctrl+C 可以停止查看日志
echo.
cd /d "%~dp0.."
docker-compose logs -f backend