<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Hugo on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/hugo/</link>
        <description>Recent content in Hugo on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Tue, 28 Apr 2026 23:30:00 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/hugo/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>一个晚上，把博客从美国搬到新加坡，顺便搞了个静态站点</title>
        <link>https://blog.zrj.me/posts/2026-04-28-%E4%B8%80%E4%B8%AA%E6%99%9A%E4%B8%8A%E6%8A%8A%E5%8D%9A%E5%AE%A2%E4%BB%8E%E7%BE%8E%E5%9B%BD%E6%90%AC%E5%88%B0%E6%96%B0%E5%8A%A0%E5%9D%A1%E9%A1%BA%E4%BE%BF%E6%90%9E%E4%BA%86%E4%B8%AA%E9%9D%99%E6%80%81%E7%AB%99%E7%82%B9/</link>
        <pubDate>Tue, 28 Apr 2026 23:30:00 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2026-04-28-%E4%B8%80%E4%B8%AA%E6%99%9A%E4%B8%8A%E6%8A%8A%E5%8D%9A%E5%AE%A2%E4%BB%8E%E7%BE%8E%E5%9B%BD%E6%90%AC%E5%88%B0%E6%96%B0%E5%8A%A0%E5%9D%A1%E9%A1%BA%E4%BE%BF%E6%90%9E%E4%BA%86%E4%B8%AA%E9%9D%99%E6%80%81%E7%AB%99%E7%82%B9/</guid>
        <description>&lt;p&gt;今晚干了一件挺爽的事：把跑了十几年的 WordPress 博客从美国的老主机迁移到了新加坡的腾讯云 CVM，同时还搭了一个全新的 Hugo 静态博客站点。两件事加起来，一个晚上搞定。&lt;/p&gt;
