博客迁移到Cloudflare部署

原来博客的部署逻辑是:源代码(和文章)托管在Github上,使用第三方服务Travis CI自动构建部署到项目的master分支上,开启Github Page服务,Github拉取master分支上的文件更新服务器上的网页。可以通过Github Page分配的域名,yangrq1018.github.io访问博客,也可以通过阿里云购买的自有域名yangruoqi.site访问,原理是在阿里云的DNS服务器上添加了CNAME类型的解析,是对yangruoqi.site的请求重定向到yangrq1018.github.io

了解到了Github+Cloudflare Page的免费白嫖服务之后,决定尝试一下。结果效果不错,无论有没有科学上网,在境内打开博客的速度都大幅度提升。

简单记录一下流程:

关闭Github Pages,查了一下无法在账户默认的repo,也就是yangrq1018.github.io这个repo禁用Github Pages,只能删除该repo,新建一个repo,把本地的git文件夹再push上去,只需要保留源代码分支,public/文件夹的分支可以删除。Cloudflare Page会直接编译,不需要把public文件夹托管Github上。新的repo叫yangruoqi.site

登入Dashboard, Create a project,链接你的Github账号之后可以直接选择yangruoqi.site仓库。构建设置,选择含有源代码的分支master,不需要指定框架,因为我们用的是很简单的静态博客框架,构建命令hexo generate,构建输出目录是/public,点击保存并运行Cloudflare Page进行第一次编译。

经过测试,仓库可以是Public或者Private,在Cloudflare连接Github的时候只要给足了权限,就可以拉取Private repo,这样可以放心上传一些敏感数据,后续的修改不用担心git commits会暴露。

如果编译没问题,网站就自动部署好了,在https://yangruoqi-site.pages.dev/就可以看到博客了。之后只需要编辑源代码分支上的post,把修改commit,push到github上,commit可以自动触发部署,更新网站。

博客上次维护是比较久之前了,现在运行hexo generate会编译失败,报错是有某些文件已经存在,无法写入,排查了一下,是front-matter里的permalink标签导致的,暂时移除全部permalink,编译顺利通过。

接下来,我们锦上添花,如果有自己拥有的域名,希望通过自己的域名而不是Cloudflare分配给你的免费*.pages.dev访问博客,那就要自定义domain。在Dashboard里点击项目名 - 自定义域 - 设置自定义域 - 输入yangruoqi.site (自己拥有的域名),下一步配置DNS。

如果要启用自定义域,Cloudflare会要求你将DNS转移到Cloudflare。阿里云控制台 - 域名 - yangruoqi.site - DNS修改,删除阿里云分配的hichina.com类似的服务器,贴上Cloudflare提供的DNS服务器,如chelsea.ns.cloudflare.com,可能需要一会等待全球的DNS同步变更。

yangruoqi.site是从阿里云购买的,最先使用阿云里默认的自有DNS服务器进行解析。在把DNS解析转交给Cloudflare之前,需要解除阿里云的DNS服务。这样的好处是显而易见的:Cloudflare可以掌握对博客的请求的全部流程,从访问我的自有域名,DNS解析到Cloudflare分配给项目的实际IP地址,然后从Cloudflare服务器上返回数据。阿里云和域名只管理,不负责任何实际解析。之前的模式:Github提供服务器,使用CNAME域名解析(重定向),现在的模式Cloudflare应该是直接接管DNS把yangruoqi.site解析到IP上了

可以验证 nslookup yangruoqi.site 结果

1
2
3
4
5
Non-authoritative answer:
Name: yangruoqi.site
Address: 104.21.91.200
Name: yangruoqi.site
Address: 172.67.179.53

其中的两个IP都是Cloudflare拥有,在新泽西州的IP。