背景
我的个人博客从 2013 年开始搭建,一直在使用 Github Pages 部署,先后使用过 jekyll、farbox、hexo 等来构建静态博客,折腾过不少次。
本次我决定对博客做如下的改动:
- 使用 hugo 来构建静态博客。hexo 管理博客有些麻烦的地方,涉及到很多依赖包的版本管理问题。我之前曾经尝试迁移到 hugo 来管理博客,但发现有些复杂,得需要全面了解 hugo 才能保证兼容性,比如 hexo 和 hugo 中对于博客文章的 url 链接并不相同,如果博客文章之间有超链接的情况,就会导致死链的出现。AI 时代到来后,Cursor 是我一直在深度使用的编程工具,心血来潮决定使用 Cursor 来完成博客的迁移。在整体迁移的过程中,我并未对 hugo 系统有较深的了解,甚至官方的文档都没怎么阅读,仅靠跟 Cursor 的交互就完成了所有的需求。
- 放弃域名 kuring.me。博客我一直写的不太多,也没啥流量。再加上 AI 的兴起,我的很多笔记类的博客文章反而更没有必要了。个人的一些感悟也有微信公众号可以承载。我决定弃用之前一直在使用的域名 kuring.me,但放弃域名并不意味着我打算放弃自己的博客。
- Github Pages 的访问速度较慢,决定同时寻找其他解决方案来加快博客在国内的访问速度。
迁移工作涉及:
- 所有已发布文章
- 草稿文章
- 静态资源文件(图片、参考文档等)
- 保持原有 URL 结构不变(SEO 友好)
- 配置 GitHub Actions 自动部署到 GitHub Pages
- 配置 Cloudflare Pages 部署(提升中国大陆访问速度)
迁移步骤
需求分析和计划制定
首先,我向 Cursor 描述了完整的迁移需求:
| |
Cursor 在 Plan Mode 下分析了需求,并提出了几个关键问题:
- 主题选择(我选择了 Stack 主题)
- URL 格式保持策略(我选择保持原格式)
项目初始化
Cursor 自动执行了以下步骤:
| |
配置文件迁移
Cursor 分析了 Hexo 的 _config.yml,并创建了对应的 hugo.yaml:
- 站点基本信息(标题、语言等)
- URL 格式配置(保持
/post/:title/格式) - Giscus 评论系统配置
- 分页、标签、分类等设置
内容迁移
这是最复杂的部分了,期间跟 cursor 互动了多次才终于完成。
文章迁移
- 将所有 markdown 文件从
source/_posts复制到content/post - 保持原有的目录结构(k8s/、ai/、knowledge-share/ 等)
- 处理 front matter 格式转换:
url:→slug:(Hugo 使用 slug 字段)tags: value→tags: [value](转换为列表格式)- 统一
Tags:为tags:
草稿迁移
原先博客中有很多草稿类型的文档,这些文档并不会真正发布,但需要一起迁移到 hugo 中。
- 复制
source/_drafts到content/draft - 为所有草稿文件添加
draft: true标记
静态资源迁移
source/images/→static/images/source/ref/→static/ref/source/draw.io/→static/draw.io/source/CNAME→static/CNAME
格式修复
迁移过程中发现了一些格式问题,Cursor 自动创建了 Python 脚本来批量修复:
| |
总共修复了 177 篇发布文章和 4 篇草稿的格式问题。
URL 兼容性保证
这是迁移中最关键的部分。Cursor 确保了:
- 使用
permalinks.post: /post/:slug/保持 URL 格式 - 对于有
url:字段的文章,转换为slug:字段 - 所有文章的 URL 与 Hexo 版本完全一致
- 配置
baseurl: /支持多平台部署(GitHub Pages 和 Cloudflare Pages)
自动化发布
GitHub Actions 配置
Cursor 创建了 .github/workflows/deploy.yml,实现了:
- 当 main 分支有 push 时自动触发
- 使用 Hugo 构建静态站点
- 跨仓库部署到
kuring/kuring.github.io的 gh-pages 分支 - 使用 Personal Access Token 实现跨仓库权限
Cloudflare Pages 配置
由于 GitHub Pages 在中国大陆访问速度较慢,我决定同时配置 Cloudflare Pages 部署。
在配置完成 Cloudflare Pages 后发现,在中国大陆完全无法访问,但在公司网络正好可以访问,而且访问速度还比较快。
多平台部署兼容性检查
需要确保博客配置支持多平台部署:
- baseurl 配置:设置为
/,让 Hugo 根据实际访问域名自动生成 URL - Giscus 评论系统:使用 GitHub 仓库存储评论,两个平台共享同一套评论
- 硬编码 URL 修复:将代码示例中的绝对 URL 改为相对路径
Cloudflare Pages 配置步骤
连接 GitHub 仓库:
- 在 Cloudflare Dashboard 中创建 Pages 项目
- 连接
kuring/hugo仓库
构建设置:
- Framework preset:
Hugo - Build command:
git submodule update --init --recursive && hugo --minify - Build output directory:
public - 设置
HUGO_VERSION环境变量为具体版本号(如0.153.3,不要使用latest,可以使用hugo version命令查看本地使用 hugo 版本)
- Framework preset:
自动部署:
- Production branch:
main - 启用 Preview deployments(每个 PR 自动创建预览)
- Production branch:
多平台部署的优势
- GitHub Pages:
kuring.github.io- 作为主要部署平台 - Cloudflare Pages:
kuring.pages.dev- 提供更快的中国大陆访问速度 - 共享评论系统:两个平台使用同一套 Giscus 评论,评论数据统一管理
- URL 兼容性:使用相对路径和正确的 baseurl 配置,确保两个平台都能正常工作
结语
使用 Cursor 较为完美的帮我完成了迁移工作。仅需要在本地执行 git push 命令即可完成博客的发布操作。
如果在没有 AI 辅助的情况下,要完成博客系统的迁移我至少要花上一天的时间,而使用 cursor 前后差不多用了一个小时的时间就完成了,可以说效率大幅度的提升。
美中不足的是博客系统的访问,需要尝试 kuring.github.io 或者 kuring.pages.dev 两个域名,但因为博客与我而言并非高频访问场景,且用户量极少,该问题暂且可以忍受。