剪藏#AIGClaw#剪藏

帮你把用Agent生成的网页服务,用 Cloudflare Tunnel 部署成全球可访问的服务

2026 年 7 月 7 日1 分钟
分享Twitter / XTelegram微博
帮你把用Agent生成的网页服务,用 Cloudflare Tunnel 部署成全球可访问的服务 封面

📡 一篇完整教程:

Cloudflare Tunnel+Docker Compose,10 分钟在家庭服务器上跑一个全球可访问的监控面板。 ✅ 零公网 IP

✅ 零端口映射

✅ 零成本

✅ 全自动 HTTPS

一、它是怎么工作的?

在说步骤之前,先花 1 分钟搞懂原理。后面所有截图你都知道自己在干嘛。

传统方案是「人找服务器」:访客直接访问你家的 IP,路由器开端口把人放进来。

Cloudflare Tunnel 是「服务器找人」:在你家机器上装一个叫cloudflared的小守护进程,它会主动向 Cloudflare 边缘节点发起一条加密长连接。从此以后,外面的人访问你的域名,请求会先到 Cloudflare,再顺着这条隧道回到你家机器。

我们今天要部署的项目整体长这样:

Notion image

注意这次cloudflared 也跑在 Docker 里,与 Uptime Kuma 同居一份 compose 文件。整个家庭服务用一套docker compose命令管理,零 systemd、零 apt install。

四个最直观的收益:

  1. 不需要公网 IP——家里宽带随便换,机器在哪都能用。

  2. 不需要端口映射——路由器防火墙可以保持"全拒绝入站"状态。

  3. 自动 HTTPS——Cloudflare 自动签发、续签证书。

  4. 隐藏真实 IP——外面看不到你家的真实 IP,被打的概率直接归零。

而且这一切,免费。Cloudflare Tunnel 的免费额度对个人玩家来说等于无限。

二、准备工作(10 分钟搞定)

在开始之前,你需要准备三样东西:

材料 要求 备注
一个域名 任何后缀都行,几块钱一年 推荐在 Cloudflare 注册最省事;阿里云/腾讯云买的迁移方法见第三节
一个 Cloudflare 账户 免费版就够 dash.cloudflare.com注册
一台家庭服务器 Linux/macOS/Windows均可 跑 NAS、博客、AI生成的网站

小提示

如果域名不在 Cloudflare,可以走"添加站点"流程,把 DNS 改成 Cloudflare 提供的两台 ns 记录。这步是免费的,迁移过程一般 10 分钟到几小时生效。

为了演示完整流程,我们还会部署一个真实服务——Uptime Kuma(一个颜值超高的自托管监控面板)。如果你已经有想部署的项目(比如 Jellyfin / Vaultwarden / 博客),可以直接跳到 4.3 写一份 docker-compose.yml,把端口号换成你自己的就行。

三、域名接入 Cloudflare(以阿里云为例)

如果你的域名就在 Cloudflare 注册的,这一步可以跳过。 如果在阿里云、腾讯云、Namecheap、GoDaddy 等地方买的,看这里。

用 Cloudflare Tunnel 必须让 Cloudflare 接管你的域名 DNS。这一步在阿里云上 5 分钟搞定,别跳过。

3.1 在 Cloudflare 添加站点

  1. 登录dash.cloudflare.com

  2. 右上角"+ Add a Site"

  3. 输入你的域名(如example.com),点 Continue

  4. 选Free计划(不要钱)

  5. Cloudflare 会自动扫描现有的 DNS 记录(先不用动)

  6. 继续到下一步,Cloudflare 会给你两个 Nameserver 地址,类似:anna.ns.cloudflare.com/bob.ns.cloudflare.com⚠️⚠️ 记下这两个地址,下一步要用。

3.2 去阿里云改 NS 记录

  1. 登录阿里云 DNS 控制台

  2. 找到你的域名,点**"管理""修改 DNS"**

  3. 把默认的阿里云 NS删掉

  4. 填上 Cloudflare 给你的两个 NS

  5. 保存

Notion image

3.3 等待生效

NS 记录全球传播通常需要10 分钟到 48 小时,国内实测一般10-30 分钟。

两种方法判断是否生效:

命令行验证(最直接,推荐)

JAVASCRIPT
nslookup -type=ns example.com

看到返回里有*.ns.cloudflare.com就说明 NS 已经指向 Cloudflare 了:

Notion image

falser101.xyz的两个 nameserver 都是*.ns.cloudflare.com,表示 NS 迁移成功

四、10 分钟部署全家桶(Uptime Kuma + Cloudflare Tunnel)

这一节我们一份 docker-compose.yml 同时起两个服务

Uptime Kuma——你的监控面板(演示服务)

cloudflared——Cloudflare 隧道客户端(负责和 Cloudflare 边缘握手)

两个容器住在同一个 Docker 网络里,cloudflared 能直接通过http://uptime-kuma:3001找到 Uptime Kuma,不用绕宿主机的 localhost,也不用单独起一个 docker run

