- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
25 KiB
考培练系统 - 部署架构(统一版)
更新日期:2026-01-18(新增 SaaS 超级管理后台,统一租户配置管理)
本文档描述了考培练系统的统一部署架构,实现代码热重载和快速更新。
核心特性:
- 前后端均采用共享代码方案,一次构建/修改,全部租户同步更新
- 新增:SaaS 超级管理后台,统一管理所有租户配置、AI提示词、功能开关
一、架构概览
┌─────────────────────────────────────┐
│ kaopeilian-nginx │
│ (入口反向代理服务器) │
│ 80/443 端口 │
└───────────────┬─────────────────────┘
│
┌───────────────────────────────┼───────────────────────────────┐
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│管理后台 │ │ 演示版 │ │ 多客户版 │ │ 瑞小美 │ │陪练试用版 │
│admin.* │ │ aiedu.* │ │yy/hl/xy.. │ │ kpl.* │ │ pl.* │
└─────────┘ └───────────┘ └───────────┘ └───────────┘ └───────────┘
│
▼
┌─────────────┐
│kaopeilian_ │
│admin (管理库)│
└─────────────┘
二、容器清单
2.1 基础设施层
| 容器名称 | 镜像 | 端口 | 说明 |
|---|---|---|---|
| kaopeilian-nginx | nginx:1.25-alpine | 80, 443 | 入口反向代理 |
| kaopeilian-mysql | mysql:8.0.43 | 3307 | 演示版数据库 |
| kaopeilian-redis | redis:7.2-alpine | 6379 | 演示版 Redis |
| kpl-mysql-dev | mysql:8.0.43 | 3308 | 瑞小美数据库 |
| kpl-redis-dev | redis:7.2-alpine | 6380 | 瑞小美 Redis |
| prod-mysql | mysql:8.0.43 | 3309 | 多客户共享数据库 |
| peilian-mysql | mysql:8.0.43 | 3310 | 陪练试用版数据库 |
| peilian-redis | redis:7.2-alpine | 6382 | 陪练试用版 Redis |
2.2 前端层(共享 dist 方案)
所有前端容器使用同一个 kaopeilian-frontend:shared 镜像,挂载共享的 dist 目录:
| 容器名称 | 对应域名 | 端口 | 说明 |
|---|---|---|---|
| kaopeilian-frontend | aiedu.ireborn.com.cn | - | 演示版(无外部端口映射) |
| kpl-frontend-dev | kpl.ireborn.com.cn | 3002:80 | 瑞小美 |
| hua-frontend | hua.ireborn.com.cn | 3010:80 | 华尔倍丽 |
| yy-frontend | yy.ireborn.com.cn | 3011:80 | 杨扬宠物 |
| hl-frontend | hl.ireborn.com.cn | 3012:80 | 武汉禾丽 |
| xy-frontend | xy.ireborn.com.cn | 3013:80 | 芯颜定制 |
| fw-frontend | fw.ireborn.com.cn | 3014:80 | 飞沃 |
| ex-frontend | ex.ireborn.com.cn | 3015:80 | 恩喜成都总院 |
独立部署前端
| 容器名称 | 对应域名 | 端口 | 说明 |
|---|---|---|---|
| peilian-frontend | pl.ireborn.com.cn | 3020:3000 | 陪练试用版(独立代码库) |
共享前端配置说明:
- 镜像:
kaopeilian-frontend:shared(仅含 nginx,不含代码) - 挂载:
/root/aiedu/kaopeilian-frontend/dist:/usr/share/nginx/html:ro - 原理:前端代码使用
window.location.origin动态获取 API 地址,支持多域名部署 - 优势:一次
npm run build(约3分钟),8 个租户同时更新 - 配置文件:
/root/aiedu/docker-compose.prod-multi.yml(所有租户前端配置已统一)
2.3 后端层(代码热重载)
所有后端容器挂载同一个代码目录,实现统一代码管理:
| 容器名称 | 对应域名 | 端口 | 数据库 |
|---|---|---|---|
| kaopeilian-backend | aiedu.ireborn.com.cn | 8000 | kaopeilian-mysql |
| kpl-backend-dev | kpl.ireborn.com.cn | 8001 | kpl-mysql-dev |
| hua-backend | hua.ireborn.com.cn | 8010 | prod-mysql |
| yy-backend | yy.ireborn.com.cn | 8011 | prod-mysql |
| hl-backend | hl.ireborn.com.cn | 8012 | prod-mysql |
| xy-backend | xy.ireborn.com.cn | 8013 | prod-mysql |
| fw-backend | fw.ireborn.com.cn | 8014 | prod-mysql |
| ex-backend | ex.ireborn.com.cn | 8015 | prod-mysql |
| peilian-backend | pl.ireborn.com.cn | 8020 | peilian-mysql |
共享配置:
- 代码目录:
/root/aiedu/kaopeilian-backend/app:/app/app - 启动命令:
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
2.4 Redis 缓存层
| 容器名称 | 端口 | 对应租户 |
|---|---|---|
| kaopeilian-redis | 6379 | 演示版 |
| kpl-redis-dev | 6380 | 瑞小美 |
| peilian-redis | 6382 | 陪练试用版 |
| hua-redis | 6390 | 华尔倍丽 |
| yy-redis | 6391 | 杨扬宠物 |
| hl-redis | 6392 | 武汉禾丽 |
| xy-redis | 6393 | 芯颜定制 |
| fw-redis | 6394 | 飞沃 |
| ex-redis | 6395 | 恩喜成都总院 |
三、代码更新方式
3.1 后端代码更新
方式:自动热重载
直接修改 /root/aiedu/kaopeilian-backend/app/ 下的文件,所有后端容器会自动检测变更并重载。
# 示例:修改 admin.py
vim /root/aiedu/kaopeilian-backend/app/api/v1/admin.py
# 保存后自动生效,无需任何操作
3.2 前端代码更新
方式:一次构建,全部更新
cd /root/aiedu/kaopeilian-frontend && npm run build
构建完成后,所有共享前端容器自动提供最新的静态文件,无需重启。
四、配置文件位置
4.1 Docker Compose 文件
| 文件 | 说明 |
|---|---|
/root/aiedu/docker-compose.yml |
演示版(含 Nginx) |
/root/aiedu/docker-compose.kpl.yml |
瑞小美后端 |
/root/aiedu/docker-compose.prod-multi.yml |
多客户前端 + 后端 + Redis(已统一,推荐) |
重要:2026-01-17 已将所有租户前端配置统一到
docker-compose.prod-multi.yml,使用共享 dist 挂载方式。
4.2 Nginx 配置
| 文件 | 对应域名 |
|---|---|
/root/aiedu/nginx/conf.d/kaopeilian.conf |
aiedu.ireborn.com.cn |
/root/aiedu/nginx/conf.d/kpl.conf |
kpl.ireborn.com.cn |
/root/aiedu/nginx/conf.d/pl.conf |
pl.ireborn.com.cn |
/root/aiedu/nginx/conf.d/yy.conf |
yy.ireborn.com.cn |
/root/aiedu/nginx/conf.d/hl.conf |
hl.ireborn.com.cn |
/root/aiedu/nginx/conf.d/xy.conf |
xy.ireborn.com.cn |
/root/aiedu/nginx/conf.d/fw.conf |
fw.ireborn.com.cn |
/root/aiedu/nginx/conf.d/hua.conf |
hua.ireborn.com.cn |
/root/aiedu/nginx/conf.d/ex.conf |
ex.ireborn.com.cn |
4.3 环境变量文件
| 文件 | 说明 |
|---|---|
/root/aiedu/kaopeilian-backend/.env.production |
演示版 |
/data/prod-envs/kaopeilian-backend/.env.yy |
杨扬宠物 |
/data/prod-envs/kaopeilian-backend/.env.hl |
武汉禾丽 |
/data/prod-envs/kaopeilian-backend/.env.xy |
芯颜定制 |
/data/prod-envs/kaopeilian-backend/.env.fw |
飞沃 |
/data/prod-envs/kaopeilian-backend/.env.hua |
华尔倍丽 |
/data/prod-envs/kaopeilian-backend/.env.ex |
恩喜成都总院 |
五、常用运维命令
5.1 查看容器状态
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | sort
5.2 重启后端(热重载失效时)
# 重启所有后端
docker restart kaopeilian-backend kpl-backend-dev yy-backend hl-backend xy-backend fw-backend hua-backend peilian-backend
5.3 更新前端(共享 dist 方案)
# 一次构建,所有 8 个租户自动更新
cd /root/aiedu/kaopeilian-frontend && npm run build
# 如需强制刷新,可重启前端容器(通常不需要)
cd /root/aiedu && docker compose -f docker-compose.prod-multi.yml restart hua-frontend yy-frontend hl-frontend xy-frontend fw-frontend
5.4 重新加载 Nginx
docker exec kaopeilian-nginx nginx -s reload
5.5 查看后端日志
# 指定租户
docker logs -f yy-backend --tail 100
# 所有后端
for c in kaopeilian-backend kpl-backend-dev yy-backend hl-backend xy-backend fw-backend hua-backend peilian-backend; do
echo "=== $c ===" && docker logs $c --tail 5
done
5.6 启动多客户服务(前端+后端+Redis)
cd /root/aiedu && docker compose -f docker-compose.prod-multi.yml up -d
5.7 验证前端统一部署状态
# 检查所有前端容器是否使用共享 dist 目录
for c in ex-frontend kpl-frontend-dev kaopeilian-frontend hl-frontend xy-frontend hua-frontend yy-frontend fw-frontend; do
mount=$(docker inspect $c --format='{{range .Mounts}}{{if eq .Destination "/usr/share/nginx/html"}}{{.Source}}{{end}}{{end}}' 2>/dev/null)
status=$(docker inspect $c --format='{{.State.Health.Status}}' 2>/dev/null)
echo "$c: $mount ($status)"
done
六、数据库连接信息
6.1 演示版数据库
- 主机:kaopeilian-mysql(内部)/ 120.79.247.16:3307(外部)
- 数据库:kaopeilian
- 用户:root
- 密码:nj861021
6.2 瑞小美数据库
- 主机:kpl-mysql-dev(内部)/ 120.79.247.16:3308(外部)
- 数据库:kaopeilian
- 用户:root
- 密码:nj861021
6.3 多客户共享数据库
- 主机:prod-mysql(内部)/ 120.79.247.16:3309(外部)
- 各租户独立数据库:kaopeilian_yy, kaopeilian_hl, kaopeilian_xy, kaopeilian_fw, kaopeilian_hua, kaopeilian_ex
- 用户:root
- 密码:ProdMySQL2025!@#
6.4 陪练试用版数据库
- 主机:peilian-mysql(内部)/ 120.79.247.16:3310(外部)
- 数据库:peilian
- 用户:root
- 密码:nj861021
七、架构优势
| 特性 | 说明 |
|---|---|
| 代码统一 | 所有租户共享同一份前端和后端代码 |
| 后端热重载 | 修改代码自动生效,无需重启 |
| 前端快速更新 | 一次构建(约3分钟),8 个租户同时更新 |
| 配置隔离 | 各租户通过独立的 .env 文件和数据库隔离 |
| 版本一致性 | 所有租户始终使用相同版本,避免版本不一致问题 |
| 磁盘节省 | 共享 1 份 dist(~30MB),而非 8 个独立镜像(~800MB) |
| 易于维护 | 统一的代码库,便于问题排查和功能迭代 |
共享前端方案注意事项
- 更新流程:修改代码 →
pnpm run build→ 自动生效 - 回滚方法:备份 dist 目录
cp -r dist dist.backup,回滚时恢复即可 - 无需重启:构建完成后,nginx 自动提供新文件,用户刷新页面即可
- 浏览器缓存:HTML 文件设置为不缓存,JS/CSS 带 hash 可长期缓存
7.5 Docker Compose 部署规范
参考:《瑞小美系统技术栈标准与字符标准.md》
镜像版本
禁用 latest 标签,必须使用具体版本号:
# ❌ 错误
image: kaopeilian-admin-frontend:latest
# ✅ 正确
image: kaopeilian-admin-frontend:1.0.0
日志配置(必须)
所有容器必须配置日志轮转:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
资源限制(必须)
| 容器类型 | 内存限制 | 说明 |
|---|---|---|
| 前端容器 | 256M-512M | Nginx 静态文件服务 |
| 后端容器 | 512M-1G | FastAPI 业务服务 |
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
敏感信息管理
禁止硬编码密码,使用 env_file 方式:
# ❌ 错误
environment:
- ADMIN_DB_PASSWORD=xxxxx
# ✅ 正确
env_file:
- .env.admin
.env 文件权限必须设置为 600:
chmod 600 .env.admin
八、数据存储架构
8.1 磁盘规划
| 磁盘 | 挂载点 | 容量 | 已用 | 可用 | 用途 |
|---|---|---|---|---|---|
| 系统盘 /dev/vda3 | / | 79G | 35G | 41G | 系统 + Docker 镜像 |
| 数据盘 /dev/vdb1 | /data | 60G | 1.6G | 55G | 持久化数据(上传文件、数据库、备份) |
8.2 数据盘目录结构
/data/
├── kaopeilian/ # 考培练系统数据根目录
│ ├── uploads/ # 统一上传文件存储(按租户隔离)
│ │ ├── demo/ # 演示版 (aiedu.ireborn.com.cn)
│ │ ├── kpl/ # 瑞小美 (kpl.ireborn.com.cn)
│ │ ├── yy/ # 杨扬宠物
│ │ ├── hl/ # 武汉禾丽
│ │ ├── xy/ # 芯颜定制
│ │ ├── fw/ # 飞沃
│ │ ├── hua/ # 华尔倍丽
│ │ ├── ex/ # 恩喜成都总院
│ │ └── peilian/ # 陪练试用版
│ ├── backups/ # 数据库备份
│ │ ├── daily/ # 每日备份(保留7天)
│ │ └── weekly/ # 每周备份(保留4周)
│ └── logs/ # 应用日志归档
├── mysql-data/ # MySQL 数据目录
├── redis-data/ # Redis 数据目录
└── prod-envs/ # 生产环境配置
8.3 自动备份
- 备份脚本:
/data/kaopeilian/backup.sh - 执行时间:每天凌晨 2:00
- 备份内容:所有租户的上传文件和数据库
- 保留策略:日备份保留 7 天,周备份保留 4 周
九、网络架构
Docker 网络
| 网络名称 | 说明 |
|---|---|
| kaopeilian-network | 演示版容器网络 |
| kpl-dev-network | 瑞小美开发网络 |
| prod-network | 多客户生产网络 |
十、SSL 证书管理
10.1 证书概览
所有域名使用 Let's Encrypt 免费证书,有效期 90 天,自动续期。
| 域名 | 证书路径 | 续期方式 |
|---|---|---|
| aiedu.ireborn.com.cn | /etc/letsencrypt/live/aiedu.ireborn.com.cn/ | webroot |
| hua.ireborn.com.cn | /etc/letsencrypt/live/hua.ireborn.com.cn/ | webroot |
| yy.ireborn.com.cn | /etc/letsencrypt/live/yy.ireborn.com.cn/ | webroot |
| hl.ireborn.com.cn | /etc/letsencrypt/live/hl.ireborn.com.cn/ | webroot |
| xy.ireborn.com.cn | /etc/letsencrypt/live/xy.ireborn.com.cn/ | webroot |
| fw.ireborn.com.cn | /etc/letsencrypt/live/fw.ireborn.com.cn/ | webroot |
| kpl.ireborn.com.cn | /etc/letsencrypt/live/kpl.ireborn.com.cn/ | webroot |
| pl.ireborn.com.cn | /etc/letsencrypt/live/pl.ireborn.com.cn/ | webroot |
| ex.ireborn.com.cn | /etc/letsencrypt/live/ex.ireborn.com.cn/ | webroot |
10.2 自动续期机制
系统已配置三重保障,确保证书不会过期:
1. Certbot 定时器(主力)
- 服务:
certbot-renew.timer - 频率:每 12 小时检查一次
- 策略:证书到期前 30 天自动续期
# 查看定时器状态
systemctl status certbot-renew.timer
# 手动测试续期(不会真正续期)
certbot renew --dry-run
2. 续期后自动重载 Nginx
- Hook 脚本:
/etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh - 作用:证书续期成功后自动重载 Docker nginx,使新证书生效
3. 证书到期监控
- 脚本:
/root/scripts/check-ssl-expiry.sh - 频率:每周一上午 9 点(cron)
- 日志:
/var/log/ssl-check.log - 预警:证书有效期不足 30 天时输出警告
10.3 常用命令
# 查看所有证书状态
certbot certificates
# 手动续期所有证书
certbot renew
# 强制续期指定证书
certbot renew --cert-name aiedu.ireborn.com.cn --force-renewal
# 手动重载 nginx
docker exec kaopeilian-nginx nginx -s reload
# 查看证书到期日期
for cert in /etc/letsencrypt/live/*/fullchain.pem; do
domain=$(basename $(dirname $cert))
expiry=$(openssl x509 -enddate -noout -in "$cert" | cut -d= -f2)
echo "$domain: $expiry"
done
10.4 故障排查
问题:证书续期失败
- 检查 webroot 目录:
ls -la /var/www/certbot/.well-known/acme-challenge/ - 检查 nginx 配置是否有 acme-challenge 路由
- 查看日志:
tail -100 /var/log/letsencrypt/letsencrypt.log
问题:续期成功但 HTTPS 仍显示过期
- 重载 nginx:
docker exec kaopeilian-nginx nginx -s reload - 检查 hook 脚本权限:
ls -la /etc/letsencrypt/renewal-hooks/deploy/
十一、AI 服务配置(Python 原生实现)
更新日期:2026-01-21(AI 配置从管理库加载)
11.1 概述
所有 AI 功能均使用 Python 原生实现,直接调用 AI API,无外部平台依赖。
特点:
- 双服务商自动降级(4sapi.com → OpenRouter)
- JSON 解析多层兜底,成功率 99%+
- 无外部平台依赖,100% 可控
- 统一的提示词管理
- AI 配置从管理库(kaopeilian_admin)统一加载
11.2 配置加载架构
┌─────────────────────────────────────────────────────────────┐
│ kaopeilian_admin 数据库(prod-mysql:3309) │
│ ├── tenants 表(租户信息) │
│ │ └── id, code, name, status │
│ └── tenant_configs 表(租户配置) │
│ └── tenant_id, config_group='ai', config_key, config_value │
└──────────────────────────────────────────────────────────────┘
│
▼ AIService 启动时同步查询
┌──────────────────────────────────────────────────────────────┐
│ 后端容器(需配置以下环境变量) │
│ - TENANT_CODE=ex │
│ - ADMIN_DB_HOST=prod-mysql │
│ - ADMIN_DB_PASSWORD=ProdMySQL2025!@# │
│ - ADMIN_DB_NAME=kaopeilian_admin │
└──────────────────────────────────────────────────────────────┘
配置加载优先级:
- 管理库
tenant_configs表(按 TENANT_CODE 查询) - 环境变量
.env文件(fallback) - 代码默认值
11.3 管理库中的 AI 配置项
| config_key | 说明 |
|---|---|
| AI_PRIMARY_API_KEY | 首选服务商 Key (4sapi.com) |
| AI_ANTHROPIC_API_KEY | Claude 专属 Key |
| AI_PRIMARY_BASE_URL | 首选服务商地址 |
| AI_FALLBACK_API_KEY | 备选服务商 Key (OpenRouter) |
| AI_FALLBACK_BASE_URL | 备选服务商地址 |
| AI_DEFAULT_MODEL | 默认模型 |
| AI_TIMEOUT | 请求超时(秒) |
11.4 容器环境变量配置(必须!)
每个后端容器的 .env 文件必须包含管理库连接信息:
# 租户标识(用于从管理库查询配置)
TENANT_CODE=ex
# 管理库连接配置
ADMIN_DB_HOST=prod-mysql
ADMIN_DB_PORT=3306
ADMIN_DB_USER=root
ADMIN_DB_PASSWORD=ProdMySQL2025!@#
ADMIN_DB_NAME=kaopeilian_admin
⚠️ 重要:修改
.env文件后必须重启容器:docker compose up -d --force-recreate
11.3 已支持的 AI 功能
| 功能 | API 端点 | 服务文件 |
|---|---|---|
| 知识点分析 | /api/v1/courses/{id}/materials/{mid}/analyze |
knowledge_analysis_v2.py |
| 试题生成 | /api/v1/exams/generate |
exam_generator_service.py |
| 答案判断 | /api/v1/exams/judge-answer |
answer_judge_service.py |
| 陪练场景提取 | /api/v1/practice/extract-scene |
practice_scene_service.py |
| 陪练分析报告 | /api/v1/practice/sessions/{id}/analyze |
practice_analysis_service.py |
| 能力评估 | /api/v1/ability/analyze-yanji |
ability_analysis_service.py |
| 课程对话 | /api/v1/course/chat |
course_chat_service.py |
11.4 相关代码文件
| 文件 | 说明 |
|---|---|
app/services/ai/ai_service.py |
AI 服务(双服务商降级) |
app/services/ai/llm_json_parser.py |
LLM JSON 输出解析器 |
app/services/ai/knowledge_analysis_v2.py |
知识点分析服务 |
app/services/ai/exam_generator_service.py |
试题生成服务 |
app/services/ai/ability_analysis_service.py |
智能工牌能力分析服务 |
app/services/ai/course_chat_service.py |
课程对话服务 |
app/services/ai/answer_judge_service.py |
答案判断服务 |
app/services/ai/practice_analysis_service.py |
陪练分析报告服务 |
app/services/ai/practice_scene_service.py |
陪练场景提取服务 |
app/services/ai/prompts/ |
提示词模板目录 |
11.5 依赖包
在 requirements.txt 中已添加:
json-repair>=0.25.0
jsonschema>=4.0.0
PyPDF2>=3.0.0
python-docx>=1.0.0
十二、课程对话会话管理
12.1 会话存储
课程对话使用 Redis 存储会话历史和会话索引:
| 配置 | 值 | 说明 |
|---|---|---|
| 会话数据 Key | course_chat:conversation:{id} |
Redis 存储 key |
| 会话索引 Key | course_chat:user:{user_id}:conversations |
Sorted Set,按时间排序 |
| 会话元数据 Key | course_chat:meta:{id} |
会话课程ID等元信息 |
| ID 格式 | conv_{user_id}_{course_id}_{uuid} |
会话 ID 格式 |
| 窗口大小 | 10 轮 | 保留最近对话数 |
| TTL | 30 分钟 | 会话过期时间 |
12.2 API 端点
| 端点 | 说明 |
|---|---|
POST /api/v1/course/chat |
课程对话(流式响应) |
GET /api/v1/course/messages |
获取会话历史消息 |
GET /api/v1/course/conversations |
获取会话列表 |
12.3 使用说明
请求示例:
# 流式对话(SSE)
curl -X POST "https://aiedu.ireborn.com.cn/api/v1/course/chat" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"course_id": 1, "query": "什么是玻尿酸?"}'
响应事件:
conversation_started: 会话开始,返回 conversation_idmessage_chunk: 文本块(逐字返回,打字机效果)message_end: 消息结束error: 错误信息
十四、SaaS 超级管理后台
2026-01-18 新增
14.1 概述
SaaS 超级管理后台用于统一管理所有租户的配置,替代原来分散在各 .env 文件中的配置方式。
核心功能:
- 租户管理:创建、编辑、启用/禁用租户
- 配置管理:统一管理各租户的 AI Key、数据库、Redis 等配置
- 提示词管理:查看和编辑 AI 提示词,支持版本控制
- 功能开关:按租户控制功能模块的启用/禁用
14.2 部署信息
| 项目 | 值 |
|---|---|
| 域名 | admin.ireborn.com.cn |
| 前端容器 | kaopeilian-admin-frontend |
| 前端端口 | 3030 |
| 后端容器 | kaopeilian-admin-backend |
| 后端端口 | 8030 |
| 管理数据库 | kaopeilian_admin (prod-mysql:3309) |
14.3 数据库表结构
| 表名 | 说明 |
|---|---|
| admin_users | 平台管理员账户 |
| tenants | 租户基本信息 |
| tenant_configs | 租户配置(Key-Value) |
| ai_prompts | AI 提示词模板 |
| ai_prompt_versions | 提示词版本历史 |
| tenant_prompts | 租户自定义提示词 |
| feature_switches | 功能开关 |
| config_templates | 配置模板(元数据) |
| operation_logs | 操作审计日志 |
14.4 API 端点
| 端点 | 说明 |
|---|---|
POST /api/v1/admin/auth/login |
管理员登录 |
GET /api/v1/admin/tenants |
获取租户列表 |
POST /api/v1/admin/tenants |
创建租户 |
PUT /api/v1/admin/tenants/{id} |
更新租户 |
GET /api/v1/admin/configs/tenants/{id} |
获取租户配置 |
PUT /api/v1/admin/configs/tenants/{id}/batch |
批量更新配置 |
GET /api/v1/admin/prompts |
获取提示词列表 |
PUT /api/v1/admin/prompts/{id} |
更新提示词 |
GET /api/v1/admin/features/tenants/{id} |
获取租户功能开关 |
14.5 默认账户
| 用户名 | 密码 | 角色 |
|---|---|---|
| superadmin | Superadmin123! | 超级管理员 |
14.6 启动命令
# 启动管理后台
cd /root/aiedu && docker compose -f docker-compose.admin.yml up -d
# 查看日志
docker logs -f kaopeilian-admin-backend
docker logs -f kaopeilian-admin-frontend
14.7 相关文件
| 文件 | 说明 |
|---|---|
/root/aiedu/docker-compose.admin.yml |
Docker Compose 配置 |
/root/aiedu/nginx/conf.d/admin.conf |
Nginx 反向代理配置 |
/root/aiedu/kaopeilian-admin-frontend/ |
前端代码目录 |
/root/aiedu/kaopeilian-backend/app/api/v1/admin_portal/ |
后端 API 目录 |
/root/aiedu/kaopeilian-backend/app/core/tenant_config.py |
租户配置加载器 |
/root/aiedu/kaopeilian-backend/migrations/admin_platform_schema.sql |
数据库架构 |
14.8 配置优先级
租户配置加载优先级(从高到低):
- 数据库
tenant_configs表 - 环境变量
.env文件(向后兼容) - 代码默认值