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