开博第一篇 用Hugo在Cloudflare Pages上部署自己的技术博客

记录hugo博客部署的过程

1. 方案概述

组件 用途
Cloudflare Pages 静态网站托管(全球 CDN、免费无限带宽)
Hugo 静态网站生成器(Markdown → HTML)
Wrangler Cloudflare CLI 工具(本地部署)

工作流:本地写 Markdown → Hugo 构建 → Wrangler 部署 → 上线


2. 安装 Hugo

安装 Hugo

在这个网页获取hugo的最新安装版本,注意是要extended的,避免一些主题不支持:

https://github.com/gohugoio/hugo/releases

因为我是wsl2的环境(推荐),当前我选择:

https://github.com/gohugoio/hugo/releases/download/v0.159.0/hugo_extended_0.159.0_linux-arm64.deb

# Ubuntu/WSL - 安装最新版
wget https://github.com/gohugoio/hugo/releases/download/v0.159.0/hugo_extended_0.159.0_linux-arm64.deb
sudo dpkg -i hugo_extended_0.159.0_linux-arm64.deb

# 验证
hugo version

创建新站点

# 创建站点
hugo new site my-blog
cd my-blog

# 初始化 Git 仓库
git init

基础配置 (hugo.toml)

baseURL = 'https://your-domain.pages.dev' # 需要注意的是,后续一定要修改过来,否则文章点击跳转不到文章
languageCode = 'zh-CN'
title = '我的技术博客'
theme = 'PaperMod'

[params]
  author = '你的名字'
  description = '分享技术、记录成长'
  ShowReadingTime = true
  ShowShareButtons = true
  ShowPostNavLinks = true

[menu]
  [[menu.main]]
    identifier = 'posts'
    name = '文章'
    url = '/posts/'
    weight = 10
  [[menu.main]]
    identifier = 'tags'
    name = '标签'
    url = '/tags/'
    weight = 20
  [[menu.main]]
    identifier = 'about'
    name = '关于'
    url = '/about/'
    weight = 30

3. 安装 Wrangler

npm install -g wrangler

# 验证
wrangler --version

Wrangler 部署到 Cloudflare Pages 时,不同 branch 的行为差异如下:

Branch 类型与部署行为

Branch 部署结果 访问 URL 用途
main / master 生产环境 https://your-project.pages.dev 正式站点
其他分支 (如 dev, feature-x) 预览环境 https://[branch-name].your-project.pages.dev 测试/预览

具体示例

# 当前在 main 分支
git checkout main
wrangler pages deploy public
# 结果: 部署到生产环境 https://my-blog.pages.dev

# 切换到 dev 分支
git checkout -b dev
# 修改内容...
wrangler pages deploy public
# 结果: 部署到预览环境 https://dev.my-blog.pages.dev

关键特性

1. 预览部署(非 main 分支)

  • 自动生成唯一 URL
  • 不影响生产环境
  • 适合代码审查、内容预览
  • 支持密码保护(可在 Cloudflare Dashboard 设置)

2. 生产部署(main/master)

  • 部署到主域名
  • 触发自动构建(如绑定了 Git)
  • 可配置自定义域名

常用工作流

# 1. 开发新功能
git checkout -b feature/new-post
# 编辑内容...
wrangler pages deploy public
# 获得预览链接: https://feature-new-post.my-blog.pages.dev

# 2. 分享给团队/朋友预览
# 发送预览链接,确认无误后...

# 3. 合并到主分支
git checkout main
git merge feature/new-post
wrangler pages deploy public
# 正式环境更新

Git 集成 vs Wrangler 手动部署

方式 Branch 行为
Git 集成(推荐) 自动部署:push 到 main → 生产;push 到其他分支 → 预览
Wrangler CLI 手动指定:当前 branch 决定部署目标

强制指定分支(高级)

# 无论当前 git branch 是什么,强制作为特定分支部署
wrangler pages deploy public --branch=main        # 强制生产
wrangler pages deploy public --branch=preview    # 强制预览

场景建议

