将Hexo部署到Cloudflare Pages

部署准备

  1. 新建一个私人仓库,将Hexo项目根目录.gitignore中忽略的文件(夹),其他所有源文件推送上去。
    这是我的.gitignore文件:

    .gitignore
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Created by https://www.toptal.com/developers/gitignore/api/hexo
    # Edit at https://www.toptal.com/developers/gitignore?templates=hexo

    ### Hexo ###
    db.json
    public/
    .deploy_git/

    # End of https://www.toptal.com/developers/gitignore/api/hexo
  2. 拥有一个 Cloudflare 账号,我就不过多赘述如何注册了。

开始部署

  1. Cloudflare仪表盘中打开Compute (Workers)->Wokers 和 Pages

  2. 创建Pages,连接你的Github账号,然后选择在部署准备中新建的仓库。例如,我这里的GMBlog。

  3. 环境变量(高级)中加入以下变量:

    1
    NODE_VERSION=14.3

    最好是跟你的Hexo原项目环境的Nodejs版本一致,在命令提示符node -v指令查询。

  4. 直接点击保存并部署,部署成功后还无法访问,原因是我们只创建了应用但还没传入构建指令。

  5. 来到你当前Pages的设置,修改构建配置并保存。

    1
    2
    3
    4
    5
    # 构建命令
    bash build.sh

    # 构建输出目录
    public

    文件build.sh将在稍后创建。

  6. 继续在当前页面,修改构建系统版本并保存。

    1
    2
    3
    4
    5
    # 生产系统版本
    版本 1

    # 预览系统版本
    版本 1
  7. 在你的Hexo项目根目录下新建build.sh文件,并加入以下内容:

    build.sh
    1
    2
    3
    4
    5
    #!/bin/bash
    npm install
    npm update
    hexo clean
    hexo g
  8. 提交并推送。

  9. 至此已完成,可以在构建日志的资产已上传中看到所有静态文件。
    以后每写一篇新文章并推送上去后,都会自动进行构建和部署而无需本地构建,爽。

  10. 自定义域名略。

参考教程

  1. 将Hexo博客部署到CloudFlare Pages使用全球加速

    但我不清楚为什么这个UP主不用填任何构建命令,也许是当时的系统版本问题,也可能是他仓库里本身就是构建好的静态文件,因此我优化了下这方面。

  2. 部署Hexo博客到Cloudflare Pages

    按照Cloudflare官方的Hexo文档的说明并不能实现自动化部署,总是提示找不到hexo指令,着实令人恼火。这篇文章提供的方法完美解决了这个问题,感谢。

FAQ

Q:构建时报错fatal: No url found for submodule path 'xxx' in .gitmodules
A:检查项目文件是克隆了其他仓库,例如我在部署时就使用了pjax导致构建失败。解决方法是去到该库文件夹,也就是报错中告诉你的这个目录,删掉该库下的.git文件夹和.gitignore文件。或者你会配置.gitmodules文件就自己写吧,博主不会(つд⊂),最后重新提交和推送至仓库。

Q:xxxx.pages.dev无法访问。
A:原因你懂的,解决方法是使用自定义域。