← 返回博客

为什么我从 Halo 迁移到 Astro

2026/7/31 08:00:00 · 个人博客从 Java CMS 换成 Astro 静态站点的真实理由,以及迁移过程里踩到的坑。

起点:一套跑着的 Halo

withrain.com 之前跑在 Halo 上——一套基于 Java / Spring Boot 的博客 CMS。功能很全:后台可视化编辑、主题、插件市场……但对一个只是想写点东西的个人站来说,它太重了。

每次请求都要经过 JVM、数据库、模板渲染。服务器常驻一个 Java 进程,内存和响应都扛着这份重量。

我想要的是什么

很简单:打开快、响应快、写文章方便、别养一个常驻服务。

Halo 给的”后台可视化编辑”,我用 Markdown 文件就能替代——写完推上去就更新,没有运行时开销。

为什么是 Astro

Astro 默认把页面预渲染成纯静态 HTML,几乎不发 JavaScript。用户请求时服务器(或 CDN)直接返回文件,没有运行时计算,速度接近静态站的极限。

文章就是 .md 文件,放在 src/pages/posts/ 下,构建时自动收录进首页列表,不用手动维护。

克制不是偷懒,是把复杂度留给真正需要它的地方。

迁移里踩到的坑

  • 客户端脚本不能进 SSR frontmatter:在 .astro 的 frontmatter 里 import 浏览器端 JS,静态构建会报 document is not defined。正确做法是放进模板里的 <script> 标签。
  • 博客列表用 import.meta.glob:比已弃用的 Astro.glob 更稳,将来升级 Astro 不会断。
  • 部署到 1Panel:静态文件上传到站点 web 根后,还要在面板把站点类型从”反向代理”改成”静态”才生效——只传文件不会自动替换原有的反代。

结论

对个人博客,预渲染静态站是甜点区:快、简单、好维护。哪天想要浏览器里发文章这类真动态能力,挂个 SSR adapter 就能升级,页面不用重写。