# 双系统部署完成报告

## 部署概览

✅ **部署完成时间**: 2025年11月2日  
✅ **部署状态**: 成功

本次部署实现了两套完全隔离的考培练系统：
1. **演示系统**（aiedu.ireborn.com.cn）- 生产模式，无热重载
2. **开发系统**（kpl.ireborn.com.cn）- 开发模式，支持热重载

---

## 一、演示系统（aiedu.ireborn.com.cn）

### 系统配置
- **模式**: 生产模式（无热重载）
- **用途**: 对外演示系统
- **配置文件**: `docker-compose.yml`

### 容器列表
| 容器名 | 状态 | 端口映射 | 说明 |
|--------|------|----------|------|
| kaopeilian-nginx | ✅ 运行中 | 80, 443 | Nginx反向代理 |
| kaopeilian-frontend | ✅ 运行中 | 内部80 | 前端静态资源 |
| kaopeilian-backend | ✅ 运行中 | 8000 | 后端API服务 |
| kaopeilian-mysql | ✅ 运行中 | 3307 | MySQL数据库 |
| kaopeilian-redis | ✅ 运行中 | 6379 | Redis缓存 |

### 访问地址
- 🌐 **HTTPS访问**: https://aiedu.ireborn.com.cn
- 🔧 **后端API**: http://120.79.247.16:8000
- 🗄️ **MySQL**: 120.79.247.16:3307

### 特点
- ✅ 生产模式运行，稳定可靠
- ✅ 前端为构建后的静态资源
- ✅ 后端无热重载，性能优化
- ✅ 适合对外演示和测试

---

## 二、开发系统（kpl.ireborn.com.cn）

### 系统配置
- **模式**: 开发模式（支持热重载）
- **用途**: 瑞小美团队日常开发
- **配置文件**: `docker-compose.kpl.yml`

### 容器列表
| 容器名 | 状态 | 端口映射 | 说明 |
|--------|------|----------|------|
| kpl-frontend-dev | ✅ 运行中 | 3002→3001 | Vite开发服务器（HMR） |
| kpl-backend-dev | ✅ 运行中 | 8001→8000 | 后端开发服务器 |
| kpl-mysql-dev | ✅ 运行中 | 3308→3306 | MySQL数据库 |
| kpl-redis-dev | ✅ 运行中 | 6380→6379 | Redis缓存 |

### 访问地址
- 🌐 **HTTPS访问**: https://kpl.ireborn.com.cn
- 🖥️ **本地前端**: http://localhost:3002
- 🔧 **本地后端**: http://localhost:8001
- 📚 **API文档**: http://localhost:8001/docs
- 🗄️ **MySQL**: 120.79.247.16:3308
- 🔄 **Redis**: 120.79.247.16:6380

### 特点
- ✅ 完整热重载支持（前后端）
- ✅ 代码修改实时生效
- ✅ 独立的数据库和缓存
- ✅ 完全隔离，不影响演示系统

---

## 三、系统隔离验证

### 网络隔离
```
kaopeilian-network     - 演示系统专用网络
kpl-dev-network        - 开发系统专用网络
nginx                  - 连接两个网络，提供路由
```

### 数据隔离
| 资源 | 演示系统 | 开发系统 | 隔离状态 |
|------|----------|----------|----------|
| MySQL | 端口3307 | 端口3308 | ✅ 完全隔离 |
| Redis | 端口6379 | 端口6380 | ✅ 完全隔离 |
| 数据卷 | kaopeilian-mysql-data | kpl-mysql-dev-data | ✅ 完全隔离 |
| 网络 | kaopeilian-network | kpl-dev-network | ✅ 完全隔离 |

### 健康检查结果
```bash
# 演示系统后端
curl http://localhost:8000/health
{"status":"healthy","service":"考培练系统后端","version":"1.0.0"}

# 开发系统后端
curl http://localhost:8001/health
{"status":"healthy","service":"KaoPeiLian","version":"1.0.0"}
```

---

## 四、SSL证书配置

