- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
9.8 KiB
9.8 KiB
双系统部署完成报告
部署概览
✅ 部署完成时间: 2025年11月2日
✅ 部署状态: 成功
本次部署实现了两套完全隔离的考培练系统:
- 演示系统(aiedu.ireborn.com.cn)- 生产模式,无热重载
- 开发系统(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 | ✅ 完全隔离 |
健康检查结果
# 演示系统后端
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开发系统管理
启动服务
cd /root/aiedu
./start-kpl.sh # 启动基础服务
./start-kpl.sh --with-admin # 启动服务 + phpMyAdmin
停止服务
./stop-kpl.sh # 停止服务,保留数据
./stop-kpl.sh --keep-data # 停止服务,保留数据
查看日志
# 查看所有日志
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
重启服务
# 重启特定服务
docker compose -f docker-compose.kpl.yml restart kpl-frontend-dev
docker compose -f docker-compose.kpl.yml restart kpl-backend-dev
演示系统管理
查看状态
docker compose -f docker-compose.yml ps
重启服务
docker compose -f docker-compose.yml restart [service_name]
六、热重载功能验证
前端热重载
- ✅ 使用Vite开发服务器
- ✅ 支持HMR(热模块替换)
- ✅ WebSocket连接正常
- ✅ 修改代码立即生效
测试方法:
# 1. 访问 https://kpl.ireborn.com.cn
# 2. 修改 kaopeilian-frontend/src/App.vue
# 3. 观察浏览器自动刷新
后端热重载
- ✅ 使用uvicorn --reload模式
- ✅ 监听/app/app目录
- ✅ Python文件修改自动重启
- ✅ 重启时间约2-3秒
测试方法:
# 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 # 指向生产容器
九、开发工作流
日常开发流程
-
访问开发环境
https://kpl.ireborn.com.cn -
修改代码
- 前端:
kaopeilian-frontend/src/ - 后端:
kaopeilian-backend/app/
- 前端:
-
观察效果
- 前端: 浏览器自动刷新
- 后端: 自动重启服务
-
调试工具
- API文档: http://localhost:8001/docs
- 浏览器DevTools
- 容器日志
数据库管理
方式1: 命令行
# 连接演示系统数据库
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
# 启动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配置中缺少该域名
解决方案:
# 1. 编辑 vite.config.ts,在allowedHosts数组中添加域名
# 2. 重启前端容器
docker restart kpl-frontend-dev
容器无法启动
# 查看容器状态
docker ps -a
# 查看容器日志
docker logs <container_name>
# 重启容器
docker restart <container_name>
热重载不工作
# 检查文件挂载
docker inspect kpl-frontend-dev | grep Mounts -A 20
# 重启容器
docker compose -f docker-compose.kpl.yml restart kpl-frontend-dev
Nginx配置错误
# 测试配置
docker exec kaopeilian-nginx nginx -t
# 重新加载配置
docker exec kaopeilian-nginx nginx -s reload
网络问题
# 检查网络
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
十一、安全注意事项
- ✅ 所有对外服务均使用HTTPS
- ✅ 数据库密码已配置(请定期更换)
- ✅ Redis未开放外网访问
- ✅ 开发环境与生产环境隔离
- ⚠️ 开发环境密码较简单(nj861021),仅用于内网
十二、后续建议
短期(1周内)
- 测试所有功能模块是否正常
- 验证热重载在实际开发中的效果
- 团队成员熟悉新的开发环境
中期(1个月内)
- 根据使用情况优化资源配置
- 考虑添加监控和日志收集
- 完善备份策略
长期
- 考虑使用CI/CD自动化部署
- 增强安全配置(防火墙、访问控制)
- 性能优化和成本控制
附录:快速参考
常用命令速查
# 查看所有容器
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