生产版 Tunnel 修复指南

问题诊断(2026-02-08)

当前状态

  1. Tunnel 连接状态

    • 容器:mbe-cloudflared
    • Tunnel ID:456cc7cd-718a-46f8-acd5-82dd7cd674c4(生产版 mbe-prod
    • 连接状态:✅ 已连接(Registered tunnel connection
    • Token:已正确配置(生产版 Token)
  2. 配置问题

    • Tunnel 配置中的路由指向开发版服务:
      • dev-app.hi-maker.commbe-pwa-dev:80
      • admin.hi-maker.commbe-admin-ui-dev:3000
      • aigc-dev.hi-maker.commbe-aigc-committee-dev:3002
      • mbe-dev.hi-maker.commbe-api:8000
    • 应该配置为生产版路由
      • mbe.hi-maker.commbe-api:8000
      • app.hi-maker.commbe-pwa:80(如果存在)
      • admin.hi-maker.commbe-admin-ui:3000(如果存在)
  3. 服务状态

    • 生产版服务 (mbe-api) 未运行
    • 只有开发版服务 (mbe-api-dev) 在运行

修复步骤

步骤 1:更新 Cloudflare Dashboard 中的 Tunnel 配置

  1. 访问 Cloudflare Dashboard

  2. 选择生产版 Tunnel

    • 找到 Tunnel:mbe-prod
    • 点击:Configure
  3. 更新 Public Hostname 配置

    删除所有开发版路由,添加生产版路由:

    删除以下路由:

    • dev-app.hi-maker.commbe-pwa-dev:80
    • admin.hi-maker.commbe-admin-ui-dev:3000
    • aigc-dev.hi-maker.commbe-aigc-committee-dev:3002
    • mbe-dev.hi-maker.commbe-api:8000

    添加生产版路由:

    • Subdomain: mbe
    • Domain: hi-maker.com
    • Service Type: HTTP
    • URL: http://mbe-api:8000

    可选路由(如果存在生产版服务):

    • app.hi-maker.comhttp://mbe-pwa:80
    • admin.hi-maker.comhttp://mbe-admin-ui:3000
  4. 保存配置

    • 点击:Save
    • 等待配置同步(通常几秒钟)

步骤 2:启动生产版服务

# 进入项目目录
cd d:\Mises\mbe-monorepo

# 启动生产版服务(包括数据库、Redis、API等)
docker compose -f docker-compose.yml up -d

# 检查服务状态
docker ps --filter "name=mbe-api" --format "table {{.Names}}\t{{.Status}}"

预期输出:

NAMES     STATUS
mbe-api   Up X minutes (healthy)

步骤 3:重启 Tunnel 容器

# 重启 Tunnel 容器以应用新配置
docker restart mbe-cloudflared

# 等待几秒后检查日志
Start-Sleep -Seconds 5
docker logs mbe-cloudflared --tail 30

预期日志:

INF Updated to new configuration config="{\"ingress\":[{\"hostname\":\"mbe.hi-maker.com\",\"originRequest\":{},\"service\":\"http://mbe-api:8000\"},{\"service\":\"http_status:404\"}],\"warp-routing\":{\"enabled\":false}}"
INF Registered tunnel connection

步骤 4:验证修复

  1. 检查 Tunnel 状态

    docker logs mbe-cloudflared --tail 20
    

    应该看到:

    • Registered tunnel connection
    • Updated to new configuration(包含 mbe.hi-maker.com
  2. 检查 Cloudflare Dashboard

  3. 测试访问

    # 测试生产版 API
    curl https://mbe.hi-maker.com/api/health
    
    # 或使用浏览器访问
    # https://mbe.hi-maker.com/api/health
    

验证清单

  • Cloudflare Dashboard 中 mbe-prod Tunnel 状态为 HEALTHY
  • Tunnel 日志显示 Registered tunnel connection
  • Tunnel 配置包含 mbe.hi-maker.comhttp://mbe-api:8000
  • 生产版服务 mbe-api 正在运行
  • 可以访问 https://mbe.hi-maker.com/api/health

常见问题

Q1: Tunnel 配置更新后仍然显示开发版路由

原因: 配置同步需要时间,或缓存问题

解决:

# 重启 Tunnel 容器
docker restart mbe-cloudflared

# 等待 10-30 秒后检查日志
Start-Sleep -Seconds 10
docker logs mbe-cloudflared --tail 50 | Select-String "Updated to new configuration"

Q2: 502 Bad Gateway

原因: 生产版服务未运行或服务 URL 配置错误

解决:

# 检查生产版服务状态
docker ps --filter "name=mbe-api"

# 如果未运行,启动服务
docker compose -f docker-compose.yml up -d

# 检查服务健康状态
docker logs mbe-api --tail 20

Q3: Tunnel 连接失败

原因: Token 无效或网络问题

解决:

  1. 检查 .env 文件中的 CLOUDFLARE_TUNNEL_TOKEN 是否正确
  2. 在 Cloudflare Dashboard 重新生成 Token
  3. 更新 .env 文件并重启容器

注意事项

  1. 开发版和生产版可以同时运行

    • 开发版:mbe-tunnel-devdev.hi-maker.com
    • 生产版:mbe-cloudflaredmbe.hi-maker.com
    • 两者使用不同的网络和端口,互不影响
  2. 确保服务名称匹配

    • Cloudflare Dashboard 中的 Service URL 必须使用 Docker 容器名
    • 生产版:http://mbe-api:8000
    • 开发版:http://mbe-api-dev:8000
  3. 定期检查日志

    • 每天检查 Tunnel 日志,确保连接稳定
    • 监控生产版服务健康状态

快速修复命令(一键执行)

# 1. 启动生产版服务
cd d:\Mises\mbe-monorepo
docker compose -f docker-compose.yml up -d

# 2. 等待服务启动
Start-Sleep -Seconds 10

# 3. 重启 Tunnel
docker restart mbe-cloudflared

# 4. 检查状态
Start-Sleep -Seconds 5
docker logs mbe-cloudflared --tail 30
docker ps --filter "name=mbe-api" --format "table {{.Names}}\t{{.Status}}"

注意: 执行前请确保已在 Cloudflare Dashboard 中更新了 Tunnel 配置!