如何将 WordPress 博客发布到静态 GitLab Pages 站点

通过 GitLab 或 GitHub Pages 提供镜像的 WordPress 站点,从而最大限度地减少安全问题。
348 位读者喜欢这篇文章。

很久以前,我为一位家庭成员搭建了一个 WordPress 博客。现在有很多选择,但那时,如果你需要一个带有 WYSIWYG 编辑器的基于 Web 的 CMS,那么合适的选择并不多。事情顺利进行的一个不幸的副作用是,随着时间的推移,该博客生成了大量内容。这意味着我也需要定期更新 WordPress,以防止不断涌现的漏洞。

所以我决定说服我的家人,切换到 Hugo 会比较容易,然后该博客就可以托管在 GitLab 上。但是,尝试提取所有这些内容并将其转换为 Markdown 变成了一件非常麻烦的事情。有一些自动化脚本可以完成 95% 的工作,但没有一个是完美的。手动更新所有帖子不是我想做的事情,所以最终我放弃了迁移博客的想法。

最近,我再次开始思考这个问题,并意识到我有一个没有考虑过的解决方案:我可以继续维护 WordPress 服务器,但将其设置为发布静态镜像,并使用 GitLab Pages (或者如果你喜欢,也可以使用 GitHub Pages) 来提供该镜像。这将使我能够自动化 Let's Encrypt 证书续订,并消除与托管 WordPress 站点相关的安全问题。然而,这意味着评论将停止工作,但考虑到该博客没有获得太多评论,这感觉是一个微不足道的损失。

以下是我提出的解决方案,到目前为止,它似乎运行良好

  • 将 WordPress 站点托管在一个未链接到任何地方的 URL 上,以降低其被利用的可能性。在本例中,我们将使用 http://private.localconspiracy.com (即使这个站点实际上是用 Pelican 构建的)。
  • 为公共 URL https://www.localconspiracy.com 在 GitLab Pages 上设置托管
  • 添加一个 cron 任务,用于确定两个 URL 之间最后构建的日期是否不同;如果构建日期不同,则镜像 WordPress 版本。
  • 使用 wget 镜像后,将所有链接从“私有”版本更新为“公共”版本。
  • 执行 git push 以发布新内容。

以下是我使用的两个脚本

check-diff.sh (由 cron 每 15 分钟调用一次)

#!/bin/bash

ORIGINDATE="$(curl -v --silent http://private.localconspiracy.com/feed/ 2>&1|grep lastBuildDate)"
PUBDATE="$(curl -v --silent https://www.localconspiracy.com/feed/ 2>&1|grep lastBuildDate)"

if [ "$ORIGINDATE" !=  "$PUBDATE" ]
then
  /home/doc/repos/localconspiracy/mirror.sh
fi

mirror.sh

#!/bin/sh

cd /home/doc/repos/localconspiracy

wget \
--mirror \
--convert-links  \
--adjust-extension \
--page-requisites  \
--retry-connrefused  \
--exclude-directories=comments \
--execute robots=off \
http://private.localconspiracy.com

git rm -rf public/*
mv private.localconspiracy.com/* public/.
rmdir private.localconspiracy.com
find ./public/ -type f -exec sed -i -e 's|http://private.localconspiracy|https://www.localconspiracy|g' {} \;
find ./public/ -type f -exec sed -i -e 's|http://www.localconspiracy|https://www.localconspiracy|g' {} \;
git add public/*
git commit -m "new snapshot"
git push origin master

就是这样!现在,当博客发生更改时,在 15 分钟内,该站点将被镜像到一个静态版本并推送到存储库,该存储库将在 GitLab 页面中反映出来。

如果你想 在本地运行 WordPress,这个概念可以进一步扩展。在这种情况下,你不需要服务器来托管你的 WordPress 博客;你可以直接在你的本地机器上运行它。在这种情况下,你的博客没有被利用的可能。只要你可以在本地对它运行 wget,你就可以使用上面概述的方法来拥有一个托管在 GitLab Pages 上的 WordPress 站点。


本文最初发布在 Local Conspiracy。经许可转载。

接下来阅读什么
Picture of Christopher Aedo
Christopher Aedo 自大学时代起就一直致力于开源软件并为其做出贡献。最近,他可以在 Teradata 找到,在那里他担任开源主管,专注于帮助该组织通过内部使用和外部贡献来拥抱开源软件。

1 条评论

我不明白的是你如何“构建” WordPress 内容。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.