写在最前

在看到别人的博客感到震撼之余,我还眼馋人家的门户主页。而且又不是很愿意同时养好几个不同的域名,于是想到了利用二级域名来部署我的门户主页。

实例操作

我使用的主页是fork自冰卡诺老师基于metro4框架制作的项目。此处以此为例进行部署操作。

此处以我的主页为例。最先说明,因为这次使用的都是project pages,最终的二级域名和项目名没有半点关系,所以各位在配置时没必要对项目名太过谨慎。

  1. 找到github的仓库,开启github pages。

  2. 因为要使用自定义的二级域名访问github project pages,所以务必确保你在项目内添加了CNAME,并且CNAME内写入了二级域名。
  3. 配置CNAME解析
    在你的域名解析站里为二级域名添加解析。比如我买的域名是Akilar.top,而我要用blog.akilar.top这个二级域名访问。那么在解析时,主机记录写期望的二级域名头,记录值填写托管网站提供的记录值。例如github pages的记录值,一律是username.github.io

    之后就可以使用blog.akilar.topz这个二级域名访问了。

Github在国内的速度实在是不好形容,所以我们可以使用Vercel来部署Github项目静态网站。

  1. 访问Vercel,完成注册,并使用。
  2. 引入Github上的静态网站项目。

    这里由于我的目录结构中,index.html就在根目录,所以无需特别调整位置,一路默认项部署过去即可。

    如果你的项目中index.html位置不在根目录,记得主动配置一下。)

  3. 设置自定义域名,如图所示,找到:项目->Settings->Domains。添加自定义域名,之后会得到一组解析记录。(不一定是CNAME,也可能是A记录。照着它给出的解析记录进行配置即可。)

  4. 添加解析记录

    之后就可以使用二级域名blog.akilar.top这一二级域名访问了。

更多关于Vercel的配置教程内容可以参考这篇文章:使用Vercel来加速Hexo博客

Vercel对于电信的线路较为友好,而Coding对于联通的线路较为友好,只不过Coding实在是容易崩。而且新版Coding自打被腾讯云收购以后就开始收费(新用户会提供几个月的免费流量包,用完后才开始收费)了。所以还请酌情考虑使用需要使用。

  1. 访问Coding完成注册。
  2. 新建项目,注意必须选择项目类型为DevOps,这样才能使用静态部署功能,完成后新建代码仓库。
  3. 找到持续部署->静态网站->新建静态网站。
  4. 部署完成后,在右上角找到自定义域名选项,添加自定义域名后会得到相应的解析记录。
  5. 添加解析记录

    之后就可以使用二级域名blog.akilar.top这一二级域名访问了。

更多关于Coding的配置教程内容可以参考这篇文章:使用Coding和Github来实现双线部署

Gitee现已不支持自定义域名,Gitee pages pro也不再支持购买。此处仅作为镜像站使用。

  1. 访问Gitee并注册
  2. 页面右上角头像左侧找到号,选择从Github/GitLab导入仓库

    可以使用仓库链接导入也可以直接从你的Github导入,因为项目要作为静态网站展示,所以记得设置仓库为公开。
  3. 在仓库右上角找到:服务->Gitee Pages

    因为Gitee pages pro已无法购买,所以不支持自定义域名。仅将其作为镜像站使用https://username.gitee.io/projectname访问。

更多关于Gitee pages的配置教程内容可以参考这篇文章:使用Gitee提供镜像站支持

拓展内容

如果是准备采取多线部署来架设二级域名的静态网站的话,每次部署多个显然是不愿意的,Vercel会自动检测Github对应仓库是否变动触发自动部署,倒是令人省心,至于Coding和Gitee,我的思路是使用github actions来同步Github仓库内容至Coding和Gitee,再使用脚本自动更新Gitee Pages。

