Cloudflare Tunnel 部署指南

概述

使用 Cloudflare Tunnel(免费)将本地Docker服务安全暴露到公网,无需公网IP、无需开放端口、自动HTTPS。

优势

  • 免费 - Cloudflare Tunnel完全免费
  • 安全 - 无需开放端口,流量加密
  • 自动HTTPS - 自动SSL证书
  • 全球CDN - Cloudflare全球节点加速
  • 简单 - 一键部署

部署步骤

1. 注册Cloudflare账号

访问 https://dash.cloudflare.com 注册账号(免费)

2. 添加域名(可选但推荐)

如果有自己的域名,添加到Cloudflare:

  • Cloudflare Dashboard → Add a site
  • 按提示修改域名NS记录

如果没有域名,可以使用Cloudflare提供的免费子域名。

3. 创建Tunnel

方式A:通过Dashboard(推荐)

  1. 登录 https://one.dash.cloudflare.com
  2. 左侧菜单 → NetworksTunnels
  3. 点击 Create a tunnel
  4. 选择 Cloudflared
  5. 输入隧道名称:mises-behavior-engine
  6. 点击 Save tunnel
  7. 复制Tunnel Token(重要!)

方式B:通过命令行

# 安装cloudflared
winget install cloudflare.cloudflared

# 登录
cloudflared tunnel login

# 创建隧道
cloudflared tunnel create mises-behavior-engine

# 获取隧道ID
cloudflared tunnel list

4. 配置公网路由

在Cloudflare Dashboard的Tunnel配置页面:

  1. 点击 Configure
  2. 添加 Public Hostname
    • Subdomain: mbe(或你喜欢的名称)
    • Domain: 选择你的域名
    • Service Type: HTTP
    • URL: mbe-api:8000

最终公网地址将是:https://mbe.yourdomain.com

5. 配置环境变量

创建 .env 文件:

# Cloudflare Tunnel Token(从Dashboard复制)
CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoixxxxxx...

# LLM配置
LLM_PROVIDER=deepseek
LLM_API_KEY=your-deepseek-api-key

# 安全密钥(生产环境必须修改)
SECRET_KEY=your-secure-random-string-at-least-32-chars

6. 启动服务

# 使用带Tunnel的配置启动
docker-compose -f docker-compose.tunnel.yml up -d

# 查看日志
docker logs mbe-tunnel
docker logs mbe-api

7. 验证部署

# 本地测试
curl http://localhost:8000/api/health

# 公网测试(替换为你的域名)
curl https://mbe.yourdomain.com/api/health

小智MCP配置

部署成功后,在小智后台配置MCP:

Endpoint: https://mbe.yourdomain.com/mcp/sse
Transport: SSE

常用命令

# 启动所有服务
docker-compose -f docker-compose.tunnel.yml up -d

# 停止所有服务
docker-compose -f docker-compose.tunnel.yml down

# 查看状态
docker-compose -f docker-compose.tunnel.yml ps

# 查看Tunnel日志
docker logs -f mbe-tunnel

# 查看API日志
docker logs -f mbe-api

# 重启Tunnel
docker-compose -f docker-compose.tunnel.yml restart cloudflared

故障排查

Tunnel连接失败

# 检查Token是否正确
docker logs mbe-tunnel

# 常见错误:
# - "invalid token" → Token复制不完整
# - "tunnel not found" → 需要在Dashboard重新创建

API无法访问

# 检查容器是否运行
docker ps

# 检查API日志
docker logs mbe-api

# 检查网络连通性
docker exec mbe-tunnel curl http://mbe-api:8000/api/health

域名解析问题

  1. 确认域名已添加到Cloudflare
  2. 确认Public Hostname配置正确
  3. 等待DNS传播(最多几分钟)

安全建议

  1. 修改SECRET_KEY - 使用强随机字符串
  2. 限制访问 - 在Cloudflare Access设置访问策略
  3. 监控日志 - 定期检查异常访问
  4. 定期更新 - 保持镜像和依赖更新

费用说明

  • Cloudflare Tunnel: 免费
  • Cloudflare域名: 免费(使用自己的域名)或购买
  • 本地服务器: 你自己的电脑运行Docker

总费用:基本免费(仅域名可能需要费用)