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 镜像

  1. 确保环境变量正确
# .env.production
ADMIN_API_URL=https://mbe.hi-maker.com
  1. 重新构建镜像
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
  1. 验证环境变量
docker exec mbe-admin-ui printenv NEXT_PUBLIC_API_URL
# 应该输出: https://mbe.hi-maker.com
  1. 清除浏览器缓存并访问
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

按照真实业务流程生成:

  1. 访客浏览 - 创建匿名会话
  2. 用户注册 - 创建普通用户账号
  3. 用户活动 - 登录和使用记录
  4. 开发者注册 - 创建开发者账号
  5. 管理员审核 - 审核通过开发者
  6. 创建专家 - 开发者创建专家(模拟)
  7. 购买订阅 - 用户购买订阅计划
  8. 用户充值 - 充值和余额管理
  9. 对话交互 - 用户与专家对话
  10. 系统结算 - 统计和结算

当前数据状态

- 总用户数: 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';"
    

后续优化建议

  1. 自动化数据初始化

    • 在部署脚本中自动运行数据生成
    • 添加到 deploy_dual_environment.ps1
  2. 改进前端配置

    • 使用运行时配置而非构建时环境变量
    • 考虑使用 Next.js 的 publicRuntimeConfig
  3. 监控和告警

    • 添加 Dashboard 数据为 0 的告警
    • 监控 Cloudflare Tunnel 连接状态
  4. 文档完善

    • 更新部署文档,说明环境变量配置
    • 添加故障排查指南

相关文件

  • 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