重新启程 从Halo到Astro迁移记录
1.为什么要更换博客框架
Halo博客的痛点
- 数据库: 由于Halo博客是一个动态的博客框架,依赖数据库,尽管提供了 PostgreSQL 这样高性能低占用选择,但对于我这类访问量低的博客来说,维护一个数据库多少有些得不偿失。
- 资源占用: Halo 博客基于 Java 构建,这使得它的内存占用较高,通常 docker + Halo本体 + 数据库差不多要占用500-700mb的内存,这还是 Halo 内存优化后的结果。如果按照我目前使用1Panel的部署方式,一台2g内存的服务器才能保证有一定的容量。
- 备份困难: Halo 提供了免费自动备份的插件,但是如果你想要异地自动备份则需要购买付费插件。
- 难以应对多并发: 在itdog测试时,我发现我的博客基本无法抗住快速测试这样的多并发场景。
- 网页加载速度与高成本: 由于是动态博客,在网页加载速度上有先天劣势,如果套CloudFlare的CDN且不做优选的话,加载速度是难以忍受的,而直连的香港服务器成本也相对较高。
为什么选择Astro
- 社区完善: 作为一个还算新兴的框架,Astro的社区目前已经非常完善,适合小白上手,提供了许多优秀的主题。而Hexo、Hugo这样的老框架虽然成熟但是明显在易用性上落后于Astro。
- 无服务器: 静态站点最大的优点是无需服务器部署,可以自动化托管在诸多平台上,快速且安全,特别是之前的Next.JS漏洞让我意识到服务器存在许多风险,我其中一台就因为Umami被植入了挖矿病毒。
- 文件路由: Astro的文件路由我认为是十分优秀的,可以满足绝大部分需求。
2.选择合适的主题
之前在Halo中使用的是由 jiewenhuang 大佬移植的 Fuwari 主题,类似MD3的设计风格,简介流程,非常符合我的审美。
既然这次换成Astro,那就继续使用 Fuwari 主题,不过原版主题功能不够丰富,所以我选择了 CuteLeaf 大佬基于 Fuwari 主题二次开发的 Firefly 主题。
3.在本地安装Astro
Firefly 主题的开发者们写了十分详细的文档,所以很轻松的搭建起了博客框架。
Firefly文档地址:****https://docs-firefly.cuteleaf.cn/
3.1依赖安装
-
安装 Node.js
访问 Node.js 官网 下载并安装最新版本的 Node.js。
安装完成后,打开终端或命令提示符,运行以下命令验证 Node.js 是否安装成功:
Terminal window node -vnpm -v -
安装 pnpm
如果您尚未安装 pnpm,可以通过 npm 安装:
Terminal window npm install -g pnpm安装完成后,打开终端或命令提示符,运行以下命令验证 pnpm 是否安装成功:
Terminal window pnpm -v -
安装 Git
访问 Git 官网 下载并安装适合您操作系统的 Git 版本。
安装完成后,打开终端或命令提示符,运行以下命令验证 Git 是否安装成功:
Terminal window git --version
3.2项目启动步骤
-
克隆项目
首先,Fork Firefly 项目并克隆到本地:
Terminal window git clone https://github.com/you-github-name/Firefly.gitcd Firefly -
安装依赖
使用 pnpm 安装项目依赖:
Terminal window pnpm install -
启动开发服务器
运行以下命令启动开发服务器:
Terminal window pnpm dev
4.文章迁移
Halo的插件市场提供了文章导入导出插件,可以很方便的导出Halo文章为MD文件。
在Astro框架优秀的智能路由的加持下,我可以把博客目录结构整理的井井有条:
src/└── content/ └── blog/ ├── 2024/ <-- 年份文件夹 │ └── my-trip/ <-- 文章独立文件夹 │ ├── index.md <-- 文章内容 │ └── photo.jpg <-- 文章图片 └── 2023/ └── old-post/ ├── index.md └── cover.png5.部署上线
既然选择了Astro框架,那肯定是选择无服务器部署,我选择了以CloudFlare Pages为主,Vercel、EdgeOne Pages为备用线路的部署形式。线路切换的功能来自二叉树树大佬的魔改版Fuwari主题:
5.1 CloudFlare Pages 部署与优选
我选择 CloudFlare Pages 作为博客的主部署平台,原因在于Pages对免费用户提供了充足的用量:
- 连接代码仓库:在 CloudFlare Dashboard 中进入 “Pages” 面板,选择 “创建项目”。直接连接到你的 GitHub仓库。
- 构建配置:框架预设选择 Astro,Pages 服务会自动识别并填充正确的构建设置:
- 构建命令:pnpm run build
- 输出目录:dist
- 部署:点击“保存并部署”。几分钟内,你的博客就会有一个 *.pages.dev 的临时域名。
优选我参考的是这位大佬的教程:加速你的项目!详解 Cloudflare Workers & Pages 优选域名设置 | CMLiussss Blog
Vercel和EdgeOne Pages的部署方式几乎一样,但要注意的是Vercel虽然无需优选就要很快的访问速度,但是免费额度较少,EdgeOne Pages我个人体验感觉不如CloudFlare Pages,所以都充当备用线路。