zola-将博客从hexo迁移到zola并部署至Cloudflare Pages
最近将原博客部署到了Cloudflare Pages上,并且静态站点生成器也从Hexo换成了Zola,这里做一下迁移记录。
迁移的起因
原有博客是部署在Amazon Lightsail的机器上的,这台机器平时只运行了个Nginx,一直续费实属浪费钱。博客这种能Serverless化的小东西,还是无需自己手动管理环境比较省精力。
托管静态Web应用的框架或平台已经很多,Github Pages、Netlify和Cloudflare Pages都非常成熟,鉴于博客目前套用的是Cloudflare的免费CDN套餐,干脆就拜托赛博菩萨好事做到底吧,于是选用了Cloudflare Pages。
至于Hexo,它上次更新距今已过了大半年,且我不太喜欢nodejs环境的臃肿,现在Rust社区也有了新的静态站点生成工具-Zola,性能强且足够轻量,功能简洁够用,就决定迁移到Zola。
很久以前部署Hexo博客的文章在这里。
从Hexo迁移到Zola
这个迁移大致需要做以下几件事:
- 修改博客的Markdown文件内容格式
- 修改主题
- 修改配置文件
- SEO
更改Markdown格式
Zola与Hexo的Markdown文件内容格式主要区别在Front matter
上,这是Zola的Front Matter格式文档。
将博客目录从服务器上打包下载到本地后,如果一篇一篇手动调整文章格式,太过重复且耗费时间。于是让AI写了个Python脚本,用来转换整个目录里的源Markdown文件的Front matter头,并重命名生成副本。
Deepseek给出的代码如下:
# 原有转换逻辑保持不变
=
return
=
=
=
=
= + +
=
=
return
# 遍历目录中的所有.md文件
=
# 读取原始文件内容
=
# 转换front matter
=
# 生成新文件名
= f
=
# 写入新文件
# 配置参数(按需修改)
= # 你的Markdown文件所在目录
# 执行转换
这个代码可以一次性运行成功,不由得感叹2025年的大模型相比半年前确实进步不少。
修改主题
Zola的主题目前还是有点少,在Github上找到一个比较成熟的主题-tabi,直接使用它的脚手架项目-tabi-start,在本地用Git初始化了这个项目,将调整过的Markdown文件全都放入content/blog
目录中,本地运行zola server
命令,访问http://127.0.0.1:1111
,确认可以正常运行。
如果以后需要更新主题,使用git submodule update --remote themes/tabi
命令即可。
修改配置
参考Zola的配置文件文档和Tabi的配置文件文档修改即可,文档非常详细,我主要调整了base_url
、搜索以及favicon相关的内容。
SEO
没人看,写着给自己看,这次直接放弃SEO。
部署到Cloudflare Pages
这一步主要参考自Zola的部署文档,和Cloudflare Pages的开发人员文档。
关联远程Git仓库
需要启用一个远程仓库,使得Cloudflare Pages能够由地方拉取代码,鉴于目前Github的私有仓库也已经免费,就直接将博客代码关联到了Github上。
通过代码仓库将网站部署到Cloudflare Pages
- 登录到Cloudflare Dashboard
- 在帐户主页中,选择 Workers & Pages > Create > Pages > Connect to Git
- 选择GitHub存储库,并在设置构建和部署部分中配置以下信息:
Configuration option | Value |
---|---|
Production branch | Master |
Build command | zola build |
Build directory | public |
在环境变量的配置框中添加
ZOLA_VERSION
这个键,设置一个比较新的zola版本号作为它的值,因为默认的zola版本较低,可能会编译不通过。点击Deploy部署即可。
可能会出现zola not found的报错,这是因为截止2025/03/01,Pages默认的v2编译环境还没有包含zola,在设置里将其切换至v1环境即可,详情参考Troubleshooting。
重新设置域名解析和CDN
Pages部署成功后,Cloudflare会生成一个xxx.pages.dev
的域名,在Cloudflare里将主域名解析到这个三级域名,启用CDN,等待DNS解析生效即可。
后续更新维护
发布新文章时,只需要git push
推送到远程仓库,Cloudflare Pages服务会触发拉取代码仓库的动作,使用最新的代码部署页面。