1421 字
7 分钟
- 次浏览
把博客改回静态发布
读前导览

为了避免在服务器上维护常驻服务,把扫描、构建、搜索索引、打包和上线检查都收回本地。

正文
1421 字
阅读
7 分钟
结构
7 节
来源线索

blog-platform/static-publish-workflow

blog-platform:columns blog-platform:covers blog-platform:publish-static

这次改造博客平台,我先定下一个不太宽松的范围:服务器只负责托管静态文件,不长期跑 Node,不加数据库,不做一个看起来很完整但以后没人维护的后台。

这个取舍看起来保守,但对个人博客反而合适。博客不是业务后台,发布频率也不高。麻烦主要在内容整理:项目回看、实验报告和课程笔记里的材料,哪些能公开,哪些要删掉,都得先处理好。

所以这次没有把平台继续做重,而是把复杂度留在本地,线上只放构建好的静态目录。

目标#

我希望博客至少满足五件事:

  1. 文章别只堆在归档页,要有“项目 / 实验 / 课程”三个入口。
  2. 长文封面要有统一规范,首页卡片不能忽高忽低。
  3. 评论和统计要能打开,但默认不绑定某个服务。
  4. 发布前必须跑安全扫描和构建检查。
  5. 一条命令完成构建、Pagefind 索引、打包、可选上传和线上校验。

这五件事听起来不像“美化”,更像工程卫生。我后来先处理入口、卡片高度、草稿隔离和发布闸门,再去碰动效。

最后方案仍然是 Astro/Fuwari 静态站,只在它上面补我用得上的发布流程。

专栏入口#

原来的结构太像一个文件夹:所有东西最后都进归档。归档适合查全量,但不适合让第一次来的人理解这个博客到底在写什么。

我加了三个轻量专栏:

  • 项目:代码、部署、工具链和工程回看。
  • 实验:电路、仿真、测量和报告生产过程。
  • 课程:课程复习、考试整理和知识卡片。

文章可以显式写:

column: "projects"

如果旧文章没有 column 字段,就按分类和标签做回退匹配。这样不用一次性迁移所有旧内容,后面写新文章也不会再犹豫“这篇到底放哪”。

这个设计还有一个好处:我的博客内容本来就不是一种东西。代码发布、实验回看、课程整理混在一起没问题,但入口必须分开。

封面规范#

首页卡片要整齐,最重要的是固定比例。长文没有封面,或者封面比例乱飞,首页很快就会像临时拼出来的资料夹。

于是我把文章卡片和正文封面都固定到 16:9。

封面检查脚本只对长文强制:

  • 必须有本地封面图。
  • 图片要和文章放在一起,不用远程图。
  • 单张封面不超过 5 MB。
  • 最小尺寸 900x500。

漫画页这种竖图不强行拦截,只给 warning。原因很简单:漫画本来就是竖版内容,短期为了卡片比例把整批图重做,收益不高。最后要不要重制封面,留到内容打磨阶段再决定。

评论和统计#

评论用 Giscus,但不把仓库 ID 写死在代码里。配置放在环境变量里:

PUBLIC_GISCUS_ENABLE=true
PUBLIC_GISCUS_REPO=owner/repo
PUBLIC_GISCUS_REPO_ID=
PUBLIC_GISCUS_CATEGORY=Announcements
PUBLIC_GISCUS_CATEGORY_ID=

统计保留 Busuanzi 做轻量展示,同时预留 Plausible 和 Umami。两者都是静态脚本,不需要我在博客服务器上再跑一个统计服务。

这样我就不用在没配评论和统计的时候改代码。站点照常构建,哪天把环境变量补齐,页面再自动加载对应脚本。

也就是说,这些东西可以慢慢接,不该卡住每次发文章。

一键发布#

发布脚本做了这条链:

safety scan -> cover check -> astro check -> type-check -> build -> pagefind -> package -> optional upload -> online verify

本地没有上传目标时,脚本只生成压缩包;有部署目标时再上传,并校验线上首页。

这样写主要是避免发布前漏掉检查,少敲几条命令只是顺带的。

博客内容会从项目回看、课程材料和实验报告里来。这里面有些东西可以公开,有些东西绝对不该进网页。靠发布前临时想起“我是不是该扫一下”,迟早会出问题。所以安全扫描、封面检查、生产草稿泄漏检查,都必须固定进流程。

当前取舍#

这次没有做后台编辑器,也没有做服务端搜索,更没有把自动写作接成无人值守发布。

原因很现实:

  • 小服务器适合静态文件,不适合堆常驻服务。
  • 内容来自项目、实验和课程材料,公开前需要人审。
  • Pagefind 已经够用,中文分词不是完美,但能覆盖标题和正文检索。

博客平台现在最缺的是稳定的写作入口和发布前检查。后台、服务端搜索这些先放后面。

重系统当然也能做,但对我现在的目标来说,它解决的是另一个问题。我现在更关心的是:材料很多,怎么先筛干净,再稳定地发出去,并且以后还能搜得到。

下一步#

接下来我会把“候选素材扫描 -> 草稿生成 -> 本地预览 -> 人工决定保留/删除”的流程继续往前挪。以后项目收尾时,博客也能顺手接住一部分复盘材料。

但最后的发布按钮仍然应该留给人。

脚本可以多做一点脏活,但哪些内容能公开、哪些内容应该删掉,还是得我自己最后看一遍。

把博客改回静态发布
https://blog.sunmmyapi.xyz/posts/blog-platform-one-command-publish/
作者
Sun
发布于
2026-05-29
许可协议
CC BY-NC-SA 4.0

继续读

相关内容