RHEL 9 本地部署 GitLab服务器

本文记录我在RHEL 9种安装和配置GitLab的操作记录,主要包括:

  • 安装Gitlab
  • 修改Gitlab的监听端口
  • 修改Gitlab 配置,使用已经安装的Nginx 作为反向代理来访问
  • 修改Gitlab 配置,使用outlook/hotmail等第3方邮件服务来发送通知消息

RHEL 9 环境介绍

首先介绍我的RHEL 9 服务器目前的状态,以解释为什么我要采取下面的操作:

  • 已经开通SSH服务,可以SSH登录
  • 已经运行了Nginx,通过80和443端口提供网页服务

安装GitLab

参考官方提供的链接https://about.gitlab.com/install/#almalinux 有些步骤不适用于我的情况,所以就跳过了。

1. 配置SSH访问

因为GitLab需要支持SSH服务以供客户端进行SSH连接的,所以需要安装和打开SSH服务:

1
2
3
4
sudo dnf install -y curl policycoreutils openssh-server perl
# Enable OpenSSH server daemon if not enabled: sudo systemctl status sshd
sudo systemctl enable sshd
sudo systemctl start sshd

我的电脑里RHEL 9 早已经使用了SSH 服务,所以上面的最后两条命令我不需要重新运行。

2. 配置防火墙

GitLab内置了Nginx模块并默认使用它来提供网络访问,默认使用80和443端口,所以如果系统里没有开通80和443端口,则需要执行下面防火墙命令开通这两个端口

1
2
3
4
# Check if opening the firewall is needed with: sudo systemctl status firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld

因为我已经在这个RHEL 9系统里安装了Nginx用于提供其他web 服务,早已经开通了80和443端口,所以这里不符合我的实际情况。我不但不需要执行上述防火墙命令,而且我还要修改GitLab里这个Nginx模块默认的监听端口80,因为它和我现在已经的Nginx配置发生端口冲突。修改端口会在后面介绍。

3. 安装GitLab

安装很简单,执行如下一行命令就可以了:

1
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

参考文档里还提供了命令来安装邮件服务器,用于为Gitlab提供邮件服务,比如创建账户时发送email通知用户去激活,以及各种GitLab CI/CD任务状态通知等。我因为使用现成的outlook email账号的邮件服务来实现这块,所以我略过这一步,不需要执行。

Next, install Postfix (or Sendmail) to send notification emails. If you want to use another solution to send emails please skip this step and configure an external SMTP server after GitLab has been installed

1
2
3
sudo dnf install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

配置GitLab

1. 修改GitLab 配置

Gitlab的配置都在文件/etc/gitlab/gitlab.rb里面,修改完这个文件里的配置后保存,然后执行命令sudo gitlab-ctl reconfigure 来使配置生效。

具体的修改如下:

  • 修改外部URL。这个URL会出现在所有从此GitLab服务器发送出的email里,比如创建新用户时发出的邮件,用户收到此邮件后需要点击邮件里的确认button来激活账户,如果这里域名设置错误,则无法激活用户账户。
1
external_url 'http://git.zangchuantao.com'  # 不能使用https

注意这里外部域名不要使用https,即使它最终是需要https访问,也要写http。我试了两次,如果设置为https,Gitlab会默认使用自带的let’s encrypt 模块来尝试获取SSL证书,而在我的系统里,我已经通过let’s encrypt为这个域名获取了SSL证书,所以存在冲突,导致出错:

使用HTTPs遇到的错误信息.png

  • 修改Nginx模块的监听端口,需要从默认的80端口改成别的端口,这里我随便设置为了8082
1
nginx['listen_port'] = 8082  # 修改端口
  • 添加Email服务。我用的outlook的邮箱,所以需要修改如下配置
1
2
3
4
5
6
7
8
9
10
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp-mail.outlook.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "my_outlook_email@outlook.com"
gitlab_rails['smtp_password'] = "my_password"
gitlab_rails['smtp_domain'] = "zangchuantao.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['gitlab_email_from'] = 'my_outlook_email@outlook.com'

如果是hotmail.com的邮箱,则可以参考如下设置:

1
2
3
4
5
6
7
8
9
10
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.office365.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "my_hotmail_email@hotmail.com"
gitlab_rails['smtp_password'] = "my_password"
gitlab_rails['smtp_domain'] = "zangchuantao.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['gitlab_email_from'] = 'my_hotmail_email@hotmail.com'

修改完上述设置后,执行如下命令来使配置生效:

1
sudo gitlab-ctl reconfigure

2. Nginx反向代理设置

如前面介绍,我的RHEL 9系统里早已使用Nginx来提供其他web服务,而新安装的GitLab里的Nginx模块也已经修改为监听别的端口,所以需要在系统的Nginx里针对这个域名做一个方向代理设置。创建1个新的Nginx 配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
server {
server_name git.zangchuantao.com;

# - - - - - - - - -
# Reverse Proxy
# - - - - - - - - -
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; # Let PP know the clients real IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Let PP know that a proxy did forward this request
proxy_set_header Host $http_host; # Set Proxy host info

proxy_http_version 1.1; # Required for WebSocket connection
proxy_set_header Upgrade $http_upgrade; # Allow protocol switch to websocket
proxy_set_header Connection "upgrade"; # Do protocol switch
proxy_set_header X-Forwarded-Proto $scheme; # Let PP know that this connection used HTTP or HTTPS

client_max_body_size 500M; # Bump the max body size, you may want to upload huge stuff via the upload GUI
proxy_buffering off;



listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate ...; # managed by Certbot
ssl_certificate_key ...; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

location / {
proxy_pass http://10.0.0.251:8082;
}
}

server {
if ($host = git.zangchuantao.com) {
return 301 https://$host$request_uri;
} # managed by Certbot


listen 80 ;
listen [::]:80;
server_name git.zangchuantao.com;
return 404; # managed by Certbot
}

经过此配置,就实现了通过http://git.zangchuantao.com 来访问我的gitlab服务器的目的,到此为止,配置完毕。


RHEL 9 本地部署 GitLab服务器
https://pub.zangchuantao.com/20240330/Install-GitLab-server-on-RHEL-9-Linux.html
作者
Chuantao
发布于
2024年3月30日
许可协议