为什么我从 Halo 迁移到 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 就能升级,页面不用重写。