gitlab 是个不错的开源套件,它提供了一套自建私有的类 github 服务的一站式解决方案。

和我之前介绍过的 gitolite 不同, gitlab 提供了清晰完善的前后台操作界面,管理上更加容易。

另外,如果有更进一步的 Code Review 需求,应该尝试 gerrit

gitlab 有相当丰富的文档,因此我这里仅记录一些配置中需要注意的点。

下载和安装

强烈建议使用 gitlab 提供的 Omnibus 安装方式,在一台干净的服务器上独立部署 gitlab。注意服务器配置应该至少 2 核 CPU + 4GB 内存 ,如果采用云服务器,建议也使用云硬盘,这样能够更方便地进行扩容,同时兼顾容灾需求。

gitlab 的官方源在国内访问速度比较慢。建议使用 Gitlab 中文社区 提供的 ,这个源托管在 清华大学 服务器。

安装并没有什么较难的地方,按照官方文档走完流程,然后启动服务即可。Omnibus 方式安装的路径为 /opt/gitlab

中文化

gitlab 并没有提供语言包,因此要使用补丁的方式进行中文化。gitlab 上的用户 xhang 进行了该工作,感谢他的辛苦努力。

中文化的流程如下(复制自 xhang 的介绍,有简化):

确认当前版本。

1
sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

我的版本是 9.3.6 ,查看汉化版本库是否包含 v9.3.6-zh 这个 tag 。若包含,就进行下面的流程。否则,你可以需要升级自己的 gitlab 到相应的版本。

1
2
3
4
# 克隆汉化版本库
git clone https://gitlab.com/xhang/gitlab.git
# 如果已经克隆过,则进行更新
git fetch

然后比较汉化标签和原标签,导出 patch 用的 diff 文件。

1
2
# 导出9.3.6 版本的汉化补丁
git diff v9.0.0 v9.3.6-zh > ../9.3.6-zh.diff

接下来应用补丁:

1
2
3
# 停止 gitlab
sudo gitlab-ctl stop
sudo patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 9.0.0-zh.diff

确定没有 .rej 文件,启动 GitLab 即可。

1
sudo gitlab-ctl start

执行重新配置命令

1
sudo gitlab-ctl reconfigure

邮件配置

如果不想折腾 Postfix 的话,可以直接配置一个 SMTP 服务器。我尝试过使用腾讯企业邮箱的 smtp 服务器,但是每封邮件发出时都会被腾讯邮件系统认为是滥用,要求输入验证码才可以发信。我想应该是腾讯邮箱并不欢迎这样使用他们的服务器。最终我购买了 阿里云的邮件推送服务 ,每天免费 200 封,这也够用了。

时区

默认时区为 UTC,因此显示的时间和本地时间相隔了8小时。可以参照 Changing your time zone 进行配置。对于中国使用的东八区时间,可以采用下面的值,任选一个均可:

1
2
3
4
5
6
Beijing
Asia/Shanghai
Choneqing
Asia/Chongqing
Hong Kong
Asia/Hong_Kong

更多的取值可以参考 TimeZone

使用子 URL

有时我们希望使用类似与 http://sample.com/gitlab/ 这样的 URL 来提供 gitlab 服务。gitlab 也提供了一个这样的试验性的功能。我尝试了一下,挺好用:

Configuring a relative URL for Gitlab

修改仓库地址

通过设置多个仓库地址,gitlab 可以将仓库分散到多个存储空间中,在 Repository storage paths 中有详细说明。

使用非绑定的 nginx

gitlab 自带了一个 nginx 服务器提供 web 服务。如果你的 gitlab 服务器还要进行其他工作,那么可能你已经自行在服务器安装了 nginx 。在这种情况下,你可能希望使用自己安装的 nginx 代替 gitlab 自带的 nginx 。这篇文章做了说明:

Using a non-bundled web-server

我也碰到了这样的情况,有一台服务器除了运行 gitlab ,还需要提供简单的 http 静态服务。但我采用了一个更简单的方案: 让 gitlab 自带的 nginx 监听 8000 端口,主 nginx 做一个代理转发:

1
2
3
location ^~ /gitlab {
proxy_pass http://localhost:8000;
}

查看错误

gitlab 提供了 Logs 工具帮助查看实时 log,例如使用下面的命令就能查看 gitlab 所有子系统的试试 log。

1
sudo gitlab-ctl tail

如果你的 gitlab 无法工作,不妨先看看 log 再说。

我在一台已经安装了 nginx 的服务器上部署 gitlab 后,发现无法访问管理界面,查看 log 后发现 80 端口冲突,很快就解决了问题。

GIT LFS 提交报错

gitlab 支持 git-lfs ,并且默认在新项目中开启。在推送使用了 git-lfs 的项目时,我碰到了这样的错误:

LFS: Client error: http://xxx/gitlab/mj/project.git/gitlab-lfs/objects/df4e2115c80d07ca4345ba92053dcc38c4002554677a04509d02669a50ab86bf/2858355 from HTTP 413

HTTP 413 错误的意思是负载过大,需要调整默认的 nginx 参数 client_max_body_size 。如果你使用的是我上面提到的采用 proxy_pass 实现两个 nginx 同时工作的方法,那么两个 nginx 的参数都需要调整。

全文完

留言