CentOS8.2 安装Gitlab,以及gitlab 安装提示502详细解决过程
GitLab官网:链接地址
前言:
gitlab分为两个版本ee版和ce版,ee版是30天试用的企业版,到期后需要给钱。
ce版为免费版,本人以ce版为例。
本文安装过程和官方安装过程稍有不同,主要在于没有使用官方的安装脚本,官方安装脚本镜像拉取实在太慢,改为从清华源拉取镜像。
1.安装依赖
sudo dnf install -y curl policycoreutils openssh-server openssh-clients
2.启用sshd服务
sudo systemctl enable sshd
3.开启sshd服务
sudo systemctl start sshd
4.查看sshd服务适用运行成功
sudo systemctl status sshd
5.查看防火墙状态,可以看到防火墙状态为dead
sudo systemctl status firewalld
6.如果步骤5状态为dead,则需要开启防火墙,如果没任何提示代表开启成功
systemctl start firewalld
7. 再次查看防火墙状态为active(running)表示防火墙正在运行
sudo systemctl status firewalld
8.将http和https服务添加到防火墙
#--permanent表示永久生效,如果不加重启机器后就不再生效 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https #重新加载防火墙配置 sudo systemctl reload firewalld
9.因为gitlab官方安装脚本拉取镜像很慢,所以从清华镜像拉取最新的包。
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-14.3.3-ce.0.el8.x86_64.rpm
10.安装刚才下载下来的安装包
rpm -i gitlab-ce-14.3.3-ce.0.el8.x86_64.rpm
11.编辑ip和端口,
vim /etc/gitlab/gitlab.rb
12.重新加载gitlab配置信息,这一步比较慢需要等久一点
gitlab-ctl reconfigure
13.重启gitlab
gitlab-ctl restart
14.之后在本机浏览器输入地址 http://162.14.66.150:8080 提示502错误!
15.gitlab官方文档中说的是当CPU到达100%时会返回502错误,这个错误来自包Unicorn。
由于我们安装的gitlab是14.3.3版本,Unicorn包已被弃用,改名为Puma,所以我们可以初步判断是Puma包导致的502报错。
参考链接:502 Gateway Timeout after Unicorn spins at 100% CPU
16.输入命令top查看cpu占用状态,发现command为bundle这个操作占用了99.3%的cpu,这明显是不合理的。
17.实时打印 puma包的日志,发现输出"Errno::EADDRINUSE: Address already in use - bind(2) for "127.0.0.1" port 8080"。原因就很清晰了,是因为8080端口被占用。
#实时打印puma包的日志
sudo gitlab-ctl tail puma
15.查看占用端口为8080并且状态为LISTEN的进程
发现8080端口被进程Id:58799 进程名:nginx:maser 的进程占用了,这是gitlab自带的nginx默认的监听端口。
而包puma也需要监听8080端口,产生了冲突导致puma 执行build失败。
puma包在执行build失败之后会无限重试,导致了死循环把cpu跑到了100%。
netstat -anp |grep 8080
16.接下来只需要给puma包设置默认监听端口不是8080就好了,我这里设置为8081
vim /etc/gitlab/gitlab.rb
新增
puma['port'] = 8081
17.依次执行下面命令
#停止gitlab
gitlab-ctl stop
#重新加载gitlab配置
gitlab-ctl reconfigure
#重新运行gitlab
gitlab-ctl restart
#监视cpu状态
top
18.可以看到两个CPU占用非常高的进程,此时如果您在本机访问搭建的gitlab地址,依旧会提示502。
因为此时gitlab正在构建,我们什么都不需要做。只需要等到这两个CPU占用很高的进程CPU降低后就可以访问了。
注:如果远程访问不是提示502错误,而是提示连接失败之类的。80%都是因为服务器防火墙限制或者云服务器提供商防火墙限制。
#停止服务器防火墙
sudo systemctl stop firewalld