今晚干了一件挺爽的事:把跑了十几年的 WordPress
博客从美国的老主机迁移到了新加坡的腾讯云 CVM,同时还搭了一个全新的 Hugo
静态博客站点。两件事加起来,一个晚上搞定。
先说结论:
- 老的 WordPress 博客:https://zrj.me(Docker
化部署,保留原始风格) - 新的 Hugo 静态站点:https://blog.zrj.me(Stack
主题,更快更现代)
两个域名,两种形态,同一份内容。下面说说整个过程。
为什么要搬
原来的博客跑在美国的一台主机上,访问速度一直不太行,尤其是从国内访问,动不动就转圈。这个博客从
2012 年开始写,到现在 300
多篇文章,虽然更新频率不高,但毕竟是自己十几年的技术笔记,还是希望它能活得好一点。
正好手上有一台新加坡的腾讯云
CVM,上面已经跑了一些其他服务,干脆把博客也搬过来。
WordPress 迁移:Docker 一把梭
迁移的思路很直接:从老主机导出数据库 dump 和网站文件,在新机器上用
Docker 跑 WordPress + MySQL。
整个过程大概是这样的:
- 从老主机打包下载
public_html.zip(44MB,3894 个文件)和
localhost.sql.zip(1.9MB 的数据库 dump) - 写一个
docker-compose.yml,MySQL 5.7 + WordPress PHP
7.4 - 数据库挂载到
docker-entrypoint-initdb.d
自动导入,WordPress 文件挂载到/var/www/html - Nginx 反向代理,acme.sh 签 SSL 证书
- 最后一步:通过 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 主题,流程是:
- 用 WP-CLI 从 WordPress 导出 XML
- 用
wordpress-export-to-markdown工具转成 Markdown - 从数据库导出评论(214 条),以静态形式嵌入每篇文章底部
- 为每篇文章添加
/archives/{id}的 alias,兼容老链接 - 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
年这十几年的技术笔记。