### 已申请证书
| 域名 | 证书状态 | 有效期至 | 证书路径 |
|------|----------|----------|----------|
| aiedu.ireborn.com.cn | ✅ 有效 | 原有证书 | /etc/letsencrypt/live/aiedu.ireborn.com.cn/ |
| kpl.ireborn.com.cn | ✅ 有效 | 2026-01-31 | /etc/letsencrypt/live/kpl.ireborn.com.cn/ |

### 证书自动续期
Certbot已配置自动续期，无需手动操作。

---

## 五、管理脚本

### KPL开发系统管理

#### 启动服务
```bash
cd /root/aiedu
./start-kpl.sh                  # 启动基础服务
./start-kpl.sh --with-admin     # 启动服务 + phpMyAdmin
```

#### 停止服务
```bash
./stop-kpl.sh                   # 停止服务，保留数据
./stop-kpl.sh --keep-data       # 停止服务，保留数据
```

#### 查看日志
```bash
# 查看所有日志
docker compose -f docker-compose.kpl.yml logs -f

# 查看特定服务日志
docker compose -f docker-compose.kpl.yml logs -f kpl-frontend-dev
docker compose -f docker-compose.kpl.yml logs -f kpl-backend-dev
```

#### 重启服务
```bash
# 重启特定服务
docker compose -f docker-compose.kpl.yml restart kpl-frontend-dev
docker compose -f docker-compose.kpl.yml restart kpl-backend-dev
```

### 演示系统管理

#### 查看状态
```bash
docker compose -f docker-compose.yml ps
```

#### 重启服务
```bash
docker compose -f docker-compose.yml restart [service_name]
```

---

## 六、热重载功能验证

### 前端热重载
- ✅ 使用Vite开发服务器
- ✅ 支持HMR（热模块替换）
- ✅ WebSocket连接正常
- ✅ 修改代码立即生效

**测试方法**：
```bash
# 1. 访问 https://kpl.ireborn.com.cn
# 2. 修改 kaopeilian-frontend/src/App.vue
# 3. 观察浏览器自动刷新
```

### 后端热重载
- ✅ 使用uvicorn --reload模式
- ✅ 监听/app/app目录
- ✅ Python文件修改自动重启
- ✅ 重启时间约2-3秒

**测试方法**：
```bash
# 1. 查看后端日志
docker compose -f docker-compose.kpl.yml logs -f kpl-backend-dev

# 2. 修改 kaopeilian-backend/app/main.py
# 3. 观察日志显示自动重启
```

---

## 七、端口分配总结

| 服务 | 演示系统端口 | 开发系统端口 | 说明 |
|------|--------------|--------------|------|
| HTTP | 80 | 80 | 共享（nginx） |
| HTTPS | 443 | 443 | 共享（nginx） |
| 前端 | 内部 | 3002 | 开发系统可本地访问 |
| 后端 | 8000 | 8001 | 两套系统独立 |
| MySQL | 3307 | 3308 | 完全隔离 |
| Redis | 6379 | 6380 | 完全隔离 |
| phpMyAdmin | - | 8081 | 仅开发系统 |

---

## 八、关键配置文件

### 新增文件
```
/root/aiedu/docker-compose.kpl.yml       # KPL系统配置
/root/aiedu/nginx/conf.d/kpl.conf        # KPL域名配置
/root/aiedu/start-kpl.sh                 # KPL启动脚本
/root/aiedu/stop-kpl.sh                  # KPL停止脚本
```

### 修改文件
```
/root/aiedu/docker-compose.yml                    # 添加kpl-dev-network
/root/aiedu/nginx/conf.d/kaopeilian.conf         # 指向生产容器
```

---

## 九、开发工作流

### 日常开发流程

1. **访问开发环境**
   ```
   https://kpl.ireborn.com.cn
   ```

2. **修改代码**
   - 前端: `kaopeilian-frontend/src/`
   - 后端: `kaopeilian-backend/app/`

3. **观察效果**
   - 前端: 浏览器自动刷新
   - 后端: 自动重启服务

