Skip to content

Cloudflare Tunnel:零成本把本地服务暴露到公网

在开发 AI 应用时,我经常需要让外部访问本机运行的服务——比如给朋友测试、或者手机上调试。传统方法要么需要公网 IP,要么用 ngrok(有流量限制)。后来发现 Cloudflare Tunnel 完全免费,且稳定性更好。

原理

Cloudflare Tunnel 的工作方式:

访客 → Cloudflare 边缘节点 → 加密隧道 → 你的本机 → 本地服务

本机运行一个叫 cloudflared 的守护进程,主动向 Cloudflare 建立出站连接。这意味着你不需要开放任何入站端口,防火墙设置也不用改。

安装

bash
# macOS
brew install cloudflare/cloudflare/cloudflared

# Linux
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

配置

bash
# 登录(会弹出浏览器授权)
cloudflared tunnel login

# 创建 tunnel
cloudflared tunnel create my-app

# 路由域名到 tunnel
cloudflared tunnel route dns my-app app.yourdomain.com

生成 ~/.cloudflared/config.yml

yaml
tunnel: <TUNNEL_ID>
credentials-file: ~/.cloudflared/<TUNNEL_ID>.json
protocol: http2

ingress:
  - hostname: app.yourdomain.com
    service: http://localhost:8000
    originRequest:
      connectTimeout: 30s
  - service: http_status:404

启动

bash
# 前台测试
cloudflared tunnel run my-app

# 注册为系统服务(开机自启)
sudo cloudflared service install

注意事项

  • 国内访问速度受 Cloudflare 线路影响,偶尔较慢(晚高峰)
  • 服务中断时需要切换到备用方案(如阿里云 VPS)
  • 免费版无流量限制,但有合理使用条款

这套方案是我 Psycho 项目的主要发布方式,目前运行非常稳定。