好久没更新文章了,这边都快成荒地了。今天想到一个比较简单的问题,所以先处理了写篇文章上来,好给blog加点生机(其实post里躺着不少草稿,不过一直没办法写完╮(╯▽╰)╭)
很早之前我就记得某篇讲hexo的文章里提到每个GitHub只能拥有一个GitHub Pages页面,所以后来一直不敢在自己的帐号底下添加除blog外的其他GitHub Pages项目。直到今天仔细研究了下GitHub的规则,才发现上面那句话有很大的问题。
这篇文章主要是讲github下多个GitHub Pages项目相关以及自定义域名访问的问题,没太多技术上的东西,基本上都是属于GitHub的文档意译和解释,英语好的可以直接看这官网这两篇FAQ:
注:虽然全文基本上都在讲GitHub Pages,但我个人亲测这些规则也都适用于GitCafe Pages,两者没有本质区别。 所以像我一样双线部署blog的可以安心地把GitHub的东西搬到GitCafe来。不过为了行文方便,下文不再特意强调GitCafe Page,均以
GitHub Pages
代指(“Coding”的是否也如此并不清楚,有心人可以自测)
场景
以我个人为例,我在GitHub上已经有了一个和用户名同名的GitHub Pages项目当作个人主页(chitanda.github.io),但是我现在又有了几个想法:
- 再在GitHub上弄一个GitHub Pages项目当作我的demo页面展示,而不是在原先的blog项目下加子目录(一来访问url不好看,二来很多主题会强制对所有项目内的文件添加样式,影响展示效果)
- 同时demo页面的访问链接是我自定义的一个域名(如:是
demo.chitanda.me
或者demo.chitanda.github.io
而不是chitanda.github.io/demo
)
那么上面两个要求,GitHub能否都满足呢?卖个关子先,结论放在下文。
GitHub Pages的分类及区别
根据官方文档,GitHub Pages分为两类:个人/组织主页以及项目主页,两者基本上没啥区别,但是有以下几点不同:(该文场景下个人和组织帐号没什么区别,所以下文为了行文方便将统一用个人主页代指)
- 个人主页必须要和用户的GitHub帐号同名,所以每个用户有且只能有一个repo作为个人主页,且必须是
<username>/<username>.github.io
的形式;而项目主页的命名则没有这种限制,且数量有任意多个。 - 不考虑绑定的自定义域名的前提下,个人主页的GitHub二级域名为
<username>.github.io
;项目主页的GitHub二级域名为<username>.github.io/<projectname>
,没有<projectname>.<username>.github.io
这种方式 - 个人主页的展示内容以
master
分支里的文件为准;而项目主页的展示内容以gh-pages
分支内的文件为准
从上面的分析可以发现两个问题已经解决掉一个半了。那么剩下来的问题就是如何配置一个项目主页并绑定自定义域名了。
项目主页的建立和自定义域名配置
注:配置过程和个人主页一模一样,如果之前配置过个人主页的,可以跳过这部分内容了
建立项目主页
- 新建一个repo,repo名字随意。
- 点进repo主页然后点击右面的
Settings
,页面往下拉到GitHub Pages部分,选择Launch automatic page generator
>Continue to layouts
>Publish page
即可.(由于大部分情况下并不用默认的页面和样式,所以这里不需要太纠结于内容编辑)
这样一个项目主页就建立完成了,此时可以用
<username>.github.io/<projectname>
访问到了。
绑定自定义域名
- 在项目的repo里新建一个
CNAME
文件,并将不带协议名的裸域名写进去(demo.chitanda.me
而不是http://demo.chitanda.me/
)这一步可以参考官方文档
- 到你域名的DNS服务商里给对应的二级域名添加
CNAME
解析到<username>.github.io
(和个人主页的配置相同) - 等待DNS生效,具体时间和服务商有关(十几分钟到几小时都有可能)。
如果不确定自己的解析是否生效了,可以在linux系统下用
dig
命令来检测.参考官方文档
GitHub和GitCafe双线部署的小tips
上面的配置对于单线部署的来说已经完成了,不过对于双线部署的用户而言,有几个小问题需要注意下
- DNS服务商里要按照来源对对应的二级域名做分流配置。(具体过程可以参考此处
- 如果想要所有用户都可以用
example.com/project
的方式访问到repo,GitHub和GitCafe的repo名字必须相同,否则会导致有一边跳404可以参考我这里的例子:GitHub上的项目主页名字为
demo
,GitCafe上的项目主页名字为demos
,则不翻墙的情况下国内用户访问chitanda.me/demo会跳404,而用demo.chitanda.me则正常(另外同个链接在翻墙和不翻墙的情况下看到的页面不同,也是分线部署的功劳)
总结
聊胜于无的总结。对于上面提到的几个问题,也有了答案:
- 每个GitHub帐号下只能有
1
个个人主页repo,但是可以有不限数量
的项目主页repo。 - 没有自定义域名的情况下,项目主页的访问链接只能是
<username>.github.io/<projectname>
而不是<projectname>.<username>.github.io
- GitCafe添加GitHub Pages后必须要自己本地同步文件上去,而不能像GitHub那样一键建站,GitCafe每个repo初始化页面的代码是有步骤略过去的,新手的话一开始可能同步不了。建议看他们的帮助
参考文献
- About custom domains for GitHub Pages sites
- User, Organization, and Project Pages
- Adding a CNAME file to your repository
- Tips for configuring a CNAME record with your DNS provider
- GitCage Pages-相关帮助
- 单域名多线路解析