跳转到内容

迁移至hugo并部署cloudflare workers

hugo

Move from wordpress to hugo. Deploy to cloudflare workers without git.

From

  1. static web pages(before 2003,手写html+php)
  2. cutenews(2003)
  3. blogger publish to static(from 2004)
  4. moveabletype,drupal…etc…
  5. wordpress(from 2005)

Now back to static web pages…

从用户角度,现在这些静态生成的新潮流工具,其实和blogger的功能是差不多的。

二十年一个轮回。

本来是想用zola(基于rust,单文件,又小又快),奈何鄙人水平不够,折腾一个多小时,要保留原来的路径(年月日标题)没看明白怎么搞,也似乎并不能支持中文路径。如果使用几百个文件夹,倒是能显示,那就多了几百个section,怎么归类汇总呢,一堆(年月日)文件夹这些md要怎么管理呢?如果不用文件夹用rewrite,那还搞静态建站干啥?

zola建议的文章写法是,如果有一片文章叫a_zola_guide,那么要建一个目录a_zola_guide,然后写一个index.md,把图片也丢在这个目录。要是写书倒是挺好的,但是日志要这么写,就很费劲也很奇怪。比如在ob里写日记,一点就生成”年月日标题.md”,和wordpress如出一辙。

hugo则相对简单,从wordpress导出的md丢进content,丢到子文件夹也没问题,比如叫import_from_wordpress。再找个主题丢进themes,就能生成静态网站。最牛逼的是,居然能在任何一个md文件直接指定任意的url,对于十几年wordpress老用户太友好了。新写一个md,随便丢到哪里,都能用,这对md写作者也很友好。

性能上,700篇不到的文章,200还是500毫秒并没什么意义,总比wordpress快到飞起。

从内容组织角度看,“年月日标题”这种的确已经过时了,新的内容可以不这样写,但老的不能丢,虽是无人问津的自留地,但迁移的基本原则是链接不能断,否则就不叫迁移叫重建了。

综上,安心用hugo吧。

使用插件 https://github.com/SchumacherFM/wordpress-to-hugo-exporter 会把所有的blog/page/图片全部打包,并生成markdown和hugo的目录结构的压缩包供下载。 解压至~/opt/hugo_export,需要用到的是md和wp-content的静态文件

Terminal window
brew install hugo # mac homebrew
cd ~/opt/hugo/
hugo new site wang.lu
cd wang.lu

用手动安装法,不用git,比较干净、简单

下载主题压缩包 https://github.com/jpanther/congo/releases/latest 解压至wang.lu/themes/congo

Terminal window
rm hugo.toml # 删除站点主目录下的hugo的自带配置文件
cp -r themes/congo/config . # 把congo主题的配置拷贝到主目录
sed -i '' $'1i\\\ntheme = "congo"' config/_default/hugo.toml # 添加 theme = "congo" 至hugo.toml顶部

拷贝wordpress导出的md文件和原有静态文件

Section titled “拷贝wordpress导出的md文件和原有静态文件”
Terminal window
cp ~/opt/hugo_export/posts/* content/posts/
cp ~/opt/hugo_export/wp-content static/

当然,还有一些零碎的修修补补没在这里写。主要是绝对地址和相对地址,一些格式、符号等;还有原来静态目录里文件和图片的清理;需要一点时间写脚本或手动来做。

Terminal window
# hugo server -D # 预览,带草稿
hugo build -d ../wang.lu.static/ --gc --minify # 建站
Terminal window
cd .. # 到上级目录建立wrangler.jsonc
// wrangler.jsonc
{
"name": "my-static-site",
"compatibility_date": "2025-04-01",
"assets": {
"directory": "./wang.lu.static",
}
}
Terminal window
npx wrangler deploy # 会自动安装wrangler,会弹出网页要求认证

一行命令,新建了一个worker并上传完成,服务器自动识别到是一个静态项目,不需要用pages来弄了。

随后在cloudflare添加worker的域名(已由cf管理的)。

网上有些文章说有1000个文件的限制,还有点担心重构时会不够用。实测下来,每次通过wrangler deploy是会对照本地和远程文件内容增量发布的,而且似乎并没有文件数量的限制。

不用github的原因:

  1. 打牛焉用隔山?
  2. 没有环境和版本问题,和本地预览一致,所见即所得。
hugo_export
├── posts
├── wp-content
hugo
├── build_and_deploy.sh
├── help.txt
├── wang.lu
│ ├── config
│ │ └── _default
│ │ └── hugo.toml
│ ├── content
│ │ └── posts
│ ├── static
│ │ └── wp-content
│ ├── themes
│ │ └── congo
│ 略
├── wang.lu.static
└── wrangler.jsonc
#!/bin/bash
echo "entering hugo wang.lu dir..."
cd ~/opt/hugo/wang.lu
echo "hugo building static site..."
hugo build -d ../wang.lu.static/ --gc --minify
echo "goto hugo dir ..."
cd ..
echo "wrangler deploy to cloudflare..."
npx wrangler deploy

打开vi或ob,写完markdown,执行脚本,舒服!

本站最初从drupal换到wordpress版本1.0,2006年初升级至2.0,那时的体验非常棒,记不住是3.0还是4.0开始就越来越强大、臃肿。好几次收到升级邮件,都是忍住不升,后来因为插件bug被脚本黑了一次,为了安全问题只好硬着头皮升级,一直到6.0系列。

这期间主机商的变更和被收购,导出导入数据,折腾插件主题,都有大大小小的问题。我朝到卢森堡的带宽水管小,有时候后台打开的速度让人怀疑人生,但这点带宽载入静态文本是完全够用的,这也是wordpress的问题。最近几年因为写的极少,也懒得再折腾迁移了。

这样不知觉间用了wordpress整整20年!至今仍然是这个星球上最强大的cms之一!致谢🙏

hugo这种静态发布,没有安全问题,没有导出导出问题,升级或不升级只看我高兴不高兴,想发布到哪也是改一行命令的事。

  1. 数据存储:所有的文本、资源,都显式的保存在本地,再也没有搞坏丢失服务器数据库的可能,要备份或在其他地方部署也就是一个zip包的事。
  2. 写作体验:因为我本身会一些markdown,也在用ob,所以体验比wordpress要强,wp不知道从哪个版本开始的的block编辑,已经完全把我搞蒙了。
  3. 内容组织:一篇文章就是一个文本或者一个文件夹,树干、树叶结构更清晰,因为能指定url,和wordpress的灵活性完全相当。
  4. 主题插件:这方面还是wordpress要强,几乎是无所不包无所不能的。hugo的主题大部分没有sidebar,我也没时间再弄,目前是够用了。

总体而言,好饭不怕晚,比wordpress舒服!