同步我们也要去 Cloudflare Dashboard 创建一个隧道(Tunnel),拿到一把TUNNEL_TOKEN——这是 cloudflared 跟 Cloudflare 边缘节点握手的钥匙。

4.1 装 Docker(一句话装好)

JAVASCRIPT
# 一键脚本(Ubuntu/Debian,其他系统看官方文档)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 让当前用户免 sudo 用 docker
sudo usermod -aG docker $USER
newgrp docker
# 验证(Docker 20.10+ 已内置 docker compose v2
docker --version
docker compose version

Notion image

4.2 在 Cloudflare Dashboard 创建隧道(拿 TUNNEL_TOKEN)

登录dash.cloudflare.com:

  1. 左菜单选Networks → Tunnels

  2. 右上角点**+ 创建隧道**(首次访问会让你起一个"团队名",随便起,比如**home**或你的邮箱前缀,会成为子域名后缀

  3. 命名你的隧道,比如my-home根据你的需求选择操作系统,我选的Docker,下方自动生成那段**docker run ... --token eyJh...**——把右侧复制按钮点一下,整段命令就到剪贴板了,下面要用。如果是Windows,复制之后直接执行

  4. ⚠️ 先别运行这行命令!把右边那个token eyJh... 长串复制下来。

💡 这段 token 实际上把 Tunnel ID、账号 ID、私钥打包好了。cloudflared 容器拿到它就能直接和 Cloudflare 建立连接,不用再浏览器授权

4.3 写一份 docker-compose.yml(一份文件,双 service)

建项目目录:

JAVASCRIPT
mkdir -p ~/homelab/uptime-kuma && cd ~/homelab/uptime-kuma

在这个目录里创建docker-compose.yml:

JAVASCRIPT
services:
  # 演示服务:Uptime Kuma 监控面板
  uptime-kuma:
    image: louislam/uptime-kuma:2.4.0
    container_name: uptime-kuma
    restart: always
    ports:
    - "3001:3001"
    volumes:
    - uptime-kuma:/app/data
    # Cloudflare 隧道客户端  
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: always
    command: tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
volumes:
  uptime-kuma

💡路由完全不用写文件——所有 hostname 和 service URL 都在 Cloudflare Dashboard 的隧道详情页里配置(见 4.7)。改完点保存,秒级生效。

4.4 创建 .env 存 TUNNEL_TOKEN(保护 token 别外泄)

再创建一个.env文件(必须和 docker-compose.yml 同目录):

JAVASCRIPT
vim .env

粘贴刚刚复制的token

JAVASCRIPT
TUNNEL_TOKEN=eyJhIjoiNjM4...   # 贴你刚才复制的那一长串

Docker Compose 会自动读取同目录的.env文件,把变量注入到command里。

4.5 启动 + 验证(Tunnel connected)

JAVASCRIPT
cd ~/homelab/uptime-kuma
docker compose up -d

正常会看到:

JAVASCRIPT
✔ Network uptime-kuma_default Created
✔ Volume uptime-kuma          Created
✔ Container uptime-kuma       Started
✔ Container cloudflared       Started

跑一下docker compose ps,两个容器都应该是Up状态:

Notion image

两个容器都Up状态,且 uptime-kuma 后面带(healthy)标记——说明 cloudflared 在跑、Uptime Kuma 在跑、3001 端口也正常监听。PORTS那一列能看到0.0.0.0:3001->3001/tcp是宿主机的 3001 端口映射)*

想看 cloudflared 实时日志:

JAVASCRIPT
docker compose logs -f cloudflared

看到INF Connection established就说明隧道接通了。

与此同时,Dashboard 的 "Create Tunnel" 页面也会从「正在等待您的隧道连接…」变成:

Notion image

「隧道连接成功 ✓ 您的隧道现已可以使用」——这是 Docker 容器里 cloudflared 已经和 Cloudflare 边缘节点握手成功的标志。看到这个绿色提示才能点「继续」进入下一步

💡 一定要等到这个绿色提示出现再点继续,否则后面添加路由会失败。

4.6 初始化 Uptime Kuma + 加第一个监控

浏览器打开http://<服务器IP>:3001(或者等 4.7 加完路由后用https://kuma.yourdomain.com)。

首次进入让你创建管理员账户:

Notion image

选 SQLite 数据库(小规模部署够用了),跟着向导走完。

然后会让你创建管理员账户——用户名密码随便填,记住就好。点「创建」就进入主界面)*

然后加第一个监控(演示用),点左上角+ Add New Monitor:

保存后回到主面板:

Notion image

左侧出现「百度一下 100%」+ 一排绿色心跳条——说明监控已经生效,每 60 秒自动检查一次;右侧正常/故障/维护/未知/暂停的计数器也会刷新

4.7 在 Dashboard 加子域名路由(公网访问的最后一步)

Notion image

点击对应的隧道(my-home)进入详情点击「添加路由」按钮——点进去弹对话框填子域名 + Domain + Service URL)*

