跳过正文
  1. 文章/

如何用 Hugo、Blowfish、GitHub 和 Cloudflare Pages 部署 MoleLab

·233 字·2 分钟
作者
molefool
目录

MoleLab 的第一版是一个很朴素的静态博客:Hugo 负责生成页面,Blowfish 负责主题,GitHub 保存源码,Cloudflare Pages 负责构建、托管和 HTTPS。

这篇文章记录一下从零搭起来的过程,也顺手写清楚后续维护时要注意的地方。

为什么选这套组合
#

Hugo 的优点是快、简单、生成结果完全静态。博客没有登录、数据库或后台管理,静态站就足够了。

Blowfish 是一个功能比较完整的 Hugo 主题,自带深色模式、搜索、文章列表、多语言切换和比较舒服的排版。MoleLab 目前使用的是 Blowfish 的 background 首页布局。

GitHub 用来保存源码和版本历史。Cloudflare Pages 从 GitHub 拉取代码,每次推送到 main 分支都会自动构建并发布。

本地初始化
#

本地需要安装 Hugo extended 版本。我的环境里使用的是:

hugo version

然后在项目目录初始化站点:

hugo new site . --force
git init -b main

主题使用 Git submodule 管理:

git submodule add https://github.com/nunocoracao/blowfish.git themes/blowfish

因为当前需要 Hugo 0.163.1 无警告构建,而 Blowfish 最新发布版的兼容信息还没更新,所以 submodule 暂时跟踪官方的 hugo-new-version 分支。等 Blowfish 发布包含这次兼容元数据的新版本后,再切回正式 release tag。

配置双语
#

MoleLab 现在是中英文双语站点。中文是默认语言,输出在根路径:

https://molelab.dev/

英文输出在:

https://molelab.dev/en/

核心配置是:

baseURL = "https://molelab.dev/"
defaultContentLanguage = "zh-cn"
defaultContentLanguageInSubdir = false
disableDefaultLanguageRedirect = true

中文内容放在 content/zh-cn,英文内容放在 content/en。同一篇文章在两个语言目录里使用相同路径,Hugo 和 Blowfish 就能把它们识别为互相对应的翻译页面。

推到 GitHub
#

站点源码提交后推到 GitHub:

git add .
git commit -m "Initialize bilingual Hugo Blowfish blog"
git remote add origin https://github.com/molefool/hugo.git
git push -u origin main

之后日常更新就是普通的 Git 流程:本地修改、构建验证、提交、推送。

Cloudflare Pages 配置
#

Cloudflare Pages 连接 GitHub 仓库后,生产分支选择 main

构建命令:

git submodule update --init --recursive && hugo --minify -b https://molelab.dev/

输出目录:

public

环境变量:

HUGO_VERSION = 0.163.1
HUGO_ENV = production

-b https://molelab.dev/ 很重要。它会让 canonical、RSS、站点地图和多语言链接都指向正式域名,而不是临时的 pages.dev 域名。

绑定自定义域名
#

Cloudflare Pages 部署成功后,在项目里进入“自定义域”,添加 molelab.dev

如果域名 DNS 也托管在 Cloudflare,Cloudflare 会自动处理记录和证书。等待状态变成 active 后,访问 https://molelab.dev/ 就会进入 Pages 部署出来的站点。

常见坑
#

第一类坑是主题 submodule。Cloudflare 构建时必须能拿到主题代码,所以构建命令里要先执行:

git submodule update --init --recursive

第二类坑是 Hugo 版本。Hugo 更新很快,主题有时会滞后一小步。构建前最好本地跑一次:

hugo --gc --minify

第三类坑是 baseURL。正式域名确定后,要让本地配置和 Cloudflare 构建命令都使用同一个域名。

中国大陆访问速度怎么优化
#

MoleLab 现在用的是 Cloudflare Pages 免费方案。它的优点是省心、免费、自动 HTTPS、全球边缘网络和 Git 自动部署。但对于中国大陆访问,它不保证稳定,也不等同于国内 CDN。

免费轻量优化可以先做这些:

  • 尽量保持纯静态页面,不引入大前端框架。
  • 图片压缩后再上传,少用超大背景图。
  • CSS、JS、图片使用长缓存,HTML 保持短缓存。
  • Cloudflare 里开启 Brotli、HTTP/3、Early Hints 等免费性能选项。
  • 使用正式 baseURL,避免资源和 canonical 链接绕到临时域名。

这些优化能减少请求量和传输体积,但解决不了所有线路问题。如果以后 MoleLab 的主要读者在中国大陆,真正稳定的路线通常是备案后使用国内云厂商或国内 CDN;折中路线是保留 Cloudflare Pages,同时增加国内镜像,比如对象存储加 CDN,或者试用对大陆网络更友好的静态托管平台。

现阶段我会先保持这套免费方案,把内容和站点结构打磨好。速度优化先做低成本项,等内容多起来、访问数据明确之后,再决定要不要上国内镜像。