一个晚上,把博客从美国搬到新加坡,顺便搞了个静态站点

今晚干了一件挺爽的事:把跑了十几年的 WordPress
博客从美国的老主机迁移到了新加坡的腾讯云 CVM,同时还搭了一个全新的 Hugo
静态博客站点。两件事加起来,一个晚上搞定。

先说结论:

  • 老的 WordPress 博客:https://zrj.me(Docker
    化部署,保留原始风格)
  • 新的 Hugo 静态站点:https://blog.zrj.me(Stack
    主题,更快更现代)

两个域名,两种形态,同一份内容。下面说说整个过程。

为什么要搬

原来的博客跑在美国的一台主机上,访问速度一直不太行,尤其是从国内访问,动不动就转圈。这个博客从
2012 年开始写,到现在 300
多篇文章,虽然更新频率不高,但毕竟是自己十几年的技术笔记,还是希望它能活得好一点。

正好手上有一台新加坡的腾讯云
CVM,上面已经跑了一些其他服务,干脆把博客也搬过来。

WordPress 迁移:Docker 一把梭

迁移的思路很直接:从老主机导出数据库 dump 和网站文件,在新机器上用
Docker 跑 WordPress + MySQL。

整个过程大概是这样的:

  1. 从老主机打包下载 public_html.zip(44MB,3894 个文件)和
    localhost.sql.zip(1.9MB 的数据库 dump)
  2. 写一个 docker-compose.yml,MySQL 5.7 + WordPress PHP
    7.4
  3. 数据库挂载到 docker-entrypoint-initdb.d
    自动导入,WordPress 文件挂载到 /var/www/html
  4. Nginx 反向代理,acme.sh 签 SSL 证书
  5. 最后一步:通过 DNSPod API 把 zrj.me 的 A
    记录指向新机器

踩的几个坑

PHP 版本不兼容:一开始用了
wordpress:php8.1-apache 镜像,结果 WordPress 5.2 和 PHP 8.x
不兼容——花括号数组访问语法在 PHP 8.0 被移除了。降级到 PHP 7.4 解决。

HTTPS 重定向混乱:老站点装了个
wp-force-https 插件,在反向代理环境下行为异常,HTTP
Location 头被截断成奇怪的格式。解决方案是禁用这个插件,HTTPS 交给 Nginx
层处理,在 wp-config.php 里加了 X-Forwarded-Proto
检测。

LiteSpeed Cache 的 .htaccess 规则:老站点用的是
LiteSpeed 服务器,.htaccess 里有一堆 LiteSpeed 专属的 RewriteRule,在
Apache 下会出问题。直接清理掉,只保留 WordPress 标准的 permalink
规则。

Hugo
静态站点:给老博客换个新衣服

WordPress
跑起来之后,我又想:既然内容都在了,不如再搞一个静态站点?加载快,不怕宕机,部署也简单。

选了 Hugo + Stack 主题,流程是:

  1. 用 WP-CLI 从 WordPress 导出 XML
  2. wordpress-export-to-markdown 工具转成 Markdown
  3. 从数据库导出评论(214 条),以静态形式嵌入每篇文章底部
  4. 为每篇文章添加 /archives/{id} 的 alias,兼容老链接
  5. Docker 化:Hugo 构建 + Nginx 提供静态文件,监听 8082 端口

代码块修复:最折腾的部分

这个博客跨越了十几年,不同时期嵌入代码的方式不一样。早期用
SyntaxHighlighter 插件的

...

...


这种方括号标签,后来有段时间用的是
这种缩写形式,还有带属性的写法
,最新的文章是从微信公众号粘贴过来的带内联
style 的 HTML。

导出工具把这些代码块转得一塌糊涂:换行丢失、方括号被转义、HTML
实体没解码(" 原样输出为
")、非代码内容带了 4 空格缩进被 Markdown
当成代码块……

最后的解决方案是:不信任导出工具的代码块转换结果,直接从
WordPress
数据库原文中提取代码块
,包含完整的换行和原始格式,反转义 HTML
实体后替换到 Markdown 文件中。写了三个 Python
脚本分别处理不同类型的问题,前前后后迭代了好几个版本才把 200
多篇文章的代码块都修好。

代码高亮的明暗适配

Stack 主题支持暗黑模式,但 Hugo
默认的代码高亮是内联样式,没法跟着主题切换。解决方案是用
noClasses = false 配合两套 Chroma CSS——亮色用
monokailight(米黄色暖底),暗色用
dracula,通过
@media (prefers-color-scheme: dark)
[data-scheme=dark] 选择器自动切换。

最大的感受:AI 协作真的太爽了

说实话,如果是以前纯手工搞这些事情,WordPress 迁移 + DNS 切换 + SSL
证书 + Hugo 搭建 + 300 篇文章的代码块修复 +
各种踩坑调试,怎么也得两三天。

但今晚整个过程,从第一步解压文件到最后一步部署上线,全程都是和 AI
协作完成的。我只需要描述需求、确认方案、验证结果,AI
负责写配置、写脚本、排查问题、修
bug。那种感觉就像是有一个特别靠谱的搭档在旁边,你说一句,它就能理解你的意思然后快速执行,遇到问题还能自己分析原因给出解决方案。

整个过程非常流畅,而且——说实话——很愉悦。不是那种”终于搞完了”的如释重负,而是一种”wow
这也太快了吧”的惊喜感。原本预期要花好几天的事情,一个晚上就全部搞定了,而且质量一点没打折。

这大概就是人机协作的魅力吧。人负责想清楚要做什么、把关方向和质量,AI
负责快速高质量地执行。两者配合起来,效率提升不是百分之几十,是好几倍。

现在的状态

站点 地址 形态
WordPress 博客 https://zrj.me Docker 容器化,原汁原味
Hugo 静态站点 https://blog.zrj.me Stack 主题,快速轻量

两个站点内容一致,313 篇文章 + 214
条历史评论都完整保留。你可以随便挑一个访问,看看从 2012 年到 2026
年这十几年的技术笔记。

Leave a Reply

Your email address will not be published. Required fields are marked *