4. **调试工具**
   - API文档: http://localhost:8001/docs
   - 浏览器DevTools
   - 容器日志

### 数据库管理

#### 方式1: 命令行
```bash
# 连接演示系统数据库
mysql -h 120.79.247.16 -P 3307 -u root -p'Kaopeilian2025!@#' kaopeilian

# 连接开发系统数据库
mysql -h 120.79.247.16 -P 3308 -u root -p'nj861021' kaopeilian
```

#### 方式2: phpMyAdmin
```bash
# 启动phpMyAdmin
docker compose -f docker-compose.kpl.yml --profile admin up -d

# 访问 http://localhost:8081
```

---

## 十、故障排查

### 域名访问返回403错误

**症状**: 访问 https://kpl.ireborn.com.cn 返回403 Forbidden

**原因**: Vite开发服务器的`allowedHosts`配置中缺少该域名

**解决方案**:
```bash
# 1. 编辑 vite.config.ts，在allowedHosts数组中添加域名
# 2. 重启前端容器
docker restart kpl-frontend-dev
```

### 容器无法启动
```bash
# 查看容器状态
docker ps -a

# 查看容器日志
docker logs <container_name>

# 重启容器
docker restart <container_name>
```

### 热重载不工作
```bash
# 检查文件挂载
docker inspect kpl-frontend-dev | grep Mounts -A 20

# 重启容器
docker compose -f docker-compose.kpl.yml restart kpl-frontend-dev
```

### Nginx配置错误
```bash
# 测试配置
docker exec kaopeilian-nginx nginx -t

# 重新加载配置
docker exec kaopeilian-nginx nginx -s reload
```

### 网络问题
```bash
# 检查网络
docker network ls
docker network inspect kpl-dev-network

# 重建网络（慎用）
docker compose -f docker-compose.kpl.yml down
docker network rm kpl-dev-network
docker network create kpl-dev-network
docker compose -f docker-compose.kpl.yml up -d
```

---

## 十一、安全注意事项

1. ✅ 所有对外服务均使用HTTPS
2. ✅ 数据库密码已配置（请定期更换）
3. ✅ Redis未开放外网访问
4. ✅ 开发环境与生产环境隔离
5. ⚠️ 开发环境密码较简单（nj861021），仅用于内网

---

## 十二、后续建议

### 短期（1周内）
- [ ] 测试所有功能模块是否正常
- [ ] 验证热重载在实际开发中的效果
- [ ] 团队成员熟悉新的开发环境

### 中期（1个月内）
- [ ] 根据使用情况优化资源配置
- [ ] 考虑添加监控和日志收集
- [ ] 完善备份策略

### 长期
- [ ] 考虑使用CI/CD自动化部署
- [ ] 增强安全配置（防火墙、访问控制）
- [ ] 性能优化和成本控制

---

## 附录：快速参考

### 常用命令速查
```bash
# 查看所有容器
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# 查看KPL系统日志
docker compose -f docker-compose.kpl.yml logs -f

# 重启nginx
docker restart kaopeilian-nginx

# 进入容器
docker exec -it kpl-backend-dev bash
docker exec -it kpl-mysql-dev mysql -uroot -p

# 清理未使用的资源
docker system prune -a
```

### 重要路径
```
配置文件：
  /root/aiedu/docker-compose.yml         # 演示系统
  /root/aiedu/docker-compose.kpl.yml     # 开发系统
  /root/aiedu/nginx/conf.d/              # Nginx配置

源代码：
  /root/aiedu/kaopeilian-frontend/       # 前端代码
  /root/aiedu/kaopeilian-backend/        # 后端代码

日志：
  /root/aiedu/kaopeilian-backend/logs/   # 后端日志
  /root/aiedu/kaopeilian-frontend/logs/  # 前端日志

证书：
  /etc/letsencrypt/live/                 # SSL证书
```

---

**部署人员**: AI Assistant  
**审核人员**: 待审核  
**部署日期**: 2025-11-02  
**报告版本**: 1.0