作为技术博客,推荐 Git 集成 工作流:

  1. GitHub/GitLab 连接 Cloudflare Pages
  2. Push 到 main → 自动生产部署
  3. Push 到 draft → 自动预览部署(不公开)

这样无需手动运行 wrangler,且预览链接可分享审稿。


4. 获取 API Token

  1. 访问 https://dash.cloudflare.com/profile/api-tokens
  2. Create TokenCustom token
  3. 权限设置:
权限 设置 中文界面
Account Cloudflare Pages Cloudflare Pages
User User Details 用户详细信息
User Memberships 成员资格

权限配置图(中文界面)

  1. 复制 Token

5. 验证 Token

export CLOUDFLARE_API_TOKEN=你的Token
wrangler whoami

成功显示账户信息即有效。


6. 安装主题

# 进入博客目录
cd 你的博客目录

# 添加 PaperMod 主题
git init
git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod

# 启用主题(已在 hugo.toml 中设置 theme = 'PaperMod')

7. 更新文章

创建新文章

hugo new content/posts/文章名.md

文章模板格式

---
title: "文章标题"
date: 2026-03-25T00:21:00+08:00
draft: false
tags: ["标签1", "标签2"]
categories: ["分类"]
description: "文章摘要"
---

正文内容,支持 **Markdown** 语法。

## 二级标题

- 列表项
- 列表项

![图片描述](images/photo.jpg)

本地预览

hugo server -D
# 访问 http://localhost:1313

部署

hugo && wrangler pages deploy public --project-name=你的项目名

8. 便捷写作模板

创建 archetypes/default.md(新建文章自动套用):

---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
tags: []
categories: []
description: ""
---

## 引言

<!-- 简介 -->

## 正文

<!-- 主要内容 -->

## 总结

<!-- 结论 -->

---

**参考链接**
- 

9. Hugo 图片管理方式

方式1:Page Bundles(推荐 ⭐)

这是 Hugo 0.32+ 引入的最佳实践,将文章和相关资源放在同一文件夹。

content/
└── posts/
    └── my-article/           ← 文件夹(不再是 .md 文件)
        ├── index.md          ← 文章主体
        ├── image1.png        ← 图片放在同目录
        ├── diagram.jpg
        └── screenshot.png

markdown 中引用:

<!-- 相对路径引用 -->
![图片描述](image1.png)

<!-- 或使用 Hugo 的 figure 短代码 -->


系统架构图
系统架构图

方式2:静态资源文件夹

适合全局共享的图片(如 Logo、头像、公共图表):

static/
├── images/
│   ├── logo.png
│   ├── avatar.jpg
│   └── common/
│       └── workflow.png
└── favicon.ico

markdown 中引用:

<!-- 路径从 static 开始算 -->
![Logo](/images/logo.png)
![头像](/images/avatar.jpg)

方式3:Assets 文件夹(需要处理)

适合需要 Hugo 处理的图片(压缩、调整大小):

assets/
└── images/
    └── photo.jpg

需要使用 Hugo 的资源处理功能,配合 resources.Get 使用。

推荐工作流

作为技术博客,建议这样组织:

content/
├── posts/
│   └── 2026/
│       └── 03-embedded-system/      # 文章 bundle
│           ├── index.md
│           ├── hardware-setup.jpg
│           └── debug-screenshot.png
└── about/
    ├── index.md
    └── profile-photo.jpg            # 个人照片

static/
└── images/
    ├── site-logo.png                # 站点 Logo
    └── common-icons/                # 通用图标

总结:

  • 文章专属图片 → 用 Page Bundles(同文件夹)
  • 站点共享图片 → 放 static/images/
  • 需要处理的图片 → 放 assets/(高级用法)

10. 完整工作流总结

步骤 命令/操作
新建文章 hugo new content/posts/xxx.md
本地编辑 用 VS Code/Typora/Obsidian
本地预览 hugo server
构建 hugo
部署 wrangler pages deploy public --project-name=xxx

Windows 一键脚本deploy.bat):

@echo off
hugo && wrangler pages deploy public --project-name=xxx
Built with Hugo
Theme Stack designed by Jimmy