改造我的静态博客
目录
上一篇《从hexo转向hugo》还是 2023 年的事。三年过去,博客还开着,但早就想动手大修一次:主题是别人的、部署是半自动的、构建时常抽风。这个夏天终于把它收拾成了自己想要的样子,记一笔。
一、换主题:自己写一套
之前的 Ananke 主题是官方推荐里的常客,够用,但满大街都是这张脸,而且它依赖 dart-sass——我的 CI 环境装不上这套东西,构建接连失败,是压垮耐心的最后一根稻草。
干脆自己写了一套,方向是「简洁、现代、科技感」:
- 配色走中性灰阶加一个青色强调色,跟随系统自动切换明暗模式
- 字体用系统字体栈:无衬线做正文,等宽字体做日期、导航这些点缀,不加载任何外部字体
- 零 JavaScript,纯 CSS 响应式布局,连语法高亮都是 Hugo 构建期生成的静态 class
代价和收益都很直观:失去了主题市场的一键换装,换来了整站构建 17 毫秒,和一种「每个像素都自己说了算」的踏实。
二、理顺部署:一条命令
老流程是本地 hugo 构建完手动推产物,容易漏、容易错——最经典的一次事故是根目录的 CNAME 文件根本不会被 Hugo 复制进产物,域名绑定悄悄失效,站点走了很久的兜底通道都没发现。
现在的链路收敛进一个 deploy.sh,一趟能跑完三步:
- 本地构建——Hugo 版本钉死在 0.164.0,每台机器装同一个版本,杜绝「我这能构建你那不行」;
- 产物直推——构建出的静态页面提交到 pages 仓库的 master 分支,GitHub Pages 直接从这个分支对外服务,仓库里看到什么,线上就是什么;
- 源码归档——工程源码整体镜像到另一个私有仓库,公开仓库里只放最终页面,干净利落。
中间没有云端流水线,也就没有流水线抽风。
三、域名与线路:.me 的宿命
timemeet.me 是个 .me 域名,没办法做 ICP 备案,所以境内 CDN 的选项天然受限。
最初的设想挺复杂:DNS 按线路分流,境内走 EdgeOne、境外走 GitHub Pages,两套记录精确制导。后来想通了:分流的维护成本大于收益。排查这次域名事故还顺带挖出一段陈年往事:2023 年从 hexo 迁过来那阵用过 Cloudflare Pages 部署,后来切到 GitHub Pages 时旧绑定没拆干净——它还挂在仓库上,跟着每次提交自动构建,主域名的流量其实一直被这个旧部署半路截走,GitHub Pages 反而在给它「陪跑」。EdgeOne 整条腿连同部署脚本、CLI 一并退役,Cloudflare 上那个旧 Pages 项目也一并清掉,最终收敛成一个简单模型——
站点地址 = https://timemeetme.github.io/ (仓库 master 分支即线上页面)
自定义域名也一并放弃:github.io 原生地址自带 HTTPS 与全球 CDN,少一层 DNS 就少一层心事。一条路,通了就是通了。
四、写作流程(写给未来的自己)
怕下次开写又忘了流程,把日常操作记在这里:
- 在
content/posts/下新建一个 Markdown,文件名用日期(如20260823.md),开头三行 front matter:标题、日期、draft: false; - 正文随意写,图片丢进
static/pic/<日期>/,正文里用/pic/<日期>/xx.jpg引用; - 跑
./deploy.sh "文章标题",然后去倒杯水。
生效时间实测:GitHub Pages 约一分钟(分支部署)。首页的篇数计数、归档页的按年分组都是模板自动生成的,不用手动维护。
尾声
博客这种东西,架构再精致,不写就只是个空壳。三年只产出两篇的教训摆在眼前。这次改造把写一篇文章的成本压到了「一个文件、一条命令」,剩下的,就看笔了。