hsingko


迁移到 cloudflare pages

今天整理自己的 github 的时候,突然发现自己的博客被人 fork 了,然后点进去一看,那人居然把我的名字和头像改了,然后堂而皇之地把所有文章都挂在自己的网站上。人类的多样性总是让我震惊,而我也想不通他这么做的理由,于是只能 block 了事。

把整个网站的源代码直接公开在 github 上就是会有这样的麻烦。搜索了一下资料,发现两点:

  • 只有 付费用户 才能将仓库设置为 private ,同时还让 github.io 可见
  • 只有 付费用户 才能禁止他人 fork 公开仓库

看来只能跑路了,以前用 cloudflare 搭过一个小网站,体验还不错,于是就准备花一个小时迁移过去。

和 github pages 的区别

优点:

  • 私有仓库,不用担心别人直接克隆你的网站
  • 更大容量。在两者都是免费帐号的前提下,github page 有 1GB 的限制1, 而 cloudflare 支持 20,000 个文件,单个文件上限 25MB ,总计上限 500GB2
  • 内置访问情况统计

缺点:

  • 更容易被墙。之前部署在 cloudflare 上的反代 worker 都已经被墙了,如果 pages.dev 将来被墙也是意料之中的事情;github.io 背靠 github 以及 microsoft ,被墙的可能性更小
  • 国内访问速度可能不如 github pages. 这也是网上常有人拿来比较的点,然而就我个人的体验来说似乎差不多?(可能还 cloudflare 稍快)

如何部署

部署非常方便,只要连接到 git 代码仓库即可,但需要注意以下几点:

  • 子域名在配置的时候就要设置好,部署之后是没法更改的,只能删了重来
  • 默认的 hugo 版本非常低,需要在环境变量中设置 HUGO_VERSION

如何无痛迁移

无论如何以前的 github.io 链接已经都访问不了了,但是还是有更“无痛一点的方法”,通过配置仓库的 404 页面即可让旧链接自动跳转到新站点。

在 github page 仓库的根目录下创建 404.html 文件,填入如下代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Site migrated :(</title>
    <script>
      window.onload = function () {
      const destination = window.location.href;
      const redirectLocation = window.location.href.replace(
      "hsingko.github.io",
      "hsingko.pages.dev"
      );
      document.getElementById("body").innerHTML = "站点已转移至 cloudflare"
      window.location.href = redirectLocation;
      }
    </script>
  </head>
  <body id="body" style="text-align: center">
    Page not found
  </body>
</html>

这样就能让搜索引擎以及从其他网站上过来的人自动到新的地址了。