我一直用 Obsidian 写笔记,积累多了便想整理分享出来——有时一点经验能帮别人省不少时间。起初发在 CSDN,后来发现自己的文章被平台擅自设为付费阅读,这让我很不爽,于是萌生了自建博客的念头。
调研了一番,确定采用 Hugo (PaperMod) + Cloudflare Pages 的方案,因为其能满足我“高效、美观且自动化”的需求;
为什么选择 Hugo?
常见的静态博客生成器有 Hexo、Jekyll、Hugo 等,我选择 Hugo 的原因:
Hugo 是一个用 Go 语言编写的静态网站生成器,以构建速度快著称。它可以将 Markdown 文件转换为静态 HTML 页面,非常适合搭建博客、文档站点等。
| 对比项 | Hugo | Hexo | Jekyll |
|---|---|---|---|
| 构建速度 | 极快(毫秒级) | 较慢 | 较慢 |
| 依赖环境 | 单二进制文件,无依赖 | 需要 Node.js | 需要 Ruby |
| 主题生态 | 丰富,PaperMod 简洁美观 | 丰富 | 一般 |
| 学习成本 | 中等 | 低 | 中等 |
Hugo 最大的优势是快——哪怕有几百篇文章,构建也只需几秒。而且只需要一个可执行文件,不用折腾 Node.js 或 Ruby 环境。
为什么选择 Cloudflare Pages?
静态博客常见的托管方案有 GitHub Pages、Vercel、Netlify、Cloudflare Pages 等。
| 对比项 | Cloudflare Pages | GitHub Pages | Vercel / Netlify |
|---|---|---|---|
| 国内速度 | 快(全球 CDN) | 较慢 | 一般 |
| 自动 HTTPS | ✅ | ✅ | ✅ |
| 带宽限制 | 无限制 | 100GB/月 | 有免费额度 |
| 构建速度 | 快 | 一般 | 快 |
| 自定义域名 | 免费 | 免费 | 免费 |
Cloudflare 的全球 Anycast 网络让国内用户也能有不错的访问体验,而且完全免费、无带宽限制。
为什么选择 PaperMod 主题?
Hugo 主题选择
Hugo 主题很多,PaperMod 是目前最受欢迎的主题之一,我选择它的理由:
- 简洁美观:无冗余设计,阅读体验好
- 加载飞快:无第三方依赖,体积小
- 深色模式:原生支持明暗切换
- 响应式布局:移动端适配完美
- 高度可定制:配置项丰富,易于扩展
- 文档完善:官方 Wiki 详尽,社区活跃
流程梳理
| 阶段 | 核心任务 | 关键点 |
|---|---|---|
| 环境搭建 | 安装 Hugo Extended | 必须是 Extended 版本以支持 SCSS |
| 项目初始化 | 创建站点并引入主题 | 推荐以 git submodule 形式引入 PaperMod |
| 站点配置 | 修改 config.yaml | 配置 baseurl、菜单及 PaperMod 特有参数 |
| 内容创作 | 编写 Markdown | 规范的 Frontmatter 是关键 |
| 自动部署 | 配置 Cloudflare Pages | 连接 GitHub 仓库实现自动构建 |
1. 环境搭建与初始化
Hugo 安装
1. 下载 Hugo Extended
前往 Hugo Releases 页面,下载适合你系统的 Extended 版本(文件名包含 extended)。
⚠️ 必须选择 Extended 版本,否则无法编译 PaperMod 主题的 SCSS 样式文件。
2. 解压并配置环境变量
将下载的压缩包解压到任意目录(如 D:\Tools\hugo),然后将该目录添加到系统 PATH 环境变量中。
3. 验证安装
打开终端,运行以下命令确认安装成功:
| |
输出应包含 +extended 后缀,例如:hugo v0.140.0+extended windows/amd64 ...
创建项目
1. 创建 Hugo 站点
| |
创建一个名为 DeerBlog 的站点骨架,会自动生成 content/、themes/、config.toml 等目录结构。
2. 进入站点目录
| |
3. 初始化 Git 仓库
| |
后续用于版本管理和推送到 GitHub。
4. 引入 PaperMod 主题
| |
以 子模块 形式引入主题。--depth=1 表示浅克隆(只拉取最新一次提交),节省下载时间和空间。主题会被放到 themes/PaperMod 目录下。
💡 为什么用 submodule?
子模块让主题与你的站点代码分离,方便后续通过git submodule update --remote一键更新主题,而不会弄乱你的自定义修改。
当然,你也可以直接克隆主题仓库到themes/PaperMod,但那样每次更新主题都需要手动操作。
5. 配置主题
在 config.yaml 中设置 theme: PaperMod。
2. 关键配置 (config.yaml)
PaperMod 提供丰富的自定义参数,以下是本站的核心配置示意:
| |
本站开启了 buildFuture: true,允许发布日期晚于当前时间的文章,方便提前排期。
3. Cloudflare Pages 部署
这是最核心的部分。Cloudflare Pages 可以直接连接你的 GitHub 仓库,每次推送代码后自动构建并部署。
3.1 创建 Cloudflare Pages 项目
- 登录 Cloudflare Dashboard
- 左侧菜单选择 Workers & Pages
- 点击 Create → Pages → Connect to Git
- 首次使用需授权 Cloudflare 访问你的 GitHub
- 选择你的 Hugo 源码仓库(如
DeerBlog) - 点击 Begin setup
3.2 配置构建设置
在构建配置页面,填写以下信息:
| 配置项 | 值 |
|---|---|
| Project name | deermiya(将决定默认域名) |
| Production branch | main |
| Framework preset | Hugo |
| Build command | hugo --minify |
| Build output directory | public |
3.3 设置环境变量
展开 Environment variables 部分,添加:
| 变量名 | 值 | 说明 |
|---|---|---|
HUGO_VERSION | 0.140.0 | 指定 Hugo 版本,避免构建问题 |
⚠️ 重要:Cloudflare 默认的 Hugo 版本可能较旧,必须手动指定版本号。可在本地运行
hugo version查看你正在使用的版本。
点击 Save and Deploy,等待首次构建完成。
3.4 绑定自定义域名
- 进入项目设置页 → Custom domains
- 点击 Set up a custom domain
- 输入你的域名(如
deermiya.com) - 按提示添加 DNS 记录:
- 如果域名托管在 Cloudflare:系统会自动配置
- 如果在其他平台:需手动添加 CNAME 记录指向
<project>.pages.dev
4. 写作与发布流
- 新建文章:
hugo new post/2026/工具教程/xx.md - 本地预览:
hugo server -D - 推送发布:推送后,Cloudflare Pages 会自动构建,通常 30 秒内即可完成部署。
1 2 3git add . git commit -m "feat: add new post about hugo" git push origin main
5. 常见问题
构建失败:Hugo 版本不匹配
确保在环境变量中设置了正确的 HUGO_VERSION。
子模块(主题)拉取失败
Cloudflare Pages 默认支持 git submodule,但如果遇到问题,可以在构建命令前添加:
| |
样式/SCSS 编译失败
确认本地使用的是 Hugo Extended 版本,Cloudflare 会自动使用对应的 Extended 版本。
相关阅读: