Discourse在阿里云主机上rebuild时,连接GitHub不稳定的解决方案

问题背景

iosre论坛使用的是运行在阿里云Ubuntu上的Discourse论坛程序;这个程序每次升级/更改配置后rebuild app的时候,需要连接GitHub。因为我的主机在国内,GitHub处于半屏蔽状态,所以这个过程极不稳定,操作失败率远高于成功率。

这个问题困扰了我很久,借着这次调整CDN的机会,我干脆一次性把这个问题解决掉了。相信还有无数网友会碰到跟我一样的问题,特此把本人的一站式解决方案分享出来,供大家参考,理论上大家只看我这一篇文章就够了。

解决思路

对于工程师来说,让国内的阿里云主机能够顺畅访问GitHub,最容易想到的解决思路主要有2个方向:

  1. 在阿里云主机上实现网络加速;
  2. 用GitHub的国内镜像替换GitHub原始网站。

我先尝试了第1种方向,即在服务器上安装了Clash来实现网络加速;但碰到一个没有搞定的问题,是Discourse运行在Docker里,而Docker跟主机的网络环境并不共享。也就是说,即使我的主机可以成功加速上网,Docker仍然不行。

第2种方向就比较简单了;国内提供GitHub镜像的服务商有很多,我选择的是cnpmjs.org

:bomb:https://github.com.cnpmjs.orghttps://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,所以实际上是不影响的。

或者直接更换https://github.com/https://hub.fastgit.org/

也是网上搜的,跟https://github.com.cnpmjs.org/一样作用