转载

单个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初始化页面的代码是有步骤略过去的,新手的话一开始可能同步不了。建议看他们的 帮助

参考文献

正文到此结束
Loading...