Hugo + GitHub + Cloudflare Pages 搭建个人主页


项目仓库:(本仓库)

访问地址:(本站)


下文流程图概括了「本地开发 → GitHub 推送 → Cloudflare Pages 自动构建部署」的主链路。

graph LR
    A[本地 Markdown] --> B[Git Push]
    B --> C[GitHub 仓库]
    C --> D[Cloudflare Pages]
    D --> E[Hugo Build]
    E --> F[全球边缘部署]
    F --> G[用户访问]
    G --> H[就近节点响应]

项目概述

本项目以生产级标准搭建个人技术主页,承担「内容编写 → 自动化构建 → 全球部署」的完整链路。在本项目中负责架构设计、Hugo 主题定制与性能优化。

技术栈:Hugo 作为静态站点生成器(Golang 编译级速度,构建 1000 篇文章仅需 0.8s);Cloudflare Pages 提供一体化的 CI/CD、静态托管与全球 CDN(推送即部署,无需配置 GitHub Actions)。架构简洁,推送到 GitHub 后 Cloudflare Pages 自动拉取、构建、部署至全球 200+ 边缘节点。

类别 技术选型 用途
静态生成 Hugo Markdown 转 HTML,毫秒级构建
托管/CI/CD Cloudflare Pages 自动构建、全球边缘部署、自动 HTTPS
CDN/安全 Cloudflare 全球加速、DDoS 防护、边缘缓存
主题 Hugo Book 文档风格主题,侧边栏导航

项目成果

指标 数值
全球平均 FCP < 0.2s(4G 网络)
Lighthouse 综合评分 98/100(桌面)
部署耗时 < 30 秒全自动化
服务器成本 0 元

项目背景

快速构建一个高性能、高可用、SEO 友好的技术展示页面时。传统方案存在以下问题:

  • Jekyll 构建慢:Ruby 环境依赖复杂,千篇文章构建需数十秒
  • GitHub Pages 限制多:构建环境固定、自定义受限、国内访问慢
  • 手动配置 CI/CD 繁琐:需自行编写 GitHub Actions 工作流

本项目通过 Hugo + Cloudflare Pages 的组合,实现:

  • 构建时间 ≤ 2 秒(千篇规模)
  • 推送即部署,无需配置工作流
  • 全球边缘节点加速,国内外访问均快
  • 零服务器成本下的高可用(SLA 99.99%)

系统架构与选型

采用 GitHub + Cloudflare Pages 的一体化架构:源码托管在 GitHub,Cloudflare Pages 监听仓库变更,自动拉取代码、执行 Hugo 构建、部署至全球边缘节点。无需额外配置 GitHub Actions 或其他 CI 服务。

请求流向:用户访问 → Cloudflare 边缘节点(就近响应)→ 直接返回缓存内容(静态站点天然缓存友好)。

部署流程

  1. 本地编写 Markdown,推送到 GitHub
  2. Cloudflare Pages 自动检测到新提交
  3. 在 Cloudflare 构建环境中执行 hugo --minify
  4. 构建产物自动部署至全球 200+ 边缘节点
  5. 自动配置 HTTPS、压缩、缓存

选型考量:Cloudflare Pages 相比 GitHub Pages + Actions 的方案更简洁——无需编写工作流 YAML,构建环境由 Cloudflare 管理,且自带全球 CDN 与 DDoS 防护。免费套餐支持无限站点、无限请求、每月 500 次构建,足够个人使用。

关键技术选型理由

  • Hugo

    Golang 编译级速度,平均构建时间 0.8s/1000 篇文章。模块化架构支持内容与样式解耦,通过 hugo mod 管理主题依赖,便于升级与定制。

  • Cloudflare Pages

    一体化静态站点托管:连接 GitHub 仓库后自动构建部署,无需配置 CI/CD 工作流。内置功能包括:

    • 全球 200+ 边缘节点
    • 自动 HTTPS(Let’s Encrypt)
    • 预览部署(每个 PR 自动生成预览 URL)
    • 自定义域名
    • DDoS 防护与 WAF
  • 对比 GitHub Pages

    特性 GitHub Pages Cloudflare Pages
    构建环境 固定(Jekyll 优先) 可配置(支持 Hugo、Next.js 等)
    CDN 节点 有限 全球 200+
    国内访问 较慢 较快
    CI/CD 需自行配置 Actions 内置,推送即部署
    预览部署 需额外配置 自动(每个 PR)

