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

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

9.8 KiB
Raw Blame History

双系统部署完成报告

部署概览

部署完成时间: 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缓存

访问地址

特点

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

二、开发系统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缓存

访问地址

特点

  • 完整热重载支持(前后端)
  • 代码修改实时生效
  • 独立的数据库和缓存
  • 完全隔离,不影响演示系统

三、系统隔离验证

网络隔离

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         # 指向生产容器

九、开发工作流

日常开发流程

  1. 访问开发环境

    https://kpl.ireborn.com.cn
    
  2. 修改代码

    • 前端: kaopeilian-frontend/src/
    • 后端: kaopeilian-backend/app/
  3. 观察效果

    • 前端: 浏览器自动刷新
    • 后端: 自动重启服务
  4. 调试工具

数据库管理

方式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

十一、安全注意事项

  1. 所有对外服务均使用HTTPS
  2. 数据库密码已配置(请定期更换)
  3. Redis未开放外网访问
  4. 开发环境与生产环境隔离
  5. ⚠️ 开发环境密码较简单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