MBE Dashboard 数据显示问题解决方案
问题现象
管理后台 Dashboard (https://mbe.hi-maker.com/admin/) 显示所有统计数据为 0。
根本原因
1. 数据库缺少业务数据
原因: 新部署的系统数据库中只有基础表结构,没有业务数据。 解决: 创建了两个数据生成脚本:
scripts/seed_dashboard_data.py- 快速生成基础统计数据scripts/seed_business_flow_data.py- 按完整业务流程生成测试数据
2. 前端 API URL 配置错误
原因: Admin UI 前端的 NEXT_PUBLIC_API_URL 配置为 Docker 内部地址 http://mbe-api:8000,浏览器无法访问。
解决:
- 在
.env.production中添加ADMIN_API_URL=https://mbe.hi-maker.com - 通过 Cloudflare Tunnel 使浏览器能够访问后端 API
3. Next.js 环境变量构建时编译问题
原因: Next.js 在构建时将 NEXT_PUBLIC_* 环境变量编译到静态文件中,运行时修改环境变量不会生效。
影响: 虽然容器重启后环境变量正确,但前端代码仍使用旧的 API URL。
解决方案
临时方案:使用本地端口访问
直接访问容器端口,绕过已编译的静态文件:
http://localhost:3000
这样前端会使用服务器端的最新环境变量。
长期方案:重新构建 Admin UI 镜像
- 确保环境变量正确:
# .env.production
ADMIN_API_URL=https://mbe.hi-maker.com
- 重新构建镜像:
cd d:\Mises\mises-behavior-engine
# 停止现有容器
docker-compose -f docker-compose.complete.yml --env-file .env.production down mbe-admin-ui
# 重新构建镜像(使用正确的环境变量)
docker-compose -f docker-compose.complete.yml --env-file .env.production build mbe-admin-ui
# 启动新容器
docker-compose -f docker-compose.complete.yml --env-file .env.production up -d mbe-admin-ui
- 验证环境变量:
docker exec mbe-admin-ui printenv NEXT_PUBLIC_API_URL
# 应该输出: https://mbe.hi-maker.com
- 清除浏览器缓存并访问:
https://mbe.hi-maker.com/admin/
数据生成说明
基础数据生成(快速)
docker exec mbe-api python scripts/seed_dashboard_data.py --days 14
生成内容:
- 会话记录
- 行为历史
- 使用记录
- Token 日志
业务流程数据生成(完整)
docker exec mbe-api python scripts/seed_business_flow_data.py
按照真实业务流程生成:
- 访客浏览 - 创建匿名会话
- 用户注册 - 创建普通用户账号
- 用户活动 - 登录和使用记录
- 开发者注册 - 创建开发者账号
- 管理员审核 - 审核通过开发者
- 创建专家 - 开发者创建专家(模拟)
- 购买订阅 - 用户购买订阅计划
- 用户充值 - 充值和余额管理
- 对话交互 - 用户与专家对话
- 系统结算 - 统计和结算
当前数据状态
- 总用户数: 49
- 今日活跃: 21
- 专家数量: 18
- 今日对话: 32
- 总会话数: 333
- 对话记录: 381
- Token日志: 962
API 验证
测试 Dashboard API:
# 本地测试
Invoke-WebRequest -Uri "http://localhost:8000/admin/api/dashboard/stats" | ConvertFrom-Json
# 通过 Cloudflare Tunnel 测试
Invoke-WebRequest -Uri "https://mbe.hi-maker.com/admin/api/dashboard/stats" | ConvertFrom-Json
预期返回:
{
"total_users": 49,
"active_users": 21,
"total_experts": 18,
"today_dialogs": 32,
"llm_calls": 0,
"token_usage": 0,
"revenue_today": 0,
"revenue_month": 0
}
注意事项
关于 Cloudflare Tunnel
- 容器重启后 Docker 网络 IP 会变化
- Cloudflare Tunnel 可能缓存旧的 IP 地址
- 如果出现 502 Bad Gateway,重启 Tunnel 容器:
docker restart mbe-cloudflare-tunnel
关于 Next.js 构建
NEXT_PUBLIC_*环境变量在构建时编译- 修改环境变量后必须重新构建才能生效
- 开发环境可以使用
localhost绕过这个限制
关于数据库密码
- 确保
.env.production中的DB_PASSWORD与数据库实际密码一致 - 容器重启后可能需要更新 PostgreSQL 用户密码:
docker exec mbe-postgres psql -U mbe -d mbe -c "ALTER USER mbe WITH PASSWORD 'your-password';"
后续优化建议
自动化数据初始化
- 在部署脚本中自动运行数据生成
- 添加到
deploy_dual_environment.ps1
改进前端配置
- 使用运行时配置而非构建时环境变量
- 考虑使用 Next.js 的
publicRuntimeConfig
监控和告警
- 添加 Dashboard 数据为 0 的告警
- 监控 Cloudflare Tunnel 连接状态
文档完善
- 更新部署文档,说明环境变量配置
- 添加故障排查指南
相关文件
d:\Mises\mises-behavior-engine\.env.production- 生产环境配置d:\Mises\mises-behavior-engine\scripts\seed_dashboard_data.py- 基础数据生成d:\Mises\mises-behavior-engine\scripts\seed_business_flow_data.py- 业务流程数据生成d:\Mises\mises-behavior-engine\admin-ui\lib\api.ts- 前端 API 配置d:\Mises\mises-behavior-engine\src\api\admin\dashboard.py- Dashboard 后端 API