今晚把博客从 Solitude 旧版升级到了 v4,并接通了 GitHub Actions 自动部署到 alyzg。记录一下关键步骤和踩到的坑。

升级主题

原来的 Solitude 是本地源码目录,版本停留在 3.x。官方 v4 已改为 npm 包发布,所以直接:

1
npm install hexo-theme-solitude@4

然后删掉旧的 themes/solitude/ 目录,避免冲突。_config.solitude.yml 的顶层配置键与 v4 默认配置完全对应,不需要迁移。

自动部署链路

参考 Telegram Bot 的部署方式,新增 .github/workflows/deploy.yml

  • push main 触发
  • npm ci 安装依赖
  • hexo clean && hexo generate 构建
  • scp public/* 到 alyzg 的 /var/www/blog
  • ssh 执行 nginx -t && systemctl reload nginx

GitHub Secrets 配置了 HOSTUSERNAMESSH_PRIVATE_KEYTARGET_DIR

踩坑:CSS 文件 0 字节

部署后发现页面没有样式,控制台也没报 JS 错。查服务器上的 css/index.css,竟然是 0 字节

本地复现后定位到原因:_config.solitude.ymlcss_prefix: true,这会让主题 @import 'nib' 做 CSS 前缀自动补全。但 nib@1.2.0 与当前 stylus@0.62.0 不兼容,stylus 编译失败,Hexo 静默输出了空 CSS。

解决方式很直接:

1
css_prefix: false

现代浏览器基本不再需要这类 Legacy 前缀补全,关掉后 CSS 正常生成(220K 左右)。

域名与证书

域名使用根域 zhuonian.xyz,并额外解析了 wwwblog 两个子域。三台主机共用同一个 nginx server 块,certbot 申请证书时覆盖三个域名:

1
certbot --nginx -d zhuonian.xyz -d www.zhuonian.xyz -d blog.zhuonian.xyz

blog.zhuonian.xyz 选择同台展示,而不是 301 跳转到根域。

当前状态

  • https://zhuonian.xyz 可正常访问
  • https://blog.zhuonian.xyz 同台展示
  • 本地 push 后 Actions 自动部署

后续只剩内容填充了。