Files
012-kaopeilian/知识库/kpl域名访问问题-已解决.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

173 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
## 当前状态
✅ 已完全解决 - 系统功能正常