王铎技术笔记

把这个博客迁到静态生成:全过程和我踩的坑

2026-10-12 · 静态站点 / 部署

这个站原来是动态的,跑在一个小进程后面。上个月我把它迁成了静态生成 + nginx 直出。动机很简单:动态进程半夜挂过两次,而博客这种"写完就不怎么改"的内容,根本不需要运行时。

迁移顺序(照这个来能少踩坑)

  1. 先把旧站全量备份(数据库导出 + 上传目录打包),放到服务器另一个目录,别放在 web 根里。
  2. 本地搭静态生成器,把旧文章导成 markdown。导的时候顺手修 frontmatter(title/date/tags)。
  3. 本地构建,用一个临时端口预览,逐篇抽查渲染结果(代码块、图片、表格是重灾区)。
  4. nginx 加一个新的 server block 指向静态目录,先用一个临时域名/端口验证,不动主域。
  5. 验证没问题,再把主域 root 切到静态目录,保留旧配置注释掉以便回滚。

坑一:base 路径

构建器默认 base 是 /。我本地预览用的是子路径,构建出来资源全 404。排查半小时才发现是 base 没设对。教训:本地预览的路径要和最终部署路径一致,或者显式设 base。

坑二:RSS 的绝对链接

RSS 里的 link 必须是绝对 URL。我一开始用了相对路径,订阅器全解析错。这个错不报错、只是订阅者收到坏链接,很隐蔽。改法是构建时注入 site.url,RSS 模板里拼绝对地址。

回滚方案

nginx 旧 server block 我注释保留没删。万一静态站有问题,把注释打开、reload 就回到旧站,十秒级回滚。这个习惯救过我一次(某次构建产物漏传了图片目录)。

静态化之后最爽的不是快,是"没有运行时"。没有进程会半夜挂,没有依赖会升级炸,nginx 直出 HTML,出问题的面一下子小了很多。

现在整站构建+部署一条命令,产物就是纯文件。备份=拷贝目录,迁移=拷贝目录,省心。

← 返回首页