问题背景
iosre论坛使用的是运行在阿里云Ubuntu上的Discourse论坛程序;这个程序每次升级/更改配置后rebuild app的时候,需要连接GitHub。因为我的主机在国内,GitHub处于半屏蔽状态,所以这个过程极不稳定,操作失败率远高于成功率。
这个问题困扰了我很久,借着这次调整CDN的机会,我干脆一次性把这个问题解决掉了。相信还有无数网友会碰到跟我一样的问题,特此把本人的一站式解决方案分享出来,供大家参考,理论上大家只看我这一篇文章就够了。
解决思路
对于工程师来说,让国内的阿里云主机能够顺畅访问GitHub,最容易想到的解决思路主要有2个方向:
- 在阿里云主机上实现网络加速;
- 用GitHub的国内镜像替换GitHub原始网站。
我先尝试了第1种方向,即在服务器上安装了Clash来实现网络加速;但碰到一个没有搞定的问题,是Discourse运行在Docker里,而Docker跟主机的网络环境并不共享。也就是说,即使我的主机可以成功加速上网,Docker仍然不行。
第2种方向就比较简单了;国内提供GitHub镜像的服务商有很多,我选择的是cnpmjs.org。
注 :https://github.com.cnpmjs.org 和 https://hub.fastgit.org 均已停止服务;在网上找找其他的镜像服务商就好,如https://hub.fastgit.xyz
解决方案
具体操作步骤如下:
cd /var/discourse/
./launcher enter app
git config --global url."https://github.com.cnpmjs.org/".insteadOf https://github.com/
看一下有没有设置成功
cd /var/www/discourse/plugins/docker_manager
git remote -v
如果输出是
origin https://github.com.cnpmjs.org/discourse/docker_manager.git (fetch)
origin https://github.com.cnpmjs.org/discourse/docker_manager.git (push)
就成功了。这样以后每次rebuild app时,就会从github.com.cnpmjs.org去拉代码,而不会连到github.com了。当然,这么做的坏处是,如果要push代码,也会push到镜像去;但是因为论坛不会push,所以实际上是不影响的。