(注: 本文只讲 cloudflare+域名流程,docker镜像默认会,实在不知道,都可以问下 ai )
Cloudflare部署流程
【tip】:内网穿透可以直接将本地服务(如 FastAPI)暴露到公网,无需公网 IP 或端口映射,就不说了,直接买域名本文
(阿里注册域名 + Cloudflare托管DNS + Docker部署项目)是目前非常流行且性价比很高的一套方案,对于个人开发者、中小型项目来说,是一个很稳妥的选择
✅ 这套方案的主要优点
- 省钱又省心 (Cloudflare免费CDN与安全) :Cloudflare最吸引人的就是它的免费套餐。你把域名DNS托管过来后,不仅能享受到全球的CDN加速,还能免费获得DDoS防护和基础的安全规则。这相当于给项目加了一层免费的“防护罩”,一般的小型攻击都不怕。
- 没有公网IP也能用 (内网穿透) :如果你的项目是部署在家用宽带或没有公网IP的服务器上,Cloudflare Tunnel(以前叫Argo Tunnel)是一个非常优雅的解决方案。通过Docker运行
cloudflared,你可以把本地服务安全地暴露到公网,既不用在路由器上做端口转发,也不用担心原IP地址会变。 - IP变了也不怕 (DDNS动态解析) :对于使用了家庭宽带的用户,即使没有用Tunnel,也可以通过DDNS-GO这类工具,把变化的公网IP自动更新到Cloudflare的DNS记录上。这样一来,即使运营商给你分配了动态IP,你的域名也总能解析到正确的地址,非常适合在NAS或树莓派上搭建服务。
- 一站式管理,体验流畅:把域名注册和解析分开是很成熟的做法。在阿里云完成实名和注册后,只需把DNS服务器指向Cloudflare,后续所有的DNS记录管理、流量监控、安全设置都在Cloudflare一个平台上完成,体验非常直观。
流程总结
本地服务 (localhost:8000)
│
▼
Cloudflared 隧道 (defaulttunnel)
│
▼
Cloudflare DNS + HTTPS
│
▼
域名访问 (xxx / www.xxx / abc.xxx)
一. 基本条件
-
已注册阿里云域名 xxx
-
Windows 系统
-
本地服务运行端口(示例:
localhost:8000) -
Cloudflare 账户
二. 安装 Cloudflared
2.1 官网下载 cloudflare.exe
1.1.下载 Cloudflared Windows 版本:官方文档
1.2.放到固定目录,例如:
```
C:\cloudflared\cloudflared.exe
cd C:\cloudflared
.\cloudflared.exe --version
```
1.3.验证是否安装成功
我是通过 winget install --id Cloudflare.cloudflared 下载,找的exe文件挪过来,方便好找一些
2.2 winget 下载
Windows 包管理器 (winget) 的一个核心命令,作用就是从命令行快速、自动地安装各种 Windows 应用程序
我是通过这种方式下载的,自动加在了电脑环境变量,我就不用上面这种了,都一样的
winget install --id Cloudflare.cloudflared
三. 域名购买(阿里云)
1.1.打开阿里云域名页面:
wanwang.aliyun.com
1.2.搜索域名:xxx → 选择可用 → 加入购物车 → 购买
1.3.填写注册信息
1.4.验证域名状态:
控制台 → 域名 → 我的域名 → 状态:正常,实名认证:已通过
账号信息:手机号 + 邮箱 + 密码 域名持有者:真实姓名 + 身份证号 实名认证:上传身份证 + 人脸识别 付款方式:支付宝 / 微信 / 银行卡 隐私保护:建议开启 购买年限:1年即可
四. Cloudflare 接入
4.1 基本流程
1.1.注册或登录 Cloudflare:dash.cloudflare.com
1.2.添加域名:xxx
1.3.选择 Free 套餐,我选择的免费
1.4.Cloudflare 会生成 2 个 DNS 地址,例如:ns1.cloudflare.com ns2.cloudflare.com
1.5.回到阿里云 → 域名 DNS 设置 → 替换为 Cloudflare 提供的 DNS → 保存
1.6.等待 DNS 生效(5-30 分钟)
4.2 证书SSL/TLS配置
dash.cloudflare.com/36a22f9a5c6…
1.1.cloudflare 仪表盘填完域名后,选择域名看到 SSL/TLS,进入 origin
1.2.配置:
- Key format : 选择 pem
- Hosts:自动的生成(agentcore,art,*.agentcore.art)
- 下载 cert.pem ,点击下载只能进去看到公钥
- 我们直接 cloudflared tunnel login,他会自动下载到 .cloudflare 文件夹下
文件内长这样
-----BEGIN ARGO TUNNEL TOKEN-----
.............
-----END ARGO TUNNEL TOKEN-----
// 没有证书报错
C:\cloudflared>cloudflared tunnel create defaulttunnel
failed to create tunnel: couldn't create client to talk to Cloudflare Tunnel backend: Error decoding origin cert: missing token in the certificate
1.3 设置环境变量
setx TUNNEL_ORIGIN_CERT "C:\Users<用户名>.cloudflared\cert.pem"
// 不设置会报错
C:\Users\15690>cloudflared tunnel create defaulttunnel 2026-03-29T09:34:05Z ERR Cannot determine default origin certificate path. No file cert.pem in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp]. You need to specify the origin certificate path by specifying the origincert option in the configuration file, or set TUNNEL_ORIGIN_CERT environment variable originCertPath= failed to create tunnel: couldn't create client to talk to Cloudflare Tunnel backend: Error locating origin cert: client didn't specify origincert path
五. Cloudflared Tunnel 配置
5.1创建 Tunnel
5.1.1基本流程
C:\cloudflared cloudflared tunnel create defaulttunnel
成功会输出
Created tunnel with id Tunnel credentials written to C:\Users<用户名>.cloudflared.json
【tip] 在这里我会遇到一个报错:
原因是我在配置完 dash.cloudflare.com/36a22f9a5c6… 证书之后右侧的 download 无法下载,我就复制了密钥通过 txt 改成 pem
怎么解决呢?
1.1.重新走一遍官方认证流程,生成一个全新的、完整的 cert.pem 文件
1.2.删除 C:\Users\15690.cloudflared\cert.pem
1.3.重新登录以获取新证书 cloudflared tunnel login
1.4.在浏览器中,选择你之前添加了 agentcore.art 域名的 Cloudflare 账户,并完成授权。之后,cloudflared 会自动在刚才的目录下生成一个全新的、正确的 cert.pem 文件
C:\cloudflared>cloudflared tunnel create defaulttunnel failed to create tunnel: couldn't create client to talk to Cloudflare Tunnel backend: Error decoding origin cert: missing token in the certificate
5.1.2创建成功
命令:cloudflared tunnel create defaulttunnel
tunnel 创建成功,973be01e-81a3-4f83-8a14-ae49388a9594 就是 tunnelId
文件自动创建在 C:\Users\15690.cloudflared\973be01e-81a3-4f83-8a14-ae49388a9594.json
C:\cloudflared>cloudflared tunnel create defaulttunnel
Tunnel credentials written to C:\Users\15690.cloudflared\973be01e-81a3-4f83-8a14-ae49388a9594.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel defaulttunnel with id 973be01e-81a3-4f83-8a14-ae49388a9594
2026-03-29T10:08:17Z WRN Your version 2025.8.1 is outdated. We recommend upgrading it to 2026.3.0
5.2配置 DNS records
DNS记录是什么?
DNS记录就像是互联网的“电话簿”或“地址簿”。它的核心作用是把人们容易记忆的域名(比如 agentcore.art)和电脑能识别的IP地址(比如 192.0.2.1)连接起来。你配置DNS记录,就是在告诉全球的网络:“当用户访问我的某个域名时,应该把他们引导到哪个服务器去”。
5.2.1网页手动配置
dash.cloudflare.com/36a22f9a5c6…
-
Type(记录类型):定义了这条记忆的功能,比如指向 ip 地址,还是指向另一个域名
-
Name / Hostname(主机记录):指定这条记录作用于域名的哪个前缀
-
@: 代表主域名本身,如 xxx
-
www:www.xxx
-
*:匹配 xx.xxx
-
IPv4 地址:按照指导填的 973be01e-81a3-4f83-8a14-ae49388a9594.cfargotunnel.com
-
Proxy status(代理状态):默认开启,cloudflare特有的,决定是否让流量经过 cloudflare 的全球网络进行加速和安全防护
-
TTL(生存时间):默认为 auto,告诉各地DNS服务器,这条记录可以缓存多久(s),即修改后多久能全球生效
-
5.2.2命令行
执行成功后,cloudflared 会自动在 Cloudflare 的 DNS 记录中为你添加好所需的 CNAME 记录,将 www.xxx 指向你的隧道
cloudflared tunnel route dns defaulttunnel www.xxx
5.3运行 tunnel
5.3.1.命令行
可以先查隧道列表:cloudflared tunnel list
cloudflared tunnel --url http://localhost:8000 run defaulttunnel
5.3.2.使用配置文件及运行
单隧道 + 多域名/服务(推荐)
文件:config.yml
命令:cloudflared tunnel run defaulttunnel
tunnel: defaulttunnel
credentials-file: C:\Users\15690.cloudflared\973be01e-81a3-4f83-8a14-ae49388a9594.json
ingress:
- hostname: xxx
service: http://localhost:8000
- hostname: www.xxx
service: http://localhost:8000
- hostname: api.xxx
service: http://localhost:8000
- service: http_status:404
多隧道
配置多个 config-xxx.yml 文件
命令:cloudflared tunnel --config C:\Users\15690.cloudflared\config-defaulttunnel.yml run