↓ 跳过正文
  1. 文章/

管理员研讨会——从 WordPress 迁移到 Hugo

Rubén Infante Docio
作者
Rubén Infante Docio
软件工程师
目录

多年来我一直想写这个博客,想着看看我是否会写一篇关于这个或那个的文章,时间流逝了,当我回顾它时,我发现自己已经八年没写过一篇文章了。

在当今人工智能盛行的时代,维持博客可能不太合理,但我希望保持写作能力,并传达我个人的项目。

这个博客创建于19年前,最初名为“Mis Cosas Geek”,最初用“Geek”这个词来形容对科技充满兴趣的人,然而近年来,这个词越来越多地与流行文化、电子游戏、漫画、电影和邪典音乐,以及科幻和奇幻作品联系在一起,这并不是本博客的目的。因此,亲爱的硅片爱好者们,从今以后,这个网站将被称为“管理员的工作坊”,我们将继续讨论电子故障、开发以及一些新话题,如家庭自动化和3D打印。

新堆栈
#

这次名称的更改可能不是唯一的新颖之处,因此它也在技术层面被迁移到生成静态 HTML,原因包括避免维护数据库和用 Markdown 写入,以及 SEO、性能、可访问性和安全性的提升(基本上因为它是静态 HTML :D)。

选择静态站点生成器
#

选择是Hugo,在这个新阶段,我想专注于写作,而不是维护插件、更新、SEO等,同时保持最佳性能。Hugo相比Astro、Jekyll或Next.js等类似技术带来了以下优势。

  • 它没有任何依赖关系
  • 学习曲线很低。
  • 速度非常快。
  • 它很现代,尤其是与杰基尔相比
  • 简洁性

接下来要选择一个功能强大、设计良好、内置功能且不会过载的主题,这要比较多个现有主题 选择了《Blowfish 》。

出口
#

迁移时,首先是从旧Wordpress中提取内容和文件,使用Github上的库之一。比较了多个工具,如 WordPress导出转Markdown、markdown-exporter-for-wordpress 和 wp2hugo,后者明显获胜,原因包括以下优势:

  • 摘录评论
  • 它不仅允许你下载引用的图片和文件,还能下载WordPress中所有现有的
  • 通过包含代码块正确转换 Wordpress HTML
  • 允许你调整新博客中文件和文件夹的结构
  • 维护WordPress和GUIDss。

部署流程
#

在部署方面,虽然我职业生涯中使用过Jenkins、Gitlab的CI/CD模板和Azure Devops,但我从未用过Github Actions,体验非常棒。

