一个计算机技术爱好者与学习者

0%

好好学GitLab:CentOS7安装配置GitLab

1. GitLab简介

GitLab是GitLab公司开发的基于Rails的开源存储库管理器。它是一个基于Web的git存储库管理器,允许团队协作编写、测试和部署应用程序。GitLab提供了多种功能,包括wiki、问题跟踪、代码审查和活动源。GitLab Inc提供5种产品:

  • Gitlab CE(社区版):自托管和免费,社区论坛的支持。
  • Gitlab EE(企业版):自托管和付费,附带其他功能。
  • Gitlab JH(企业级中国发行版):极狐,自托管和付费,附带其他功能。
  • GitLab.com:SaaS和免费。
  • GitLab.io:由GitLab Inc.管理的私有GitLab实例。

在本文中,我们将在具有2GB RAM的CentOS7服务器上逐步安装GitLab CE(Community Edition),服务器IP为192.168.56.103。

参考文档:

2. 环境准备

首先安装GitLab依赖的相关软件。

1、软件安装
yum -y install curl policycoreutils openssh-server openssh-clients postfix

2、postfix设置开机自启动

1
2
3
systemctl start postfix
systemctl enable postfix
systemctl status postfix

3. 安装GitLab

1、添加GitLab CE repository
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

2、安装gitlab
yum -y install gitlab-ce
软件642M,需要下载一会,耐心等待,安装完成会出现提示。

3、配置gitlab url
vim /etc/gitlab/gitlab.rb,修改external_url为:

1
external_url 'http://gitlab.voidking.com'

使gitlab配置生效,gitlab-ctl reconfigure
但是,这个命令执行时间特别久,因此建议在安装的时候就指定external_url:
EXTERNAL_URL="http://gitlab.voidking.com" yum -y install gitlab-ce

4、开放端口

1
2
3
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
systemctl reload firewalld

5、测试访问
浏览器访问 http://192.169.56.103 ,即可跳转到gitlab登录页面。

重置密码之后,使用root用户登录,即可进行项目管理。

6、域名访问
修改本机host,添加:

1
192.168.56.103  gitlab.voidking.com

然后就可以通过域名访问gitlab了,奇怪的是,域名哪怕不是设置成external_url中的url,也可以通过域名访问。

4. 配置HTTPS加密访问

HTTPS(SSL/TLS)加密原理,参考文档《浅谈数据加密》

4.1. 自建CA并颁发证书

参考文档:

本节中,安装mkcert并使用它生成SSL证书。

1、安装nss-tools工具
yum install nss-tools

2、下载二进制包
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.3.0/mkcert-v1.3.0-linux-amd64

3、添加执行权限并移入bin

1
2
chmod +x  mkcert
mv mkcert /usr/local/bin

4、获取CA根目录
mkcert -CAROOT

5、安装本地CA
mkcert -install,输出:

1
2
3
4
Using the local CA at "/root/.local/share/mkcert" ✨
The local CA is now installed in the system trust store! ⚡
ERROR: no Firefox and/or Chrome/Chromium security databases found
The local CA is now installed in Java's trust store! ☕

6、生成证书
mkcert gitlab.voidking.com localhost 127.0.0.1,输出:

1
2
3
4
5
6
7
8
9
10
Using the local CA at "/root/.local/share/mkcert"
Warning: the local CA is not installed in the Firefox and/or Chrome/Chromium trust store! ⚠
Run "mkcert -install" to avoid verification errors ‼

Created a new certificate valid for the following names 📜
- "gitlab.voidking.com"
- "localhost"
- "127.0.0.1"

The certificate is at "./gitlab.voidking.com+2.pem" and the key at "./gitlab.voidking.com+2-key.pem"

7、创建证书目录并且移动证书

1
2
mkdir -p /etc/gitlab/ssl/
mv gitlab.voidking.com* /etc/gitlab/ssl/

4.2. 生成DHPARAM

1、使用OpenSSL生成DHPARAM证书pem文件
openssl dhparam -out /etc/gitlab/ssl/dhparams.pem 2048

2、将证书文件的权限更改为600
chmod 600 /etc/gitlab/ssl/dhparams.pem

4.3. 使用

1、修改gitlab url
vim /etc/gitlab/gitlab.rb,如下修改:

1
2
3
4
5
external_url 'https://gitlab.voidking.com'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.voidking.com+2.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.voidking.com+2-key.pem"
nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"

2、重新配置gitlab
gitlab-ctl reconfigure

3、测试访问
服务器上测试,curl localhost -L,正常。
本地浏览器访问 https://gitlab.voidking.com/users/sign_in ,出现安全提示。

这是因为,这是因为浏览器不信任刚才自建的CA,解决办法是安装rootCA,更多内容参考https 以及内网如何使用

4、下载rootCA.pem
/root/.local/share/mkcert目录中下载rootCA.pem到本地。

5、Chrome添加证书
设置,高级设置,管理证书,导入,选择rootCA.pem,证书存储选择受信任的根证书颁发机构,完成,出现警告点确定。重启Chrome,再次访问就没有警告了。

6、Firefox添加证书
选项,隐私与安全,证书,查看证书,导入,选择rootCA.pem。重启Firefox,再次访问就没有警告了。

7、创建项目
Create a Project,Project name填入voidking,选择Public,勾选Initialize repository with a README。

8、clone项目

1
2
git config --global http.sslVerify false
git clone https://gitlab.voidking.com/root/voidking.git

9、上传代码

1
2
3
4
# 添加test.txt文件
git add .
git commit -m "add new file"
git push

查看项目,代码已经上传成功。

5. 错误排查

关闭服务器之后重启,发现无法访问gitlab服务。
1、关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

关闭防火墙之后,依然无法访问。

2、查看服务和端口

1
2
ps aux | grep nginx
netstat -nlpt | grep 80

没有找到nginx服务,说明nginx出了问题。
gitlab-ctl restart nginx,无效,80端口依然没有监听。

3、查看gitlab日志
gitlab-ctl tail
这次定位到了问题,缺少pem文件。

1
2019-08-06_09:26:08.31983 nginx: [emerg] BIO_new_file("/etc/gitlab/ssl/gitlab.voidking.com+2.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/gitlab/ssl/gitlab.voidking.com+2.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)

查看/etc/gitlab/ssl/目录,发现gitlab.voidking.com+2.pem变成了gitlab.voidking.com+3.pem!虽然不知道为什么2变成了3,但是改回来应该就可以了。改回原文件名,问题解决。

6. 后记

至此,局域网的gitlab安装配置完成,可以正常使用了。
在公网环境下,配置更加简单,gitlab.rb中配置证书颁发机构颁发的SSL证书即可。