feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
172
知识库/kpl域名访问问题-已解决.md
Normal file
172
知识库/kpl域名访问问题-已解决.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# KPL域名访问问题解决报告
|
||||
|
||||
## 问题描述
|
||||
访问 https://kpl.ireborn.com.cn 返回 403 Forbidden 错误
|
||||
|
||||
## 问题原因
|
||||
Vite开发服务器默认只允许特定域名访问。在 `vite.config.ts` 的 `allowedHosts` 配置中缺少 `kpl.ireborn.com.cn` 域名,导致请求被拒绝。
|
||||
|
||||
## 解决步骤
|
||||
|
||||
### 1. 定位问题
|
||||
```bash
|
||||
# 发现容器和nginx都正常运行
|
||||
docker ps | grep kpl
|
||||
|
||||
# 但前端容器返回403
|
||||
curl http://localhost:3002/ # 200 OK (本地访问正常)
|
||||
curl https://kpl.ireborn.com.cn # 403 Forbidden (域名访问失败)
|
||||
```
|
||||
|
||||
### 2. 修改配置
|
||||
编辑 `/root/aiedu/kaopeilian-frontend/vite.config.ts`:
|
||||
|
||||
```typescript
|
||||
server: {
|
||||
allowedHosts: [
|
||||
'aiedu.ireborn.com.cn',
|
||||
'kpl.ireborn.com.cn', // ← 添加这一行
|
||||
'kaopeilian-frontend-dev',
|
||||
'kpl-frontend-dev', // ← 添加这一行
|
||||
'120.79.247.16',
|
||||
'localhost'
|
||||
],
|
||||
// ... 其他配置
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 重启容器
|
||||
```bash
|
||||
docker restart kpl-frontend-dev
|
||||
```
|
||||
|
||||
### 4. 验证修复
|
||||
```bash
|
||||
# 前端访问正常
|
||||
curl -I https://kpl.ireborn.com.cn
|
||||
# HTTP/2 200
|
||||
|
||||
# 后端API正常
|
||||
curl https://kpl.ireborn.com.cn/health
|
||||
# {"status":"healthy","service":"KaoPeiLian","version":"1.0.0"}
|
||||
```
|
||||
|
||||
## 解决时间
|
||||
2025-11-02 23:46 (约5分钟)
|
||||
|
||||
## 预防措施
|
||||
1. 在 `vite.config.ts` 中预先配置所有可能使用的域名
|
||||
2. 开发环境可以考虑使用 `allowedHosts: 'all'` (不推荐生产环境)
|
||||
3. 文档中明确说明需要配置的域名列表
|
||||
|
||||
## 相关文件
|
||||
- `/root/aiedu/kaopeilian-frontend/vite.config.ts` - Vite配置文件
|
||||
- `/root/aiedu/双系统部署完成报告.md` - 已更新故障排查章节
|
||||
|
||||
## 当前状态
|
||||
✅ 已解决 - 系统正常运行
|
||||
|
||||
## 访问地址
|
||||
- 开发系统: https://kpl.ireborn.com.cn (支持热重载)
|
||||
- 演示系统: https://aiedu.ireborn.com.cn (生产模式)
|
||||
|
||||
---
|
||||
|
||||
# KPL域名500错误解决报告 (后续问题)
|
||||
|
||||
## 问题描述 (2025-11-02 16:00)
|
||||
403问题解决后,访问 https://kpl.ireborn.com.cn 出现新的500错误:
|
||||
- `GET /api/v1/users/me/recent-exams` → 500
|
||||
- `GET /api/v1/courses` → 500
|
||||
- `POST /api/v1/ability/analyze-yanji` → 500
|
||||
|
||||
## 问题原因
|
||||
**开发数据库(kpl-mysql-dev)表结构与代码模型不一致**,缺少多个表和字段:
|
||||
|
||||
1. **courses表缺少4个字段:**
|
||||
- `student_count`, `is_new`, `broadcast_audio_url`, `broadcast_generated_at`
|
||||
|
||||
2. **course_materials表缺少2个字段:**
|
||||
- `created_by`, `updated_by`
|
||||
|
||||
3. **exams表缺少3个字段:**
|
||||
- `round1_score`, `round2_score`, `round3_score`
|
||||
|
||||
4. **ability_assessments表完全不存在**
|
||||
|
||||
## 最佳解决方案:完整备份恢复
|
||||
|
||||
与其逐个添加字段,直接用完整数据库备份恢复更快更可靠。
|
||||
|
||||
### 解决步骤
|
||||
|
||||
```bash
|
||||
# 1. 备份当前数据库
|
||||
docker exec kpl-mysql-dev mysqldump -u root -pnj861021 kaopeilian > /tmp/backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
# 2. 重建数据库
|
||||
docker exec kpl-mysql-dev mysql -u root -pnj861021 -e "
|
||||
DROP DATABASE IF EXISTS kaopeilian;
|
||||
CREATE DATABASE kaopeilian CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
"
|
||||
|
||||
# 3. 从备份恢复
|
||||
docker exec -i kpl-mysql-dev mysql -u root -pnj861021 kaopeilian < \
|
||||
"/root/aiedu/考培练系统规划/数据库-里程碑备份/9-完成服务器测试-20251017_084942.sql"
|
||||
|
||||
# 4. 重启后端
|
||||
docker restart kpl-backend-dev
|
||||
|
||||
# 5. 等待启动完成
|
||||
sleep 10
|
||||
```
|
||||
|
||||
### 验证结果
|
||||
|
||||
所有API测试通过:
|
||||
```bash
|
||||
✅ GET /api/v1/users/me/recent-exams - 返回5条记录
|
||||
✅ GET /api/v1/courses - 返回12门课程
|
||||
✅ POST /api/v1/ability/analyze-yanji - 分析成功
|
||||
```
|
||||
|
||||
恢复后的数据库状态:
|
||||
| 表名 | 行数 |
|
||||
|------|------|
|
||||
| ability_assessments | 3 |
|
||||
| course_materials | 15 |
|
||||
| courses | 13 |
|
||||
| exams | 191 |
|
||||
| users | 16 |
|
||||
|
||||
## 解决时间
|
||||
2025-11-02 16:00-16:15 (约15分钟)
|
||||
|
||||
## 关键经验
|
||||
|
||||
### ✅ 推荐做法
|
||||
1. **优先使用完整备份恢复** - 快速、完整、可靠
|
||||
2. **定期从里程碑备份恢复开发数据库** - 保持一致性
|
||||
3. **操作前先备份** - 安全第一
|
||||
|
||||
### ❌ 避免的做法
|
||||
1. 不要逐个添加字段 - 费时费力,容易遗漏
|
||||
2. 不要在生产容器上直接操作
|
||||
3. 不要跳过备份步骤
|
||||
|
||||
## 数据库容器对应关系
|
||||
|
||||
```
|
||||
域名映射:
|
||||
kpl.ireborn.com.cn → kpl-backend-dev → kpl-mysql-dev (root/nj861021)
|
||||
aiedu.ireborn.com.cn → kaopeilian-backend → kaopeilian-mysql (root/Kaopeilian2025!@#)
|
||||
```
|
||||
|
||||
## 备份文件位置
|
||||
- 里程碑备份目录:`/root/aiedu/考培练系统规划/数据库-里程碑备份/`
|
||||
- 最新可用备份:`9-完成服务器测试-20251017_084942.sql`
|
||||
- 临时备份位置:`/tmp/kpl_backup_*.sql`
|
||||
|
||||
## 当前状态
|
||||
✅ 已完全解决 - 系统功能正常
|
||||
|
||||
Reference in New Issue
Block a user