timemeet

改造我的静态博客

目录

上一篇《从hexo转向hugo》还是 2023 年的事。三年过去,博客还开着,但早就想动手大修一次:主题是别人的、部署是半自动的、构建时常抽风。这个夏天终于把它收拾成了自己想要的样子,记一笔。

一、换主题:自己写一套

之前的 Ananke 主题是官方推荐里的常客,够用,但满大街都是这张脸,而且它依赖 dart-sass——我的 CI 环境装不上这套东西,构建接连失败,是压垮耐心的最后一根稻草。

干脆自己写了一套,方向是「简洁、现代、科技感」:

  • 配色走中性灰阶加一个青色强调色,跟随系统自动切换明暗模式
  • 字体用系统字体栈:无衬线做正文,等宽字体做日期、导航这些点缀,不加载任何外部字体
  • 零 JavaScript,纯 CSS 响应式布局,连语法高亮都是 Hugo 构建期生成的静态 class

代价和收益都很直观:失去了主题市场的一键换装,换来了整站构建 17 毫秒,和一种「每个像素都自己说了算」的踏实。

二、理顺部署:一条命令

老流程是本地 hugo 构建完手动推产物,容易漏、容易错——最经典的一次事故是根目录的 CNAME 文件根本不会被 Hugo 复制进产物,域名绑定悄悄失效,站点走了很久的兜底通道都没发现。

现在的链路收敛进一个 deploy.sh,一趟能跑完三步:

  1. 本地构建——Hugo 版本钉死在 0.164.0,每台机器装同一个版本,杜绝「我这能构建你那不行」;
  2. 产物直推——构建出的静态页面提交到 pages 仓库的 master 分支,GitHub Pages 直接从这个分支对外服务,仓库里看到什么,线上就是什么
  3. 源码归档——工程源码整体镜像到另一个私有仓库,公开仓库里只放最终页面,干净利落。

中间没有云端流水线,也就没有流水线抽风。

三、域名与线路:.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 就少一层心事。一条路,通了就是通了。

四、写作流程(写给未来的自己)

怕下次开写又忘了流程,把日常操作记在这里:

  1. content/posts/ 下新建一个 Markdown,文件名用日期(如 20260823.md),开头三行 front matter:标题、日期、draft: false
  2. 正文随意写,图片丢进 static/pic/<日期>/,正文里用 /pic/<日期>/xx.jpg 引用;
  3. ./deploy.sh "文章标题",然后去倒杯水。

生效时间实测:GitHub Pages 约一分钟(分支部署)。首页的篇数计数、归档页的按年分组都是模板自动生成的,不用手动维护。

尾声

博客这种东西,架构再精致,不写就只是个空壳。三年只产出两篇的教训摆在眼前。这次改造把写一篇文章的成本压到了「一个文件、一条命令」,剩下的,就看笔了。