操作方式

  1. 在项目根目录建.github/workflows/autodeploy.yml
  2. 打开autodeploy.yml
    输入以下内容,注意修改你的个人仓库配置。
    name: 'Autodeploy'

    on: [push, delete]

    jobs:
    deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Checkout'
    uses: actions/checkout@v1

    - name: 'Mirror to coding' # 将Github仓库内容同步到Coding,之后Coding的持续部署功能会自动完成网站部署
    uses: wearerequired/git-mirror-action@master
    env:
    # 注意在 Settings->Secrets 配置 CODING_RSA_PRIVATE_KEY
    SSH_PRIVATE_KEY: ${{ secrets.CODING_RSA_PRIVATE_KEY }}
    with:
    # 注意替换为你的 GitHub 源仓库地址
    source-repo: "git@github.com:akilarlxh/blog.git"
    # 注意替换为你的 Coding 目标仓库地址
    destination-repo: "git@e.coding.net:akilar/akilar/blog.git"

    - name: 'Mirror to Gitee' #将Github仓库内容同步到Gitee对应仓库。
    uses: wearerequired/git-mirror-action@master
    env:
    # 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
    SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
    with:
    # 注意替换为你的 GitHub 源仓库地址
    source-repo: "git@github.com:akilarlxh/blog.git"
    # 注意替换为你的 Gitee 目标仓库地址
    destination-repo: "git@gitee.com:akilar/blog.git"

    - name: 'Build Gitee Pages' #用脚本更新Gitee Pages
    uses: yanglbme/gitee-pages-action@master
    with:
    # 注意替换为你的 Gitee 用户名
    gitee-username: akilar
    # 注意在 Settings->Secrets 配置 GITEE_PASSWORD
    gitee-password: ${{ secrets.GITEE_PASSWORD }}
    # 注意替换为你的 Gitee 仓库
    gitee-repo: akilar/blog
  3. 找到你的Github对应仓库,在仓库的Settings->Secrets里添加上述脚本中提到的三个参数。

  • CODING_RSA_PRIVATE_KEY : 与Coding绑定的SSH公钥对应的私钥
  • GITEE_RSA_PRIVATE_KEY : 与Gitee绑定的SSH公钥对应的私钥
  • GITEE_PASSWORD : Gitee账号的密码

这里的CODING_RSA_PRIVATE_KEYGITEE_RSA_PRIVATE_KEY指你的个人密钥,在配置SSH-KEY时,我们用来与Github、Coding、Gitee绑定的是公钥,而私钥存放在(以win10为例)C:\Users\userneme\.ssh\id_rsa文件内,内容格式类似于下方代码,使用时将包括-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----在内的全部内容都存放到变量值里。

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApM/T7rRtc9sNcd7NNZHMOZU7e7322leY5JauIxJEgQYpdrfO
vQB9PPpeMudAyCvAlaM?????????XO21G7RNejl4dLEflBh68TB93DlK/k/3KizMf
jewpXU3HHpFSSyiIA7Mi8ur39ybbG4oWEHI/Mnjq?????????e5oiVvYNux2
TazhAoGAL8h8XrB0t????????????????W2Ul4AomH1mu+rtIz2sQZdREVL4
dskwWvzoGOyNBPreLXWHBY6fg34dhNaZvNDZPGGd3bK6arMRdzrAynQio0CE0zwm
zJEo1tpUvqujmYMRnM1+jYHOPqU5sIvnEy5xovAzECPUSUs43Ag=
-----END RSA PRIVATE KEY-----

CODING_RSA_PRIVATE_KEYGITEE_RSA_PRIVATE_KEY可以使用同一个值,只要相应公钥已经和对应站点绑定。

之后,只要每次push到github仓库,就会触发github actions,启动自动部署了。

bug归纳

可能遇到的bug:

  1. Gitee用github action自动部署更新收到短信,提示异地登录需要验证码。

因为github action使用的是美国的服务器,所以,使用github action来远程更新gitee的站点部署时,会收到异地登陆的短信,提示需要验证码。这个在脚本作者的issues里有相应的解决方案:登陆失败 #6

  • 在微信上搜索Gitee微信公众号,在微信公众号内绑定自己的Gitee账号,这样虽然还是会有异地登录提示,但是发过来的消息不再需要填写验证码,而且提醒若不是你在操作,请及时修改密码。(某种意义上就是我在操作,所以我选择不改密码2333)
  • 使用VPN,通过美国IP登录一次Gitee。(一般第一步就能把问题解决了,用不到第二步。)
  1. Gitee部署失败
    脚本的原理是用程序代替人工去点击Gitee Pages的更新按钮。所以需要你先手动做一次页面部署,确保有那个更新按钮在,脚本才有生效的前提。

更多关于Github Actions的配置教程内容可以参考这篇文章:使用Github Action实现全自动部署

可能遇到的问题

  1. 在博客导航栏添加主页URL跳转到了404页面
    这应该是因为写的URL没有带协议。例如我写的如果只是blog.akilar.top.会被识别成相对地址,从而跳转到https://akilar.top/blog.akilar.top,而这个页面显然是不存在于博客下方的,正确的写法是带完整的协议内容,即https://blog.akilar.top