对话框填 3 项:

  • Subdomain(子域):kuma

  • Domain(域):下拉选你的域名,比如falser101.xyz

  • Service(服务):http://uptime-kuma:3001(Docker 内网 DNS)

Notion image

保存后 DNS 记录 + 路由秒级生效,完全不用动阿里云。

到这里,你的本地服务已经通过 Cloudflare 暴露到公网了。下一节我们去验证它真的能访问到。

五、见证奇迹的时刻

掏出你手机,关掉家里 Wi-Fi,用 4G/5G 流量打开浏览器,输入https://kuma.falser101.xyz。需要改为你自己的域名进行访问

是的,你应该看到自己家里的 Uptime Kuma 监控面板——和刚才在局域网里看到的一模一样,但这次是从公网访问的。

Notion image

注意浏览器地址栏:不是localhost:3001,而是公网域名kuma.falser101.xyz——这证明请求真的从公网经 Cloudflare 边缘 → 隧道 → 家里的 Uptime Kuma 完整跑通了。绿色心跳 + 200-OK 表示监控也在正常跑

拍下这一刻,发个朋友圈,恭喜自己。

你刚刚用一台没有公网 IP 的家庭服务器,零成本,3 条命令,部署了一个全球可访问的监控面板。

六、确保开机自启

现在cloudflared和uptime-kuma都是 Docker 容器,且都设了restart: always。只要 Docker 引擎本身开机自启,服务器一通电,整条链路就自动恢复。

JAVASCRIPT
sudo systemctl enable docker

验证一下:重启服务器,等机器起来后:

JAVASCRIPT
docker compose -f ~/homelab/uptime-kuma/docker-compose.yml ps

两个容器应该都自动是Up状态。

七、常见问题 FAQ

Q1:家里断网或者关机了怎么办?

A:访问就会失败(这是显然的)。cloudflared 适合放在常年开机的设备上——NAS、迷你主机、树莓派。如果担心可靠性,可以把同一个隧道 ID 装到多台机器上,Cloudflare 会自动做负载均衡。

Q2:速度怎么样?能跑满家庭上行带宽吗?

A:Cloudflare 边缘节点到 Cloudflare 服务器是专线,速度通常不是瓶颈;瓶颈在你家的上行带宽。普通家庭宽带 30-50Mbps 上行看视频/传文件完全够用。

Q3:会不会被 Cloudflare 限速或者封号?A:免费条款是"个人非商业使用、流量合理"。自用场景完全没问题,不要拿来做 BT 种子站或者公开大流量服务。

Q4:和 frp、花生壳比,强在哪?

A:frp 需要一台有公网 IP 的中转服务器,花生壳限速又收费。Cloudflare Tunnel 中转节点是全球 CDN,完全免费,且不需要任何中间机器。

Q5:TUNNEL_TOKEN 泄露了危险吗?A:是的,token 就是隧道的钥匙,泄露意味着别人能冒充你的隧道。.env文件千万不要提交到 Git。建议在~/homelab/.gitignore里写一行.env。

Q6:Uptime Kuma 之外,我想部署别的怎么办?

A:在~/homelab/下给每个服务建一个子目录、各写一份docker-compose.yml即可(参考 4.3 的写法)。Docker Hub 搜一下,几乎都有官方镜像。下面是几个常见的服务和端口:

Jellyfin 8096 家庭影视库
Vaultwarden 80 自托管密码管理
Halo 博客 8090 现代博客系统
Home Assistant 8123 智能家居中枢
qBittorrent 8080 下载器
你用ai生成的网站 5432 任意

结尾

到这里,你已经完整地搭了一个真实项目:

✅ 5 分钟部署 Uptime Kuma + Cloudflare Tunnel(一份 compose) ✅ 零公网 IP、零端口映射、零成本 ✅ 手机 4G 流量访问成功

下一步可以做什么?

👉 把 Uptime Kuma 换成 Vaultwarden,全平台同步密码;

👉 部署 Halo 博客,开始写自己的公众号源稿;

👉 跑一个 Alist,把家里所有网盘聚合到同一个域名下;

👉 把所有服务都加进~/homelab/各自的子目录,在 Dashboard 统一加路由,让一个 cloudflared 容器带全家桶……

把家里的算力真正用起来,从这篇教程开始。

如果觉得有用,欢迎点赞 + 在看 + 转发,这是我持续输出最大的动力 👇

本文所有命令在Archlinux + Docker上验证通过。 遇到问题欢迎评论区留言,看到必回。

原文地址: https://mp.weixin.qq.com/s?__biz=MzI2NTU0NTI2Nw==&mid=2247484115&idx=1&sn=a742ca7383ee654bc2839c5f96274cf9&chksm=ebf96ac200e087eafbb2597a4d58ee5602a62abfe7bd002019ce408f09417b800da1da866188&mpshare=1&scene=1&srcid=0707GsenvUcMU2T9wGXADUwy&sharer_shareinfo=bbaa79c8e387e8bf85738a70bd32a015&sharer_shareinfo_first=bbaa79c8e387e8bf85738a70bd32a015#rd

相关文章