本文记录如何利用本地硬件(Mac mini)配合 Cloudflare 边缘网络,在不开启路由器入站端口的前提下,构建一个具备公网访问能力的 AI 博客与后端服务系统。
1. 基础设施成本与选型#
域名采购
- 成本:在 Cloudflare 注册/转入域名(如
frank-zhang.com)仅需$10.42/yr(按批发价提供,无加价)。 - 优势:直接集成在 Cloudflare 生态内,简化 DNSSEC 和隧道配置。
为什么选择 Cloudflare?
- Free Plan 额度慷慨:对于个人工程师,免费版已涵盖无限流量的 Tunnel、基础 WAF 和 CDN。
- 零信任安全 (Zero Trust):Tunnel 采用由内向外的连接方式,隐藏源站真实 IP,彻底规避 DDoS 攻击。
- 全球 CDN 加速:利用 Anycast 技术,手机端访问
www或ai子域名时自动连接最近的边缘节点。
2. 逻辑架构 (Logical Architecture)#
- Endpoint: Mac mini (M-series)
- Stack:
- Port 1313: Hugo (Static Site)
- Port 6180: FastAPI +
uv(AI Agent Backend)
- Tunnel:
cloudflared进程作为 Connector 将本地端口映射至公网 Hostname。
3. 部署步骤 (Step-by-Step)#
A. 环境初始化#
# 1. 安装驱动
brew install cloudflared
cloudflared tunnel login
# 2. 创建隧道
cloudflared tunnel create mac-vpsB. Ingress 规则配置 (config.yml)#
在 ~/.cloudflared/ 下编辑配置文件,实现流量分发:
tunnel: <TUNNEL_ID>
credentials-file: /Users/<USER>/.cloudflared/<TUNNEL_ID>.json
ingress:
- hostname: www.frank-zhang.com
service: http://localhost:1313
- hostname: ai.frank-zhang.com
service: http://localhost:6180
- service: http_status:404C. 路由生效#
cloudflared tunnel route dns mac-vps www.frank-zhang.com
cloudflared tunnel route dns mac-vps ai.frank-zhang.com4. 后端持久化方案 (Production Ready)#
手动运行 hugo server 或 uv run 仅适合测试。生产环境下,需确保系统重启后服务自动拉起:
- Tunnel: 执行
sudo cloudflared service install将其挂载为系统守护进程。 - App 层: 使用 PM2 管理 Python 环境与静态服务:
pm2 start "uv run uvicorn main:app --port 6180" --name "ai-backend"
pm2 start "hugo server --bind 0.0.0.0 --port 1313" --name "hugo-blog"
pm2 save5. 结论#
该方案在保障数据主权(数据不出本地)的同时,利用 Cloudflare 实现了工业级的公网发布能力。它为部署基于 RAG 的保险知识库或本地自治智能体(AI Agents)提供了稳健的基础设施底座。
工程师建议 在执行
hugo构建命令前,务必检查hugo.toml中的baseURL是否已更新为https://www.frank-zhang.com/,否则部分静态资源(JS/CSS)在公网环境下可能会加载失败。