Files
012-kaopeilian/知识库/开发记录/双系统部署完成报告.md
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

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

408 lines
9.8 KiB
Markdown
Raw Permalink 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.
# 双系统部署完成报告
## 部署概览
**部署完成时间**: 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