&lt;p&gt;先说结论：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;老的 WordPress 博客：&lt;a class=&#34;link&#34; href=&#34;https://zrj.me&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zrj.me&lt;/a&gt;（Docker 化部署，保留原始风格）&lt;/li&gt;
&lt;li&gt;新的 Hugo 静态站点：&lt;a class=&#34;link&#34; href=&#34;https://blog.zrj.me&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.zrj.me&lt;/a&gt;（Stack 主题，更快更现代）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个域名，两种形态，同一份内容。下面说说整个过程。&lt;/p&gt;
&lt;h2 id=&#34;为什么要搬&#34;&gt;为什么要搬
&lt;/h2&gt;&lt;p&gt;原来的博客跑在美国的一台主机上，访问速度一直不太行，尤其是从国内访问，动不动就转圈。这个博客从 2012 年开始写，到现在 300 多篇文章，虽然更新频率不高，但毕竟是自己十几年的技术笔记，还是希望它能活得好一点。&lt;/p&gt;
&lt;p&gt;正好手上有一台新加坡的腾讯云 CVM，上面已经跑了一些其他服务，干脆把博客也搬过来。&lt;/p&gt;
&lt;h2 id=&#34;wordpress-迁移docker-一把梭&#34;&gt;WordPress 迁移：Docker 一把梭
&lt;/h2&gt;&lt;p&gt;迁移的思路很直接：从老主机导出数据库 dump 和网站文件，在新机器上用 Docker 跑 WordPress + MySQL。&lt;/p&gt;
&lt;p&gt;整个过程大概是这样的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从老主机打包下载 &lt;code&gt;public_html.zip&lt;/code&gt;（44MB，3894 个文件）和 &lt;code&gt;localhost.sql.zip&lt;/code&gt;（1.9MB 的数据库 dump）&lt;/li&gt;
&lt;li&gt;写一个 &lt;code&gt;docker-compose.yml&lt;/code&gt;，MySQL 5.7 + WordPress PHP 7.4&lt;/li&gt;
&lt;li&gt;数据库挂载到 &lt;code&gt;docker-entrypoint-initdb.d&lt;/code&gt; 自动导入，WordPress 文件挂载到 &lt;code&gt;/var/www/html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Nginx 反向代理，acme.sh 签 SSL 证书&lt;/li&gt;
&lt;li&gt;最后一步：通过 DNSPod API 把 &lt;code&gt;zrj.me&lt;/code&gt; 的 A 记录指向新机器&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;踩的几个坑&#34;&gt;踩的几个坑
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;PHP 版本不兼容&lt;/strong&gt;：一开始用了 &lt;code&gt;wordpress:php8.1-apache&lt;/code&gt; 镜像，结果 WordPress 5.2 和 PHP 8.x 不兼容——花括号数组访问语法在 PHP 8.0 被移除了。降级到 PHP 7.4 解决。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTPS 重定向混乱&lt;/strong&gt;：老站点装了个 &lt;code&gt;wp-force-https&lt;/code&gt; 插件，在反向代理环境下行为异常，HTTP Location 头被截断成奇怪的格式。解决方案是禁用这个插件，HTTPS 交给 Nginx 层处理，在 wp-config.php 里加了 &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; 检测。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LiteSpeed Cache 的 .htaccess 规则&lt;/strong&gt;：老站点用的是 LiteSpeed 服务器，.htaccess 里有一堆 LiteSpeed 专属的 RewriteRule，在 Apache 下会出问题。直接清理掉，只保留 WordPress 标准的 permalink 规则。&lt;/p&gt;
&lt;h2 id=&#34;hugo-静态站点给老博客换个新衣服&#34;&gt;Hugo 静态站点：给老博客换个新衣服
&lt;/h2&gt;&lt;p&gt;WordPress 跑起来之后，我又想：既然内容都在了，不如再搞一个静态站点？加载快，不怕宕机，部署也简单。&lt;/p&gt;
&lt;p&gt;选了 Hugo + Stack 主题，流程是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用 WP-CLI 从 WordPress 导出 XML&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;wordpress-export-to-markdown&lt;/code&gt; 工具转成 Markdown&lt;/li&gt;
&lt;li&gt;从数据库导出评论（214 条），以静态形式嵌入每篇文章底部&lt;/li&gt;
&lt;li&gt;为每篇文章添加 &lt;code&gt;/archives/{id}&lt;/code&gt; 的 alias，兼容老链接&lt;/li&gt;
&lt;li&gt;Docker 化：Hugo 构建 + Nginx 提供静态文件，监听 8082 端口&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;代码块修复最折腾的部分&#34;&gt;代码块修复：最折腾的部分
&lt;/h3&gt;&lt;p&gt;这个博客跨越了十几年，不同时期嵌入代码的方式不一样。早期用 SyntaxHighlighter 插件的 &lt;code&gt;[bash]...[/bash]&lt;/code&gt;、&lt;code&gt;[cpp]...[/cpp]&lt;/code&gt; 这种方括号标签，后来有段时间用的是 &lt;code&gt;[py]&lt;/code&gt;、&lt;code&gt;[js]&lt;/code&gt; 这种缩写形式，还有带属性的写法 &lt;code&gt;[cpp highlight=&amp;quot;3&amp;quot;]&lt;/code&gt;，最新的文章是从微信公众号粘贴过来的带内联 style 的 HTML。&lt;/p&gt;
&lt;p&gt;导出工具把这些代码块转得一塌糊涂：换行丢失、方括号被转义、HTML 实体没解码（&lt;code&gt;&amp;amp;quot;&lt;/code&gt; 原样输出为 &lt;code&gt;&amp;amp;quot;&lt;/code&gt;）、非代码内容带了 4 空格缩进被 Markdown 当成代码块……&lt;/p&gt;
&lt;p&gt;最后的解决方案是：&lt;strong&gt;不信任导出工具的代码块转换结果，直接从 WordPress 数据库原文中提取代码块&lt;/strong&gt;，包含完整的换行和原始格式，反转义 HTML 实体后替换到 Markdown 文件中。写了三个 Python 脚本分别处理不同类型的问题，前前后后迭代了好几个版本才把 200 多篇文章的代码块都修好。&lt;/p&gt;
&lt;h3 id=&#34;代码高亮的明暗适配&#34;&gt;代码高亮的明暗适配
&lt;/h3&gt;&lt;p&gt;Stack 主题支持暗黑模式，但 Hugo 默认的代码高亮是内联样式，没法跟着主题切换。解决方案是用 &lt;code&gt;noClasses = false&lt;/code&gt; 配合两套 Chroma CSS——亮色用 &lt;code&gt;monokailight&lt;/code&gt;（米黄色暖底），暗色用 &lt;code&gt;dracula&lt;/code&gt;，通过 &lt;code&gt;@media (prefers-color-scheme: dark)&lt;/code&gt; 和 &lt;code&gt;[data-scheme=dark]&lt;/code&gt; 选择器自动切换。&lt;/p&gt;
&lt;h2 id=&#34;最大的感受ai-协作真的太爽了&#34;&gt;最大的感受：AI 协作真的太爽了
&lt;/h2&gt;&lt;p&gt;说实话，如果是以前纯手工搞这些事情，WordPress 迁移 + DNS 切换 + SSL 证书 + Hugo 搭建 + 300 篇文章的代码块修复 + 各种踩坑调试，怎么也得两三天。&lt;/p&gt;
&lt;p&gt;但今晚整个过程，从第一步解压文件到最后一步部署上线，全程都是和 AI 协作完成的。我只需要描述需求、确认方案、验证结果，AI 负责写配置、写脚本、排查问题、修 bug。那种感觉就像是有一个特别靠谱的搭档在旁边，你说一句，它就能理解你的意思然后快速执行，遇到问题还能自己分析原因给出解决方案。&lt;/p&gt;
&lt;p&gt;整个过程非常流畅，而且——说实话——很愉悦。不是那种&amp;quot;终于搞完了&amp;quot;的如释重负，而是一种&amp;quot;wow 这也太快了吧&amp;quot;的惊喜感。原本预期要花好几天的事情，一个晚上就全部搞定了，而且质量一点没打折。&lt;/p&gt;
&lt;p&gt;这大概就是人机协作的魅力吧。人负责想清楚要做什么、把关方向和质量，AI 负责快速高质量地执行。两者配合起来，效率提升不是百分之几十，是好几倍。&lt;/p&gt;
&lt;h2 id=&#34;现在的状态&#34;&gt;现在的状态
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;站点&lt;/th&gt;
          &lt;th&gt;地址&lt;/th&gt;
          &lt;th&gt;形态&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;WordPress 博客&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://zrj.me&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zrj.me&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Docker 容器化，原汁原味&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hugo 静态站点&lt;/td&gt;
          &lt;td&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.zrj.me&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.zrj.me&lt;/a&gt;&lt;/td&gt;
          &lt;td&gt;Stack 主题，快速轻量&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;两个站点内容一致，313 篇文章 + 214 条历史评论都完整保留。你可以随便挑一个访问，看看从 2012 年到 2026 年这十几年的技术笔记。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
