单个GitHub帐号下添加多个GitHub Pages的相关问题

好久没更新文章了,这边都快成荒地了。今天想到一个比较简单的问题,所以先处理了写篇文章上来,好给blog加点生机(其实post里躺着不少草稿,不过一直没办法写完╮(╯▽╰)╭

很早之前我就记得某篇讲hexo的文章里提到每个GitHub只能拥有一个GitHub Pages页面,所以后来一直不敢在自己的帐号底下添加除blog外的其他GitHub Pages项目。直到今天仔细研究了下GitHub的规则,才发现上面那句话有很大的问题。

这篇文章主要是讲github下多个GitHub Pages项目相关以及自定义域名访问的问题,没太多技术上的东西,基本上都是属于GitHub的文档意译和解释,英语好的可以直接看这官网这两篇FAQ:

  1. About custom domains for GitHub Pages sites
  2. User, Organization, and Project Pages

注:虽然全文基本上都在讲GitHub Pages,但我个人亲测这些规则也都适用于GitCafe Pages,两者没有本质区别。 所以像我一样双线部署blog的可以安心地把GitHub的东西搬到GitCafe来。不过为了行文方便,下文不再特意强调GitCafe Page,均以GitHub Pages代指(“Coding”的是否也如此并不清楚,有心人可以自测)

场景

以我个人为例,我在GitHub上已经有了一个和用户名同名的GitHub Pages项目当作个人主页(chitanda.github.io),但是我现在又有了几个想法:

  1. 再在GitHub上弄一个GitHub Pages项目当作我的demo页面展示,而不是在原先的blog项目下加子目录(一来访问url不好看,二来很多主题会强制对所有项目内的文件添加样式,影响展示效果)
  2. 同时demo页面的访问链接是我自定义的一个域名(如:是demo.chitanda.me或者demo.chitanda.github.io而不是chitanda.github.io/demo)

那么上面两个要求,GitHub能否都满足呢?卖个关子先,结论放在下文

GitHub Pages的分类及区别

根据官方文档,GitHub Pages分为两类:个人/组织主页以及项目主页,两者基本上没啥区别,但是有以下几点不同:(该文场景下个人和组织帐号没什么区别,所以下文为了行文方便将统一用个人主页代指)

  1. 个人主页必须要和用户的GitHub帐号同名,所以每个用户有且只能有一个repo作为个人主页,且必须是<username>/<username>.github.io的形式;而项目主页的命名则没有这种限制,且数量有任意多个。
  2. 不考虑绑定的自定义域名的前提下,个人主页的GitHub二级域名为<username>.github.io;项目主页的GitHub二级域名为<username>.github.io/<projectname>,没有<projectname>.<username>.github.io这种方式
  3. 个人主页的展示内容以master分支里的文件为准;而项目主页的展示内容以gh-pages分支内的文件为准

从上面的分析可以发现两个问题已经解决掉一个半了。那么剩下来的问题就是如何配置一个项目主页并绑定自定义域名了。

项目主页的建立和自定义域名配置

注:配置过程和个人主页一模一样,如果之前配置过个人主页的,可以跳过这部分内容了

建立项目主页

  1. 新建一个repo,repo名字随意。
  2. 点进repo主页然后点击右面的Settings,页面往下拉到GitHub Pages部分,选择Launch automatic page generator>Continue to layouts>Publish page即可.(由于大部分情况下并不用默认的页面和样式,所以这里不需要太纠结于内容编辑)

这样一个项目主页就建立完成了,此时可以用<username>.github.io/<projectname>访问到了。

绑定自定义域名

  1. 在项目的repo里新建一个CNAME文件,并将不带协议名的裸域名写进去(demo.chitanda.me而不是http://demo.chitanda.me/)

    这一步可以参考官方文档

  2. 到你域名的DNS服务商里给对应的二级域名添加CNAME解析到<username>.github.io(和个人主页的配置相同)
  3. 等待DNS生效,具体时间和服务商有关(十几分钟到几小时都有可能)。

    如果不确定自己的解析是否生效了,可以在linux系统下用dig命令来检测.参考官方文档

GitHub和GitCafe双线部署的小tips

上面的配置对于单线部署的来说已经完成了,不过对于双线部署的用户而言,有几个小问题需要注意下

  1. DNS服务商里要按照来源对对应的二级域名做分流配置。(具体过程可以参考此处
  2. 如果想要所有用户都可以用example.com/project的方式访问到repo,GitHub和GitCafe的repo名字必须相同,否则会导致有一边跳404

    可以参考我这里的例子:GitHub上的项目主页名字为demo,GitCafe上的项目主页名字为demos,则不翻墙的情况下国内用户访问chitanda.me/demo会跳404,而用demo.chitanda.me则正常(另外同个链接在翻墙和不翻墙的情况下看到的页面不同,也是分线部署的功劳)

总结

聊胜于无的总结。对于上面提到的几个问题,也有了答案:

  1. 每个GitHub帐号下只能有1个人主页repo,但是可以有不限数量项目主页repo。
  2. 没有自定义域名的情况下,项目主页的访问链接只能是<username>.github.io/<projectname>而不是<projectname>.<username>.github.io
  3. GitCafe添加GitHub Pages后必须要自己本地同步文件上去,而不能像GitHub那样一键建站,GitCafe每个repo初始化页面的代码是有步骤略过去的,新手的话一开始可能同步不了。建议看他们的帮助

参考文献

  1. About custom domains for GitHub Pages sites
  2. User, Organization, and Project Pages
  3. Adding a CNAME file to your repository
  4. Tips for configuring a CNAME record with your DNS provider
  5. GitCage Pages-相关帮助
  6. 单域名多线路解析