众所周知,拥有独立的版本管理系统对于一个合作开发的团队而言极为重要。然而,在这方面优秀的产品固然不少,比如说万能的GitHub,Gitee等等。然而,试图探索新的可能性的YDJSIR没有这样做。YDJSIR尝试将代码仓库本地化部署以保证隐私性与控制性。
因此,YDJSIR选择了部署GitLab。当前,YDJSIR的GitLab主要是YDJSIR和ABN-Team在使用,使用体验极佳 。但基本来说,还是很好地实现了预期的功能。
可以看到GitLab有多吃性能,正常运行时YDJSIR的NPM基本是跑不了的,YDJSIR想做数据库方面的测试都得考虑用别的服务器
考虑到Aliyun的学生机的性能瓶颈与易用性方面的考虑,YDJSIR没有选择GitLab官方镜像,而是选择了宝塔软件商店中的GitLab中文版
来进行安装与配置。然后Nightmare开始了(不过现在也算是能用)下面,请允许YDJSIR简要复盘一下YDJSIR的经历。
如果想要看具体的部分,请点击右侧的TOC悬浮菜单。
1. 简要带过的安装步骤
配置环境概要
项目 | 内容 |
---|---|
硬件 | 阿里云学生机:轻量应用服务器 |
系统 | CentOS 7.6.1810(Py2.7.5) |
宝塔版本 | 免费版 7.2.0 |
宝塔的保姆式服务已经非常到位了。在下面软件商店中选择GitLab中文社区版
,点击安装,然后稍等片刻,便可开始享受了。
当然真大佬也可以选择自己手动安装再停用GitLab原生Nginx令其转投宝塔的Nginx的怀抱(反正我是不行)
宝塔自身也提供了对GitLab的基础配置修改与各项服务运行状态的监测等功能。然而这里没有上图,因为YDJSIR目前修改过配置文件,宝塔已经无法对它进行管理。(后文会讲到)
第一次进入GitLab系统,你需要填写一些基本参数,如设置Root账号密码,系统初始的秘钥(宝塔的GitLab管理面板提供了生成秘钥的功能,十分实用)等等。
宝塔安装的GitLab中文版
声称不支持占用80/443端口,若需要使用这两端口,用户可以进行反向代理/改用宝塔系统配置的Nginx(前面那个大佬方法就可以如此一步到位)。YDJSIR参阅了各类教程后决心选择反向代理的路子。
如果对下面的内容没有耐心,可以直接跳到反向代理部分
2. 基础配置
1. 配置文件中外链+邮件设置
设置邮件验证部分,YDJSIR第一次用到了GitLab的配置重载功能。这里给一些代码。也许是YDJSIR的搜索能力还不大好,一开始找出来的教程好多都严重过时,导致YDJSIR进行了多次·reconfigure
才最终解决问题。下面是YDJSIR找到的一些常用命令合集。
1 | # 重新应用gitlab的配置,每次修改/etc/gitlab/gitlab.rb文件之后执行 |
配置文件中大多数选项默认都是关掉的。如果你要启用一个功能,请确保你打开了所有配置项。
下面是对部分配置项的详解。
11 - 25 行
1 | external_url 'https://git.ydjsir.com.cn' |
294-309行
这里使用的是网易的163邮箱。下面的配置基本少了哪一条都不行,不过很幸运的是基本上都是默认值不用改动。网易邮箱已经默认支持SSL和TLS传输,因此这些选项应该打开。端口应该用465而不是25
1 | ################################ |
514-518行
YDJSIR采取的是单独修改GitLab的配置文件的方式,因而这部分设置可以忽略。然而这部分可以看到,YDJSIR在后来的端口转发设置时为了保证安全性,仅仅监听本地的反向代理。然而这也为后面YDJSIR的反向代理实现的时候总是开了证书也不是完全安全留下了伏笔。
1 | nginx['enable'] = true |
下面我们还会回到这里对其进行修改
2. GitLab后台设置
2.1 管理后台简介
- 以root身份进入GitLab系统。root用户自身也可以作为一个普通用户使用,但这显然是不推荐的。
- 一些基础配置项的详解
其实都到这里了,看提示就可以了。特别注意外观这里。这里可以配置登陆页面的外观展示。
虽然美中不足,单也算是差强人意吧。这个网页的登录效果大家也可以在这里欣赏。
YDJSIR的GitLab基本上是私有性质,并不对外开放,因而代码可见度基本上为私有。每一个注册用户都会经过YDJSIR的审核。在登录页面和错误页面YDJSIR做了一些小的优化,感觉尚可。
真正具体的设置
而非小功能的配置在这里。这里注意下这两项。
主页链接其实完全没必要,系统自然会重定向至此。每次更换域名访问都要重新输入该字段,这一特性为YDJSIR后面配置域名造成了极大困难。
3. 网络方面的设置
下面的内容介绍如何配置反向代理、重定向等等,并最终实现上图所示的访问效果。
3.1 修复Nginx的路径问题
上面的配置搞定之后,你会发现GitLab除了网页没得用,其他一切正常。接下来你会极度气恼。好了,这就是宝塔神经质的一点了。为了防止两个Nginx打架,宝塔在安装的时候改动了一点小小的路径。所以,你也得改下路径才能启动Nginx。当然,自从你reconfigure了GitLab之后,就不能用宝塔自带的界面管理该GitLab了。不过没事,上面都会了你还需要宝塔管理GitLab?所以这里是解决办法。
1 | vi /opt/gitlab/sv/nginx/run |
改
1 | exec chpst -P /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx |
为
1 | exec chpst -P /opt/gitlab/embedded/sbin/gitlab-web -p /var/opt/gitlab/nginx |
然后重启GitLab的Nginx。
1 | gitlab-ctl stop nginx |
注意不是restart
。restart
不能重载配置。
看到ok: run: nginx: (pid XXXXX) 0s
时,恭喜,你的GitLab网页部分跑起来了!
不就是配置文件地方不对嘛!那我把配置文件复制过去不就好了吗?
参考资料:https://www.syblogs.com/p/21.html
此法不能让宝塔重新识别GitLab
3.2 修改GitLab的Nginx的具体配置
首先,我们找到GitLab独立的Nginx的配置文件。
1 | cd /var/opt/gitlab/nginx/conf |
注意到该文件一旦GitLab发生reconfigure
就会被刷新,因此请自己保存一份。
1 | upstream gitlab-workhorse { |
然后重启GitLab的Nginx。
1 | gitlab-ctl stop nginx |
注意不是restart
。restart
不能重载配置。
看到ok: run: nginx: (pid XXXXX) 0s
时,恭喜,你的GitLab网页跑起来了!
3.3 在宝塔页面添加反向代理以实现高效访问
众所周知,HTTPS在这个时代格外引人青睐。YDJSIR也不能免俗。下面介绍如何用宝塔实现反代+HTTPS。
3.3.1 SSL证书部分
这部分内容显然就可以在图形化的界面中进行了。为了减少更新频率(一年一度,且为国内环境估计可以更好地战未来)(装AC),我选择的是阿里的免费SSL单域名证书。申请的过程请自行查阅阿里的文档,在此按下不表。
在宝塔的网站
页面新建一个网站,PHP啊数据库啊FTP什么的一个都不要,然后绑上你喜欢的域名(前文中我们已经申请了SSL的那个域名),接下来添加你的证书。这一步在宝塔的网站设置里面的SSL
一项中完成。你可以选择填入别处的证书,也可以直接用宝塔自带工具申请Let’s Encrypt证书。
SSL配置完成后,如果测试没有问题的话,就请打开强制跳转HTTPS以保障体验吧。宝塔使用的是非443端口一律重写URL重定向去HTTPS访问的链接,实际效果不错。
注意到有了反向代理和301/302重定向的时候Let‘s Encrypt自动续签的文件方式会失效,因此YDJSIR建议你先绑定SSL证书再进行后面的操作。当然,你可以采取域名解析的方式来续签以绝后患。YDJSIR刚刚完成了这一步操作,由于域名验证支持通配符,所以只要启用了一个,宝塔就会把所有的证书都替换成通配符证书,可以说是十分智能的。文件验证的话交给宝塔就好。
添加泛型域名时,请直接对绑定了默认域名前缀(@或者www)的网站进行操作。点击申请之后,宝塔会指引你如何填写DNS修改方式。你可以选择提供AccessKey给宝塔令其自动修改解析记录,也可以手动添加。DNS认证的话YDJSIR对宝塔不放心,因而选择了手动添加。把宝塔要求的DNS记录添加上,点击认证,宝塔便会自动部署证书并开启SSL。
登录后页面访问效果
登录页面访问效果
3.3.2 反向代理部分
注意:此处直接在宝塔的图形界面输入IP地址时宝塔会报错,但是直接修改配置文件则不会出现此问题。建议先搞一个带域名的,然后进配置文件强行拨乱反正。这里只是作为示范。你直接去改文件,这里不一定会更新。
这里所谓的高级功能,是你可以指定一个目录开反向代理。比如说你的首页是https://example.com ,那么你的GitLab可以挂载在https://example.com/gitlab 。你可以根据你的需要自行取舍。
缓存模式不大建议打开,如果你硬是要开,请随便。接下来点击配置文件
,进行如下配置(请自行修改)
1 | #PROXY-START/ |
至此,你会发现你已经能够以崭新的域名访问你可爱的GitLab了。然而,你会发现你时不时会被抛出到那个GitLab御用Nginx里面写的那个域名那里。然而你那个域名又不监听公网IP,自然是打不开的。(ABN-Team对该问题的反响极大)该问题在网页版提交文件、登录等操作时会发生。虽然说不影响实际数据提交,但是很影响体验。下面YDJSIR提出一个粗浅的解决方案。
3.3.3 重定向部分
首先,我们当然反对一切乱七八糟的域名访问。如果你狠心一点,你可以对于那些从非法域名进来的访问,一律404处理。所以在Nginx的配置文件里,你可以这么写。
1 | location /server { |
由于上面做了重定向,这里就不搞这么野蛮了。在反向代理的这个“网站”里,YDJSIR建议你如此设置。YDJSIR之所以不这么设置,是因为YDJSIR的宝塔的Nginx已经有默认的非法域名访问错误页面(SSL错误页面与普通HTTP错误页面各一),这里就不这么配置了。
此后,我们新开一个绑定了GitLab的Nginx里面那个不监听外网的域名的网站
(显然这一操 不会 引起冲突,因为是两个Nginx,而另一个Nginx根本不关心外网发生了什么)该操作在宝塔的图形化界面中进行。按照惯例,这个网站不需要PHP,数据库之类的东西。而后在设置处,选择重定向(测试版),而后添加如下重定向方式:
当然,你的DNS设置里当然也要A记录解析到GitLab所在的这台服务器。