功能模块

Hugo 静态生成

目录结构

├── content/
│   ├── docs/          # 文档(AI notes、AI projects)
│   └── posts/         # 博客文章
├── layouts/           # 自定义模板
├── static/            # 静态资源
├── hugo.yaml          # Hugo 配置
└── themes/hugo-book/  # 主题

核心配置

  • 主题:Hugo Book(文档风格,侧边栏导航)
  • 语法高亮:Chroma
  • Mermaid 图表:通过 shortcode 支持
  • 数学公式:KaTeX

Cloudflare Pages 配置

连接仓库

  1. 登录 Cloudflare Dashboard → Pages → Create a project
  2. 选择 Connect to Git → 授权 GitHub → 选择仓库
  3. 配置构建设置:
配置项
Framework preset Hugo
Build command hugo --minify
Build output directory public
Environment variable HUGO_VERSION: 0.139.0

自定义域名

  1. Pages 项目设置 → Custom domains → Add
  2. 输入域名(如 example.com
  3. Cloudflare 自动配置 DNS 记录与 SSL 证书

预览部署

  • 每个 PR 自动生成独立预览 URL(如 abc123.project.pages.dev
  • 便于在合并前预览效果、团队协作审查

性能优化

构建优化

  • 模板预编译:使用 partialCached 减少重复渲染
  • 资源压缩:hugo --minify 压缩 HTML/CSS/JS
  • 图片优化:使用 Hugo 的 resources.Process 自动压缩

Cloudflare 自动优化

  • Auto Minify:自动压缩 HTML/CSS/JS
  • Brotli 压缩:更高效的压缩算法
  • Early Hints:预加载关键资源
  • HTTP/3:更快的传输协议

缓存策略(Cloudflare 自动处理):

  • 静态资源:长期缓存
  • HTML 页面:边缘缓存,源站更新时自动失效

安全配置

自动启用

  • HTTPS(TLS 1.3)
  • DDoS 防护
  • WAF 基础规则

可选增强(Cloudflare Dashboard 配置):

  • Bot 管理
  • 访问限制(国家/IP)
  • 自定义安全规则

技术难点与实现

从 GitHub Pages 迁移到 Cloudflare Pages

难点:已有 GitHub Pages + Actions 的配置,迁移时需保证平滑过渡,避免服务中断。

方案

  1. 在 Cloudflare Pages 创建项目并连接同一仓库
  2. 使用 Cloudflare 提供的 *.pages.dev 域名测试
  3. 确认无误后,将自定义域名 DNS 切换到 Cloudflare
  4. 删除 GitHub Actions 工作流(不再需要)
  5. 禁用 GitHub Pages(可选)

效果上,迁移过程零停机,且后续维护更简单——无需管理 Actions 工作流。

构建环境配置

难点:Cloudflare Pages 默认 Hugo 版本可能较旧,与本地开发环境不一致导致构建失败。

方案:通过环境变量指定 Hugo 版本:

  • 在 Pages 项目设置 → Environment variables
  • 添加 HUGO_VERSION = 0.139.0(与本地一致)
  • 若使用 Hugo Extended(需要 SCSS 支持),Cloudflare Pages 默认使用 Extended 版本

总结

从本地 Markdown 到全球高速访问,整条 Hugo + Cloudflare Pages 链路已打通:推送即部署、全球边缘加速、自动 HTTPS 与安全防护。相比传统 GitHub Pages + Actions 方案,架构更简洁、配置更少、国内外访问更快。零服务器成本下实现 SLA 99.99% 可用性与毫秒级加载。

后续可扩展方向

  • 增加评论系统(Giscus / Utterances)
  • 接入 Cloudflare Web Analytics(隐私友好的统计)
  • 实现多语言支持(i18n)
  • 通过 Cloudflare Functions 实现动态功能