网站的“托管”使用了](https://www.cloudflare.com/products/workers/)[Cloudflare Workers,允许在私有仓库中免费部署,允许无限请求,20,000个文件,每个文件25Mb,真实301重定向(以维护旧Wordpress RSS订阅的重定向),每语言404个页面,等等。

这一切都在代码里: .github/workflows/publish.yml (动作“发布”)和Cloudflare wrangler.jsonc (工作者)。

每推一次主武器都会启动行动,连续执行两个任务:

1. 翻译
#

我希望博客能触及更多人,为此我选择了世界上使用最多的语言,文章将自动翻译成这些语言:

  1. 西班牙语
  2. 英语
  3. 普通话
  4. 印地语
  5. 西班牙语
  6. 法语
  7. 阿拉伯语
  8. 孟加拉语
  9. 葡萄牙语
  10. 俄语

为此,我使用translate.py,免费使用Microsoft翻译器翻译新帖或修改帖](https://azure.microsoft.com/es-es/pricing/details/translator/)[,并将翻译上传到仓库。如果没有翻译,脚本几秒钟内完成,无需支付任何费用。- 如果翻译失败或配额用尽:脚本仍会显示,因此西班牙语帖子依然会发布。- 你可以恢复待处理的翻译或手动重新部署:操作 → 发布 → 运行流程。- GitHub 秘密:AZURE_TRANSLATOR_KEY、AZURE_TRANSLATOR_REGION、CLOUDFLARE_API_TOKEN(“编辑 Cloudflare Workers”模板,区域 talleradmin.com)和 CLOUDFLARE_ACCOUNT_ID。

2. 部署
#

用 Hugo(支持吹鱼的最新版本)构建,并在 Cloudflare 的 Worker 中用 wrangler.jsonc 部署。

通讯
#

我不确定新闻通讯是否还在运营,还是正在消亡,所以我用 [Brevo](Para Newsletter) 做了一个来测试。让我惊讶的是,20年前为网站管理员免费提供数百个网站的功能,现在却变成了极其有限的付费服务。不过,根据我查到的资料,Claude和我Brevo似乎提供了带RSS自动化的最佳免费方案。

其他已审查和迁移的主题
#

  • 交通便利性

  • Adsense

  • 谷歌搜索控制台:迁移博客,因为域名也 rubeninfante.com 变成了 talleradmin.com

  • 速卖通和亚马逊联盟链接

  • 优化图像

    sudo apt install optipng jpegoptim
    find static/wp-content -iname '_.png' -print0 | xargs -0 -P"$(nproc)" -n4 optipng -o2 -strip all -quiet
    find static/wp-content -iname '_.jp\*g' -print0 | xargs -0 jpegoptim --strip-all --all-progressive -q
  • 评论 robots.txt

  • 类别和标签中重音的回顾

  • 我用static/_redirects文件清理了标签和分类

  • 清理未使用的文件

  • 我在每页都添加了图片,还有一张通用图片,方便没有 static/img/social-default.jpg 时用 assets/img/background.jpg

  • 迁移前检查 WordPress 插件,禁用除必要插件外的所有插件。

  • 修改并创建从 rubeninfante.com 到 talleradmin.com 的重定向

日常工作
#

指挥
#

  • 创建新物品

    hugo new posts/mi-nuevo-articulo/index.md
    • 如果 mi-nuevo-articulo 文件夹中的图片被调用 feature.[jpg,png,webp] ,它将作为主图片、头部和社交媒体使用。
  • 检查是否有断链

    • 在网站根创建包含内容的 lychee.toml 文件

        # lychee.toml — enlaces que no se comprueban (expresiones regulares)
        exclude = [
          "#nolychee$",   # la marca de evitar enlaces
          "https://web.archive.org/web/*",
          "reddit.com/submit",
          "facebook.com/sharer",
          "linkedin.com/shareArticle"
        ]
        exclude_path = ["^public/(en|zh-cn|hi|fr|ar|bn|pt-br|ru)/"]
    • 执行以下命令:

        hugo --gc --cleanDestinationDir
        lychee --root-dir "$PWD/public" 'public/**/*.html' --format markdown --output informe.md
    • 评论 informe.md

      • 如果链接已不存在,请在网址开头添加https://web.archive.org/web/
      • 如果因反机器人或其他原因检测错误,请在链接末尾或lychee.toml文件中添加#nolychee

更新主题
#

  • 更新主题

      cd themes/blowfish
      OLD=$(git rev-parse HEAD)                                  # para comparar después
      git fetch --depth 1 origin main && git checkout -B main origin/main
  • 复查你覆盖的相关文件

      cd ../..
      for f in $(cd layouts && find . -type f); do git -C themes/blowfish diff --quiet $OLD HEAD -- "layouts/${f#./}" 2>/dev/null || echo "Revisar: layouts/${f#./}"; done

图片
#

了解博客图片的存储路径非常重要:

  • assets 主题使用且可优化的图片:背景(defaultBackgroundImage)、默认精选图片(defaultFeaturedImage)和作者照片。background.jpg这就是为什么主题会缩小它,3.4 MB的图片不会被提供。

  • static 需要固定且不变的URL:传记记录、ads.txt、PDF、下载文件或从外部链接的图片。举个例子,我 social-default.jpg 放那里,因为Whatsapp和X要求稳定的URL。

  • Imágenes de un post concreto:在帖子本身的文件夹里(页面包)。

  • 注意 在 hugo.toml 里,我也把 static 设置成了资源。这就是为什么当主题用静态/图像作为封面时也会得到优化。这是针对 WordPress 迁移的修复方法。

      [[module.mounts]]
        source = "static"
        target = "assets"

添加一种语言
#

  • 需要修改/添加的文件

      config/_default/languages.xx.toml
      config/_default/menus.xx.toml
      i18n/xx.toml (Sólo en el caso del que el tema no incluya el idioma)
  • 修改 /config/_default/params.toml

      newsletter.formAction]
        es = "https://..."
        xx = "https://..."