返回文章列表

一天发了五版

发布在“服务器”,阅读约 2 分钟

博客开张当天发了五个版本。说说发布脚本怎么做到敢连着点、点错了也能收回来。

博客今天上线,到傍晚一共发了五个版本。不是故意刷记录,是边改边发:改文案、补页面、修小问题,每改一处就推一版。敢这么干,是因为发布脚本把「上传」和「对外生效」拆开了。

每次发布都是新目录

网站是本机构建好的静态文件。服务器上不跑构建,也不存源码,只收打包好的 dist。

每次发布会生成一个带时间戳和短提交号的版本目录,比如 20261017-172230-84c8113。文件先完整解压进这个新目录,这时候线上还在指向旧版本,访客看不到半成品。

切换只动一条软链接

对外生效靠一个叫 current 的软链接。新版本准备好之后,脚本用原子方式把它指到新目录:先写一个临时链接,再 mv 覆盖。操作系统保证这一步要么成功要么失败,不会出现「链接指到一半」的中间态。

Caddy 一直读的是 current 下面的文件。所以正常发布不用重启 Web 服务器,也不用改配置。

核对不过就自动切回

切换之后脚本会连着请求线上首页、项目页和 version.txt。version.txt 里写的是刚发的那个版本号。对得上才算成功;对不上就立刻把 current 指回上一版,然后退出报错。

服务器上只保留最近几个版本。回滚脚本默认回到上一版,也可以指定某个旧目录。

上传之前先自查

构建完成后、上传之前,会跑一遍检查:

  • 必要页面和字体在不在
  • 草稿有没有混进正式产物(文章必须明确写 draft: false 才会进正式包)
  • 页面里有没有密钥、本机路径、公网 IP 这类不该出现的东西
  • 图片有没有带拍摄地点一类的 EXIF

工作区还有未提交改动时,脚本直接拒绝发布。避免「本机看着对、发出去的却是旧提交」。

为什么值得这么麻烦

静态站本身已经够简单了。再加上「新目录 + 软链接 + 自动核对」,发布就变成可逆操作:改错了可以收回来,服务器挂了也只丢展示层,源码还在本机。

以后写文章、改页面,还会继续小步连发。对外看起来是同一个站,对内每次都是一次可回滚的版本切换。

© 2026 Hero1157。页面上没有任何追踪脚本。