本教程适用于以下操作系统版本

  • Rocky Linux 9
  • Rocky Linux 8.4

本页内容

  • 准备工作
  • 第 1 步 - 配置防火墙
  • 第 2 步 - 安装依赖项
  • 第 3 步 - 安装 GitLab
  • 第 4 步 - 配置 SSL 启用 DHParam 指令 禁用 HTTP 严格传输安全(HSTS)
  • 第 5 步 - 配置 SMTP
  • 第 6 步 - 配置 Nginx 将 HTTP 重定向到 HTTPS。设置 Referrer-Policy 头部 将自定义 Nginx 设置插入 GitLab 服务器块 将自定义设置插入 Nginx 配置
  • 第 7 步 - 启用容器镜像仓库
  • 第 8 步 - 启用 GitLab Pages
  • 第 9 步 - 启用 MatterMost 为 Mattermost 配置 SMTP
  • 第 10 步 - 访问并配置 GitLab Web 访问 GitLab 关闭 GitLab 进行维护 限制公开注册 配置 GitLab 个人资料 修改 Root 密码 修改用户名并启用双因素认证 禁用 Prometheus 指标并提升隐私 配置 Mattermost
  • 第 11 步 - 创建您的第一个项目 添加您的 SSH 密钥 创建一个项目
  • 第 12 步 - 备份 GitLab
  • 第 13 步 - 恢复 GitLab
  • 第 14 步 - 升级 GitLab
  • 总结
  • 启用 DHParam 指令
  • 禁用 HTTP 严格传输安全(HSTS)
  • 将 HTTP 重定向到 HTTPS。
  • 设置 Referrer-Policy 头部
  • 将自定义 Nginx 设置插入 GitLab 服务器块
  • 将自定义设置插入 Nginx 配置
  • 为 Mattermost 配置 SMTP
  • 访问 GitLab
  • 关闭 GitLab 进行维护
  • 限制公开注册
  • 配置 GitLab 个人资料
  • 修改 Root 密码
  • 修改用户名并启用双因素认证
  • 禁用 Prometheus 指标并提升隐私
  • 配置 Mattermost
  • 添加您的 SSH 密钥
  • 创建一个项目

GitLab Server 是云托管版 GitLab 版本控制的开放源代码版本,用于托管 Git 仓库。相比于云托管,自行托管您的仓库的优势在于对代码拥有完全的控制权。它具备云服务平台上的所有功能,是您开发团队的一款实用工具。它还集成了 Mattermost 聊天服务,允许您的用户相互交流并分享代码评审。

本指南将教您如何在 Ubuntu 22.04 服务器上使用 Docker 安装 GitLab Server。GitLab 提供两个版本——免费的社区版和付费的企业版。我们将安装社区版。如果您需要更多功能,可以升级到企业版。

准备工作

  • 一台运行 Rocky Linux 9 的服务器,至少配备 4GB 内存和 4 个 CPU 核心,可支持多达 500 名用户。
  • 一个具有 sudo 权限的普通用户。
  • 一个已配置指向该服务器的域名,例如 gitlab.example.com。根据您的需求,我们还会用到 mattermost.example.com 和 pages.example.com。
  • 确保所有软件包均为最新。$ sudo dnf update
  • 系统需要安装的几个软件包。$ sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils 其中部分软件包可能已在您的系统上安装。

一台运行 Rocky Linux 9 的服务器,至少配备 4GB 内存和 4 个 CPU 核心,可支持多达 500 名用户。

一个具有 sudo 权限的普通用户。

一个已配置指向该服务器的域名,例如 gitlab.example.com。根据您的需求,我们还会用到 mattermost.example.com 和 pages.example.com。

确保所有软件包均为最新。

$ sudo dnf update

系统需要安装的几个软件包。

$ sudo dnf install -y wget nano unzip yum-utils policycoreutils-python-utils

其中部分软件包可能已在您的系统上安装。

第 1 步 - 配置防火墙

在安装任何软件包之前,第一步是配置防火墙,以开放 HTTP 和 HTTPS 端口。Rocky Linux 使用 Firewalld 防火墙。请检查防火墙的状态。

$ sudo firewall-cmd --state
running

防火墙使用不同的区域(zone)工作,public 区域是我们将使用的默认区域。列出防火墙上所有已激活的服务和端口。

$ sudo firewall-cmd --zone=public --list-all

它应该显示如下输出。

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

在防火墙中开放 HTTP 和 HTTPS 端口。

$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

再次检查防火墙的状态。

$ sudo firewall-cmd --zone=public --list-all

您应该会看到类似的输出。

public
  target: default
  icmp-block-inversion: no
  interfaces: enp1s0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

使所有更改永久生效,并重新加载防火墙以应用更改。

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

第 2 步 - 安装依赖项

在安装 GitLab 之前,安装 GitLab 正常运行所需的软件包非常重要。所有这些软件包都可以在 Rocky Linux 软件源中获取。

执行以下命令来安装依赖项。

$ sudo dnf install -y curl policycoreutils openssh-server perl

GitLab 需要一个可用的电子邮件解决方案来发送通知邮件。对此有两种选择。其一是安装 Postfix。其二是使用外部 SMTP 服务。如果您选择 Postfix 方案,请使用以下命令安装它。

$ sudo dnf install postfix

在安装过程中,可能会询问站点类型。选择 Internet Site 选项继续,然后输入您服务器的 FQDN 作为邮件名,按回车继续。如果出现任何其他界面,请一直按回车键以选择默认选项。

要将 Postfix 配置为 SMTP 服务器,还需要进行大量配置,相关说明超出了本文的范围。GitLab 有一篇关于配置 Postfix 的文章可供参考。

第 3 步 - 安装 GitLab

下载并运行 GitLab 软件源安装脚本。

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

忽略关于缺少 pygpgme 软件包的警告,因为该软件包在 Rocky Linux 9 上不可用。

GitLab 随附了大量的软件包,使得管理它变得轻松许多。例如,GitLab 自带 Nginx Web 服务器,并支持创建 Let's Encrypt SSL 证书。

如果您在安装期间为 GitLab 网站指定了外部 URL,它将被自动配置,并且会自动生成并应用 SSL 证书。您还可以在安装期间指定管理员密码。如果不指定,GitLab 会生成一个临时密码,该密码会在一天后自动删除。

我们将同时指定外部 URL 和管理员密码。运行以下命令来安装 GitLab。

$ sudo GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee

为您的安装设置一个强密码。这里我们安装的是 GitLab 企业版(gitlab-ee)。如果您不购买并应用许可证,它仍然可以像免费的社区版一样正常运行。但如果您安装的是社区版(gitlab-ce),那么要升级时就必须重新安装企业版。因此,即使您不打算升级,我们也建议使用企业版。

安装完成后,您应该会看到类似的输出。

Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

gitlab Reconfigured!

       *.                  *.
      ***                 ***
     *****               *****
    .******             *******
    ********            ********
   ,,,,,,,,,***********,,,,,,,,,
  ,,,,,,,,,,,*********,,,,,,,,,,,
  .,,,,,,,,,,,*******,,,,,,,,,,,,
      ,,,,,,,,,*****,,,,,,,,,.
         ,,,,,,,****,,,,,,
            .,,,***,,,,
                ,*,.
  


     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Thank you for installing GitLab!
GitLab should be available at https://gitlab.example.com

For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md

Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=16-9


  Verifying        : gitlab-ee-16.9.1-ee.0.el9.x86_64                                                                                                                                                           1/1 

Installed:
  gitlab-ee-16.9.1-ee.0.el9.x86_64                                                                                                                                                                                  

Complete!

您也可以安装特定版本的 GitLab。首先,查看可用的 GitLab 版本列表。

$ sudo dnf --showduplicates list gitlab-ee*

您应该会看到类似的输出。

Available Packages
gitlab-ee.x86_64                    16.0.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.0.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.1.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.2.9-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.3.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.4.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.5.8-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.6.7-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.4-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.5-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.7.6-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.1-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.2-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.8.3-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.9.0-ee.0.el9                 gitlab_gitlab-ee
gitlab-ee.x86_64                    16.9.1-ee.0.el9                 gitlab_gitlab-ee

我们来安装 16.7.0 版本。

$ sudo GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="https://gitlab.example.com" dnf install -y gitlab-ee-16.7.0-ee.0.el9

检查 GitLab 及相关服务的状态。

$ sudo gitlab-ctl status

您应该会看到如下输出。

run: alertmanager: (pid 6551) 1013s; run: log: (pid 6306) 1093s
run: crond: (pid 6507) 1018s; run: log: (pid 5663) 1251s
run: gitaly: (pid 6479) 1020s; run: log: (pid 5297) 1419s
run: gitlab-exporter: (pid 6522) 1016s; run: log: (pid 6183) 1118s
run: gitlab-kas: (pid 5553) 1400s; run: log: (pid 5566) 1399s
run: gitlab-workhorse: (pid 6455) 1021s; run: log: (pid 5766) 1233s
run: logrotate: (pid 5181) 1434s; run: log: (pid 5189) 1433s
run: nginx: (pid 6470) 1021s; run: log: (pid 5806) 1227s
run: node-exporter: (pid 6515) 1017s; run: log: (pid 6150) 1124s
run: postgres-exporter: (pid 6563) 1013s; run: log: (pid 6351) 1087s
run: postgresql: (pid 5360) 1411s; run: log: (pid 5385) 1408s
run: prometheus: (pid 6532) 1016s; run: log: (pid 6268) 1100s
run: puma: (pid 5666) 1247s; run: log: (pid 5673) 1246s
run: redis: (pid 5227) 1428s; run: log: (pid 5236) 1427s
run: redis-exporter: (pid 6524) 1016s; run: log: (pid 6233) 1110s
run: registry: (pid 6480) 1020s; run: log: (pid 5956) 1165s
run: sidekiq: (pid 5692) 1241s; run: log: (pid 5700) 1240s

您可以使用以下命令停止和启动 GitLab。

$ sudo gitlab-ctl stop
$ sudo gitlab-ctl start

GitLab 应该已经启动并运行。

您也可以使用以下命令停止和启动单个服务。

$ sudo gitlab-ctl stop nginx
$ sudo gitlab-ctl start nginx
$ sudo gitlab-ctl restart nginx

您可以通过在浏览器中访问 https://gitlab.example.com 来访问您的 GitLab 安装。我们将在后续步骤中回来配置 GitLab。

第 4 步 - 配置 SSL

GitLab 将其配置存储在 /etc/gitlab/gitlab.rb 文件中。打开该文件进行编辑。

$ sudo nano /etc/gitlab/gitlab.rb

找到 Let's Encrypt Integration 部分,并按如下所示修改相关值。

letsencrypt['contact_emails'] = ['
[email protected]
'] # This should be an array of email addresses to add as contacts
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

这样可以启用 Let's Encrypt,设置用于接收 SSL 过期通知的电子邮件,并将证书设置为每月第 7 天 12:30(服务器时间)自动续订。

启用 DHParam 指令

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/gitlab/ssl/dhparams.pem 4096

在文件中设置以下选项。

nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem" # Path to dhparams.pem, eg. /etc/gitlab/ssl/dhparams.pem

禁用 HTTP 严格传输安全(HSTS)

启用 HTTPS 会自动启用 HSTS 服务。有时,当您之后不再需要时,它可能会引发问题。要禁用 HSTS,请配置以下变量。

nginx['hsts_include_subdomains'] = false

完成后,按 Ctrl + X 并在提示时输入 Y 以保存文件。

使用新设置重新配置 GitLab。

$ sudo gitlab-ctl reconfigure

此过程可能需要一些时间才能完成。完成后,您可以通过在浏览器中访问 https://gitlab.example.com 来访问您的 GitLab 安装。您应该会看到如下登录页面。

第 5 步 - 配置 SMTP

GitLab 需要发送通知邮件,为此我们需要为其启用 SMTP 设置。如果您使用的是 Postfix,可以跳过这一步。否则,让我们继续。

打开 GitLab 配置文件进行编辑。

$ sudo nano /etc/gitlab/gitlab.rb

在本教程中,我们将使用 Amazon SES。在文件中找到 SMTP 部分,并按如下所示设置相关值。

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "email-smtp.region-1.amazonaws.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "IAMmailerKey"
gitlab_rails['smtp_password'] = "IAMmailerSecret"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true

# If your SMTP server does not like the default 'From: gitlab@localhost' you
# can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '
[email protected]
'
gitlab_rails['gitlab_email_display_name'] = 'Howtoforge GitLab'
gitlab_rails['gitlab_email_reply_to'] = '
[email protected]
'

您可以通过设置以下选项来启用 SMTP 连接池。

gitlab_rails['smtp_pool'] = true

这允许 Sidekiq 工作进程在多个任务中复用 SMTP 连接。

完成后,按 Ctrl + X 并在提示时输入 Y 以保存文件。

您也可以加密 SMTP 认证信息。运行以下命令。

sudo gitlab-rake gitlab:smtp:secret:edit EDITOR=nano

按图示在文件中输入 SMTP 用户名和密码。

user_name: 'smtp user'
password: 'smtp password'

按 Ctrl + X 并在提示时输入 Y 以保存文件。

从 /etc/gitlab/gitlab.rb 中移除变量 gitlab_rails['smtp_user_name'] 和 gitlab_rails['smtp_password']。

完成 SMTP 设置后,重新配置 GitLab 设置。

$ sudo gitlab-ctl reconfigure

第 6 步 - 配置 Nginx

GitLab 内置的 Nginx 服务器可以进行广泛配置。我们将介绍其中一些重要选项。

打开 GitLab 配置文件进行编辑。

$ sudo nano /etc/gitlab/gitlab.rb

将 HTTP 重定向到 HTTPS。

修改以下值,以自动将 HTTP 链接重定向到 HTTPS。

nginx['redirect_http_to_https'] = true

设置 Referrer-Policy 头部

默认情况下,GitLab 会在所有响应中将 Referrer-Policy 头部设置为 strict-origin-when-cross-origin。配置以下变量,将该头部设置为不同的值。

nginx['referrer_policy'] = 'same-origin'

将自定义 Nginx 设置插入 GitLab 服务器块

使用以下变量将自定义设置插入 GitLab 服务器块。

# Example: block raw file downloads from a specific repository
nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"

将自定义设置插入 Nginx 配置

使用以下设置插入自定义配置。

# Example: include a directory to scan for additional config files
nginx['custom_nginx_config'] = "include /etc/gitlab/nginx/sites-enabled/*.conf;"

创建 /etc/gitlab/nginx/sites-available 目录。

$ sudo mkdir /etc/gitlab/nginx/sites-available

在其中创建该块(block)文件。

$ sudo touch /etc/gitlab/nginx/sites-enabled/example.conf

编辑该文件并添加您的设置。

$ sudo nano /etc/gitlab/nginx/sites-enabled/example.conf

完成后,回到终端,运行以下命令以创建 /etc/gitlab/nginx/sites-enabled 目录。

$ sudo mkdir /etc/gitlab/nginx/sites-enabled

运行以下命令创建符号链接(symlink)。

sudo ln -s /etc/gitlab/nginx/sites-available/example.conf /etc/gitlab/nginx/sites-enabled/example.conf 

完成 Nginx 配置后,按 Ctrl + X 并在提示时输入 Y 以保存文件。

重新配置 GitLab 设置。

$ sudo gitlab-ctl reconfigure

第 7 步 - 启用容器镜像仓库

如果您使用的是内置的 Let's Encrypt 集成,容器镜像仓库会在您的 GitLab 域名、端口 5050 上自动启用并可用。

打开 GitLab 配置文件。

$ sudo nano /etc/gitlab/gitlab.rb

为您的 GitLab 容器镜像仓库设置外部 URL。

registry_external_url 'https://gitlab.example.com:5050'

在上一行下方添加以下行,以设置 HTTP 到 HTTPS 的重定向。

registry_nginx['redirect_http_to_https'] = true

按 Ctrl + X 并在提示时输入 Y 以保存文件。

重新配置 GitLab 设置。

$ sudo gitlab-ctl reconfigure

在防火墙中开放 2425 端口。

$ sudo firewall-cmd --zone=public --add-port=5050/tcp
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

使用以下命令进行验证。

$ openssl s_client -showcerts -servername gitlab.example.com -connect gitlab.example.com:5050 > cacert.pem

您应该能够使用以下命令,通过您的 GitLab 凭据从 Docker 登录到容器镜像仓库。

$ docker login gitlab.example.com:5050

您可以使用不同的 URL(例如 https://registry.gitlab.example.com)作为您的容器镜像仓库,这将需要额外的配置。您还可以为容器配置 S3 存储。请参阅 GitLab 容器镜像仓库文档以获取相关说明。

第 8 步 - 启用 GitLab Pages

您需要一个不是 GitLab URL 子域名的域名。出于我们的目的,我们将使用 https://pages.example.com 来托管 GitLab Pages。我们还假设我们没有使用通配符 DNS(Wildcard DNS)。

打开 GitLab 配置文件。

$ sudo nano /etc/gitlab/gitlab.rb

按如下所示设置以下变量。

pages_external_url 'https://pages.example.com'
.....
# Experimental - Enable namespace in path
gitlab_pages["namespace_in_path"] = true

在 GitLab Pages 的 NGINX 部分中配置 GitLab Pages 的 Nginx。

# Below you can find settings that are exclusive to "GitLab Pages NGINX"
pages_nginx['enable'] = true
pages_nginx['redirect_http_to_https'] = true
pages_nginx['ssl_certificate'] = "/etc/letsencrypt/live/pages.example.com/fullchain.pem"
pages_nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/pages.example.com/privkey.pem"

按 Ctrl + X 并在提示时输入 Y 以保存文件。

重新配置 GitLab 设置。

$ sudo gitlab-ctl reconfigure

如果您想托管基于通配符 DNS 的域名,请参阅 GitLab Pages 文档。

第 9 步 - 启用 MatterMost

Mattermost 是一款开源的在线聊天服务,具有文件共享、表情符号、GIF、Markdown 支持、语法高亮和多语言支持等功能。GitLab 集成了 MatterMost,您可以启用它,并允许共享 GitLab 实例的公司用户相互通信。

GitLab Mattermost 默认处于禁用状态。要启用它,请打开 GitLab 配置文件。

$ sudo nano /etc/gitlab/gitlab.rb

添加 Mattermost 外部 URL。GitLab 将使用 Let's Encrypt 自动为该 URL 生成 SSL。

mattermost_external_url 'https://mattermost.example.com'

通过添加以下行,确保 Mattermost 的 HTTP 到 HTTPS 配置设置为 true。

mattermost_nginx['redirect_http_to_https'] = true

按 Ctrl + X 并在提示时输入 Y 以保存文件。

重新配置 GitLab 设置。

$ sudo gitlab-ctl reconfigure

您应该能够通过 https://mattermost.example.com 访问 Mattermost。当您打开该 URL 时,应该会看到如下页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

如果您安装了 Mattermost 应用,请选择“在桌面应用中查看”(View in Desktop App)按钮,或选择“在浏览器中查看”(View in Browser)按钮选项。请务必勾选“记住我的偏好”(Remember my preference)选项,以免下次再次被询问。我们将在下一步回来配置 Mattermost。

为 Mattermost 配置 SMTP

Mattermost 将其配置存储在 /var/opt/gitlab/mattermost/config.json 文件中。打开该文件进行编辑。

$ sudo nano /var/opt/gitlab/mattermost/config.json

找到 "EmailSettings" 部分,并按图示进行配置。我们需要设置 FeedbackEmail、ReplyToAddress、EnableSMTPAuth、SMTPUsername、SMTPPassword、SMTPServer、SMTPPort、ConnectionSecurity 和 SkipServerCertificateVerification 这些选项才能使其正常工作。

    "EmailSettings": {
        "EnableSignUpWithEmail": true,
        "EnableSignInWithEmail": true,
        "EnableSignInWithUsername": true,
        "SendEmailNotifications": true,
        "UseChannelInEmailNotifications": false,
        "RequireEmailVerification": false,
        "FeedbackName": "Howtoforge Mattermost",
        "FeedbackEmail": "
[email protected]
",
        "ReplyToAddress": "
[email protected]
",
        "FeedbackOrganization": "",
        "EnableSMTPAuth": true,
        "SMTPUsername": "AmazonSESUsername",
        "SMTPPassword": "AmazonSESPassword",
        "SMTPServer": "email-smtp.us-west-2.amazonaws.com",
        "SMTPPort": "465",
        "SMTPServerTimeout": 10,
        "ConnectionSecurity": "TLS",
        "SendPushNotifications": true,
        "PushNotificationServer": "https://push-test.mattermost.com",
        "PushNotificationContents": "full",
        "PushNotificationBuffer": 1000,
        "EnableEmailBatching": false,
        "EmailBatchingBufferSize": 256,
        "EmailBatchingInterval": 30,
        "EnablePreviewModeBanner": false,
        "SkipServerCertificateVerification": true,
        "EmailNotificationContentsType": "full",
        "LoginButtonColor": "#0000",
        "LoginButtonBorderColor": "#2389D7",
        "LoginButtonTextColor": "#2389D7"
    },

按 Ctrl + X 并在提示时输入 Y 以保存文件。

第 10 步 - 访问并配置 GitLab Web

访问 GitLab

在浏览器中打开 URL https://gitlab.example.com,您将看到如下登录界面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

输入 root 作为用户名,以及您在上一步中获得的密码,以登录到您的 GitLab 仪表盘。登录后,您将被带到如下仪表盘界面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

如您所见,GitLab 已经创建了一个用于监控该实例的项目。

关闭 GitLab 进行维护

如果您想在执行服务器任务时将 GitLab 实例置于维护状态,请使用以下命令。

$ sudo gitlab-ctl deploy-page up
cp /opt/gitlab/embedded/service/gitlab-rails/public/deploy.html /opt/gitlab/embedded/service/gitlab-rails/public/index.html

当用户访问 GitLab 网站时,他会看到“部署进行中”(Deploy in progress)页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

要移除该页面,请运行以下命令。

$ sudo gitlab-ctl deploy-page down

如果您想将项目设为只读,请运行以下命令以打开 Rails 控制台。

$ sudo gitlab-rails console

它看起来如下所示。

--------------------------------------------------------------------------------
 Ruby:         ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]
 GitLab:       16.9.2-ee (0d71d32d321) EE
 GitLab Shell: 14.33.0
 PostgreSQL:   14.10
------------------------------------------------------------[ booted in 78.60s ]
Loading production environment (Rails 7.0.8)
irb(main):001:0>

使用以下命令将所有项目设为只读。

    Project.all.find_each { |project| project.update!(repository_read_only: true) }

输入 exit 退出控制台。要将项目恢复到正常状态,请在控制台中使用以下命令。

Project.all.find_each { |project| project.update!(repository_read_only: false) }

限制公开注册

默认情况下,任何人都可以创建账户并获得访问权限。如果您不希望这样,可以将其关闭。幸运的是,该设置以仪表盘上的弹出窗口形式呈现。点击“关闭”(Turn off)按钮,以限制您 GitLab 实例上的公开注册。这样做会将您重定向到如下设置页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

取消勾选“启用注册”(Sign-up enabled)选项以限制注册。点击“保存更改”(Save changes)按钮以应用设置。

如果您在仪表盘中没有看到弹出窗口,可以通过点击左下角菜单中的“管理员区域”(Admin Area)按钮来访问设置页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

进入管理员面板后,将鼠标悬停在左侧边栏的“设置”(Settings)选项上,然后点击“通用”(General)子菜单。从那里您可以进入“注册限制”(Sign-up restrictions)面板。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

配置 GitLab 个人资料

您的默认个人资料相当简陋,没有任何可展示的内容。要改变这一点,请点击左上角的用户图标,调出下拉菜单,然后选择“编辑个人资料”(Edit profile)选项。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

您将被带到个人资料设置页面,在那里您可以添加您的姓名、电子邮件以及关于您自己的其他信息。完成后点击“更新个人资料设置”(Update profile settings)。先不要返回主页,因为我们这里还有一些需要配置的内容。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

修改 Root 密码

这是最重要的步骤之一。您应该立即修改默认的 root 密码。在较早的版本中,GitLab 要求您在安装过程中修改密码,但现在它已改为可选项。要修改密码,请点击左侧边栏的“密码”(Password)菜单。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

输入您的密码信息,然后点击“保存密码”(Save password)以完成修改。您将被登出实例,需要重新登录。

修改用户名并启用双因素认证

您可以将默认的 GitLab 用户名从 root 修改为您选择的任意名称。为此,请点击左侧边栏的“账户”(Account)菜单。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

进入页面后,输入您的新用户名,并点击“更新用户名”(Update username)按钮以完成修改。系统会再次提示您确认。再次点击“更新用户名”按钮以确认更改。

您还应该在此处启用双因素认证(two-factor authentication),以提升账户安全性。

禁用 Prometheus 指标并提升隐私

在上一步中,我们讨论了增大 droplet 的共享内存大小,并将其保持在至少 256 MB。这主要是为了在磁盘上存储与 Prometheus 指标相关的数据。如果您不使用该功能,应该禁用它。您只能在安装后禁用它。要禁用它,请从菜单栏打开“管理员面板”(Admin Panel)。

进入管理员面板后,打开“设置”(Settings)>>“指标和性能分析”(Metrics and profiling)菜单选项。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

在“指标”页面中,展开“指标 - Prometheus”(Metrics - Prometheus)部分,并取消勾选“启用健康和性能指标端点”(Enable health and performance metrics endpoint)选项。点击“保存更改”(Save changes)按钮以应用更改。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

GitLab 还会从每个安装中收集使用情况信息。如果您重视隐私并希望阻止此行为,请在同一页面上展开“使用统计”(Usage statistics)选项,并取消勾选“启用服务 Ping”(Enable Service Ping)选项。点击“保存更改”按钮以应用更改。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

配置 Mattermost

打开 URL https://mattermost.example.com,您将被带到如下登录页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“GitLab”按钮进行注册。这会将您的 Mattermost 账户与您的 GitLab 账户关联起来。您将被带到 GitLab 登录页面,在那里输入您的凭据并点击“登录”(Sign in)按钮以继续。您将被带到如下所示的用户授权页面。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“授权”(Authorize)按钮以继续。您将被带回 Mattermost 应用程序,它会询问您所在组织的名称。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

输入您所在组织的名称,然后点击“继续”(Continue)页面。接下来,系统会询问您在工作中使用哪些工具。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击 GitLab 图标,然后点击“继续”(Continue)按钮以继续。您可以随时稍后添加其他工具。接下来,系统会要求您邀请团队成员,并会给您一个邀请链接。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

保存该链接以备后用,然后点击“完成设置”(Finish setup)以完成 Mattermost 安装。您将被带到 Mattermost 仪表盘,从那里您可以开始使用它。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

GitLab 仅被授权用于登录 Mattermost 实例。Mattermost 实例预装了一个 GitLab 插件,可以将您仓库的提交和通知发送到您的 Mattermost 实例。我们也需要对此进行配置。

访问 GitLab >>“编辑个人资料”(Edit Profile)页面,并从左侧边栏选择“应用程序”(Applications)菜单。您应该会看到您现有的 Mattermost 登录应用程序已经注册。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“添加新应用程序”(Add new application)按钮,为 GitLab 插件创建另一个应用程序。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

为项目命名。将 https://mattermost.example.com/plugins/com.github.manland.mattermost-plugin-gitlab/oauth/complete 设置为重定向 URI(Redirect URI)。勾选 Confidential、api 和 read_user 选项。点击页面底部的“保存应用程序”(Save application)按钮以完成。

您将被带到如下页面。复制并保存应用程序 ID(Application ID)和应用程序密钥(Application Secret),您稍后会用到它们。应用程序密钥仅会显示一次,请注意这一点。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“继续”(Continue)按钮以完成。

打开您的 Mattermost 站点,并点击最左上角的按钮以显示如下弹出菜单。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“应用市场”(App Marketplace)按钮以打开如下弹出窗口。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击 GitLab 插件对应的“配置”(Configure)按钮以继续。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

输入之前生成的 GitLab URL、OAuth 客户端 ID(OAuth Client ID)和 OAuth 客户端密钥(OAuth Client Secret),然后点击“保存”(Save)按钮以完成。

现在,每个用户都需要在 Mattermost 中连接他们的 GitLab 账户。访问 Mattermost 上的 GitLab 频道,并输入以下命令开始:/gitlab connect,然后按回车键,您将看到如下消息。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

点击“链接”(Link)按钮,您将被带到一个新页面,要求授权该连接。点击“连接”(Connect),您将被带回 Mattermost 页面,并且您应该会看到如下确认连接的消息。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

第 11 步 - 创建您的第一个项目

我们来尝试创建第一个项目并推送一次提交。

添加您的 SSH 密钥

在继续之前,我们应该添加我们的 SSH 密钥。这样我们就可以在不使用任何密码的情况下与我们的安装进行交互。如果您已有 SSH 密钥,可以跳过以下命令。如果您没有,可以使用以下命令创建一个。

$ ssh-keygen -t ed25519 -C "gitlab.example.com"

此命令在 macOS、Linux 以及 Windows 上的 Git Bash/WSL 中通用。接受默认设置并输入一个强口令(passphrase)。我们是在 Windows Powershell 终端上创建 SSH 密钥的。

Generating public/private rsa key pair.
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519):
Enter same passphrase again:
Your identification has been saved in C:\Users\<username>/.ssh/id_ed25519.
Your public key has been saved in C:\Users\<username>/.ssh/id_ed25519.pub.
SHA256:CI3Ja1LSTN+j4LQnDYkAoP+DvZB8SWrD26zDyUBRbUY gitlab.example.com
+--[ED25519 256]--+
|* ..+E           |
|. + / o o        |
| o = B o .       |
|. o B = S        |
|.o X +           |
| +X.*            |
| .=B o           |
+----[SHA256]-----+

将私钥身份添加到 SSH 认证代理(authentication agent)。如果您在 Windows 上,请确保 OpenSSH 认证代理服务正在运行。如果您在 Linux 或 macOS 上,请运行以下命令。

$ eval $(ssh-agent -s)

添加密钥。

$ ssh-add C:\Users\<username>/.ssh/id_ed25519

在 Linux 和 macOS 上,命令将变为

$ ssh-add ~/.ssh/id_ed25519

系统会提示您输入口令。输入后,密钥将被添加。

接下来,我们需要将这些设置保存到 ~/.ssh/config 文件中。在 Windows 上,这将是 C:\\Users\\\\.ssh 目录。将以下代码粘贴到文件末尾。

Host gitlab.example.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_ed25519

在此文件中,路径名在所有操作系统中都保持不变。保存文件。

接下来,我们需要将公钥复制到我们的 GitLab 账户。您可以通过以下命令显示您的公钥。这里的路径名在所有操作系统中同样适用。

$ cat ~/.ssh/id_ed25519.pub

您将看到类似的输出。

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGCEIN84O/9tcvE5wsTswY76xeJyY7TwkMW6uCvYulm1 gitlab.example.com

在 GitLab 中打开您的个人资料设置,并从左侧边栏选择“SSH 密钥”(SSH Keys)菜单。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

将 SSH 密钥粘贴到提供的框中,然后点击“添加密钥”(Add Key)以继续。系统会给出一个默认过期日期。您可以根据需要更改它。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

接下来,我们需要测试我们的 SSH 连接是否成功。在您的电脑终端上运行以下命令。

$ ssh -T 
[email protected]

您将看到类似的输出。首先,系统会要求您将 SSH 密钥添加到您系统的已知主机(Known hosts)列表。输入 yes 以继续。接下来,您将收到一条成功消息,确认您已连接到您的 GitLab 实例。

The authenticity of host 'gitlab.example.com (178.62.213.105)' can't be established.
ECDSA key fingerprint is SHA256:x1647s5G1iL/cnRFoBuE6qzRZF775fVLZzcLJTGaIvQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.example.com,178.62.213.105' (ECDSA) to the list of known hosts.
Welcome to GitLab, @navjot!

现在,我们可以继续创建我们的第一个仓库并进行一些提交。

创建一个项目

GitLab 中的每个仓库都属于一个项目。一个项目包含仓库、问题跟踪器、合并请求、Wiki、持续集成、持续交付(CI/CD)流水线以及许多其他功能。

要创建您的第一个仓库,请点击主页上的“创建项目”(Create a project)部分。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

您将被带到“新建项目”(New Project)页面,在那里您将获得多种创建新项目的方式。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

选择“创建空白项目”(Create blank project)选项以继续。在下一页,输入项目名称(Project name)。在“选择群组或命名空间”(Pick a group or namespace)框中的“项目 URL”(Project URL)选项的下拉菜单中选择您的用户名。如果您想更改默认的项目 slug,请设置您的项目 slug。根据您的需要更改项目的可见性级别(Visibility Level)。您可以使用 README 文件初始化您的仓库。如果您希望 GitLab 分析您的代码以查找安全漏洞,请勾选“启用 SAST”(Enable SAST)选项。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

完成后,点击“创建项目”(Create project)以完成。您将被带到您的仓库页面,其中只有一个空白的 README.md 文件。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

既然我们的仓库已经上线,让我们尝试从命令行添加一个变更日志(changelog)。在您的电脑上输入以下命令以创建 CHANGELOG 文件并将其推送回您的仓库。请确保您的电脑上已安装 Git。

第一步是克隆仓库。您可以使用 SSH 或 HTTPS 进行克隆。使用 SSH 克隆。系统会要求您输入口令。

$ git clone 
[email protected]
:user/howtoforge-test.git

您应该会看到类似的输出。

Cloning into 'howtoforge-test'...
Enter passphrase for key '/c/Users/navjo/.ssh/id_ed25519':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

输入剩余的命令以创建并推送 CHANGELOG 文件。

$ cd howtoforge-test
$ touch CHANGELOG  # Or create the file in your editor and enter a project description
$ git add CHANGELOG

$ git commit -m "add Changelog"
[main d6c7a9c] add Changelog
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 CHANGELOG

$ git push -u origin main
Enter passphrase for key '/c/Users/navjo/.ssh/id_ed25519':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 958 bytes | 958.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To gitlab.example.com:navjot/howtoforge-test.git
   523db9a..d6c7a9c  main -> main
branch 'main' set up to track 'origin/main'.

在推送命令期间,系统会再次提示您输入口令。

回到您的 GitLab 项目页面,您将在其中看到 CHANGELOG 文件。恭喜!您已成功创建了您的第一个项目并向其中提交了文件。

在 Rocky Linux 9 上安装 GitLab 代码托管平台

这就完成了我们的第一个 GitLab 项目。

第 12 步 - 备份 GitLab

GitLab 提供了一个命令行界面来备份您的整个实例,包括数据库、附件、仓库数据、CI/CD 任务工件、CI/CD 任务输出日志、LFS 对象、Terraform 状态、容器镜像仓库镜像、GitLab Pages 内容、软件包、代码片段、群组 Wiki、合并请求差异以及项目级安全文件。

备份不包含 Mattermost 数据、Redis 数据、Sidekiq 任务以及对象存储(Object storage)。

运行以下命令来执行备份。

$ sudo gitlab-backup create STRATEGY=copy

STRATEGY=copy 选项用于防止在数据快速变化时出现错误。它会将数据复制到临时位置,从而避免可能出现的错误。

您应该会看到类似的输出。

2024-03-07 11:48:37 UTC -- Dumping database ... 
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2024-03-07 11:48:45 UTC -- Dumping database ... done
2024-03-07 11:48:45 UTC -- Dumping repositories ... 
{"command":"create","gl_project_path":"navjot/howtoforge-test","level":"info","msg":"started create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-03-07T11:48:45.720Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test","level":"info","msg":"completed create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2024-03-07T11:48:45.772Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test.wiki","level":"info","msg":"started create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-03-07T11:48:45.874Z"}
{"command":"create","gl_project_path":"navjot/howtoforge-test.wiki","level":"info","msg":"completed create","pid":107325,"relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2024-03-07T11:48:45.894Z"}
2024-03-07 11:48:45 UTC -- Dumping repositories ... done
2024-03-07 11:48:45 UTC -- Dumping uploads ... 
2024-03-07 11:48:46 UTC -- Dumping uploads ... done
2024-03-07 11:48:46 UTC -- Dumping builds ... 
2024-03-07 11:48:46 UTC -- Dumping builds ... done
2024-03-07 11:48:46 UTC -- Dumping artifacts ... 
2024-03-07 11:48:46 UTC -- Dumping artifacts ... done
2024-03-07 11:48:46 UTC -- Dumping pages ... 
2024-03-07 11:48:46 UTC -- Dumping pages ... done
2024-03-07 11:48:46 UTC -- Dumping lfs objects ... 
2024-03-07 11:48:46 UTC -- Dumping lfs objects ... done
2024-03-07 11:48:46 UTC -- Dumping terraform states ... 
2024-03-07 11:48:46 UTC -- Dumping terraform states ... done
2024-03-07 11:48:46 UTC -- Dumping container registry images ... 
2024-03-07 11:48:46 UTC -- Dumping container registry images ... done
2024-03-07 11:48:46 UTC -- Dumping packages ... 
2024-03-07 11:48:46 UTC -- Dumping packages ... done
2024-03-07 11:48:46 UTC -- Dumping ci secure files ... 
2024-03-07 11:48:46 UTC -- Dumping ci secure files ... done
2024-03-07 11:48:46 UTC -- Creating backup archive: 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar ... 
2024-03-07 11:48:46 UTC -- Creating backup archive: 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar ... done
2024-03-07 11:48:46 UTC -- Uploading backup archive to remote storage  ... [SKIPPED]
2024-03-07 11:48:46 UTC -- Deleting old backups ... [SKIPPED]
2024-03-07 11:48:46 UTC -- Deleting tar staging files ... 
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/db
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/registry.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2024-03-07 11:48:46 UTC -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2024-03-07 11:48:46 UTC -- Deleting tar staging files ... done
2024-03-07 11:48:46 UTC -- Deleting backups/tmp ... 
2024-03-07 11:48:46 UTC -- Deleting backups/tmp ... done
2024-03-07 11:48:46 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2024-03-07 11:48:46 UTC -- Backup 1709812117_2024_03_07_16.9.1-ee is done.
2024-03-07 11:48:46 UTC -- Deleting backup and restore PID file ... done

您的备份文件存储在 /var/opt/gitlab/backups 目录中。

$ sudo ls /var/opt/gitlab/backups
1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar

正如输出中所提到的,您的 GitLab 配置和密钥不包含在备份中。请手动将这些文件复制到安全位置以便恢复。

复制它们。

$ sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups

您可以配置 cron 来执行每日备份。

为 root 用户打开 crontab。

$ sudo su -
$ EDITOR = nano crontab -e

在其中添加以下行。

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

按 Ctrl + X 并在提示时输入 Y 以保存文件。

CRON=1 选项用于在没有错误时隐藏所有输出。这有助于减少 cron 的垃圾邮件输出。不过,如果您在调试,请将 CRON=1 替换为 --trace 以进行详细的日志记录。

您可以查阅官方 GitLab 备份文档,了解更多信息以及如何确保您的备份自动复制到与 S3 兼容的服务。

第 13 步 - 恢复 GitLab

在恢复 GitLab 之前,请确保您满足以下要求。

  • GitLab 的版本和版本类型应与创建备份时所用的一致。
  • 您至少已运行过一次命令 sudo gitlab-ctl reconfigure。
  • GitLab 应处于运行状态。
  • GitLab 的密钥和设置必须已恢复。$ sudo cp gitlab.rb gitlab-secrets.json /etc/gitlab

GitLab 的版本和版本类型应与创建备份时所用的一致。

您至少已运行过一次命令 sudo gitlab-ctl reconfigure。

GitLab 应处于运行状态。

GitLab 的密钥和设置必须已恢复。

$ sudo cp gitlab.rb gitlab-secrets.json /etc/gitlab

将备份文件复制到 /var/opt/gitlab/backups 目录。

$ sudo cp 1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar /var/opt/gitlab/backups/

设置正确的权限。

$ sudo chown git:git /var/opt/gitlab/backups/1709812117_2024_03_07_16.9.1-ee_gitlab_backup.tar

停止与数据库连接的进程。您可以像往常一样让 GitLab 的其余部分继续运行。

$ sudo gitlab-ctl stop puma
$ sudo gitlab-ctl stop sidekiq

验证这些进程。

$ sudo gitlab-ctl status
run: alertmanager: (pid 68055) 76797s; run: log: (pid 66127) 78476s
run: crond: (pid 68045) 76798s; run: log: (pid 65624) 78566s
run: gitaly: (pid 66424) 78414s; run: log: (pid 65273) 78710s
run: gitlab-exporter: (pid 66466) 78411s; run: log: (pid 66002) 78497s
run: gitlab-kas: (pid 65535) 78691s; run: log: (pid 65547) 78690s
run: gitlab-pages: (pid 68003) 76801s; run: log: (pid 67700) 76996s
run: gitlab-workhorse: (pid 66392) 78415s; run: log: (pid 65727) 78550s
run: logrotate: (pid 106163) 3124s; run: log: (pid 65169) 78724s
run: mattermost: (pid 68027) 76799s; run: log: (pid 67820) 76890s
run: nginx: (pid 72647) 75588s; run: log: (pid 65781) 78544s
run: node-exporter: (pid 66458) 78411s; run: log: (pid 65968) 78505s
run: postgres-exporter: (pid 66505) 78407s; run: log: (pid 66162) 78470s
run: postgresql: (pid 65341) 78702s; run: log: (pid 65362) 78699s
run: prometheus: (pid 66476) 78410s; run: log: (pid 66070) 78483s
down: puma: 14s, normally up; run: log: (pid 65649) 78562s
run: redis: (pid 65207) 78719s; run: log: (pid 65216) 78718s
run: redis-exporter: (pid 66468) 78410s; run: log: (pid 66034) 78490s
run: registry: (pid 66414) 78414s; run: log: (pid 65864) 78528s
down: sidekiq: 5s, normally up; run: log: (pid 65681) 78554s

恢复备份。请注意您正在执行的操作,因为它会覆盖您的数据库。您无需在命令中给出完整的文件名。只需给出文件名中 _ee_gitlab_backup.tar 之前的部分。

$ 	sudo gitlab-backup restore BACKUP=1709812117_2024_03_07_16.9.1-ee

这应该可以成功恢复您的 GitLab 安装。

第 14 步 - 升级 GitLab

在升级 GitLab 之前创建一个备份。升级 GitLab 就像运行 sudo dnf update 命令一样简单。

$ sudo dnf update

以这种方式进行次要版本(minor)升级是安全的。

DigitalOcean Agent                                                                       40 kB/s | 3.3 kB     00:00
DigitalOcean Droplet Agent                                                               44 kB/s | 3.3 kB     00:00
gitlab_gitlab-ee                                                                        1.4 kB/s | 1.0 kB     00:00
gitlab_gitlab-ee-source                                                                 1.2 kB/s | 951  B     00:00
Dependencies resolved.
========================================================================================================================
 Package                  Architecture          Version                           Repository                       Size
========================================================================================================================
Upgrading:
 gitlab-ee                x86_64                16.9.2-ee.0.el9                   gitlab_gitlab-ee                1.1 G

Transaction Summary
========================================================================================================================
Upgrade  1 Package

Total download size: 1.1 G
Is this ok [y/N]: y

输入 y 并按回车键以开始升级。对于主要版本(major),您应该在执行升级之前留意任何破坏性变更。

在升级执行期间,站点将不可用,或者您会在浏览器中看到“部署进行中”的消息。

完成升级后,请执行以下升级后检查,以确保一切正常工作。

  • 检查常规配置。$ sudo gitlab-rake gitlab:check
  • 确认加密的数据库值可以被解密。$ sudo gitlab-rake gitlab:doctor:secrets
  • 检查用户是否可以登录、项目列表是否可见、项目问题和合并请求是否可访问、用户是否可以克隆仓库,以及他们是否可以在 GitLab UI 中向 GitLab 推送提交。
  • 对于 GitLab CI/CD,检查运行器(runner)是否能够接收任务,以及 Docker 镜像仓库是否正常工作。

检查常规配置。

$ sudo gitlab-rake gitlab:check

确认加密的数据库值可以被解密。

$ sudo gitlab-rake gitlab:doctor:secrets

检查用户是否可以登录、项目列表是否可见、项目问题和合并请求是否可访问、用户是否可以克隆仓库,以及他们是否可以在 GitLab UI 中向 GitLab 推送提交。

对于 GitLab CI/CD,检查运行器(runner)是否能够接收任务,以及 Docker 镜像仓库是否正常工作。

总结

我们的教程到此结束,您已经学习了如何在 Rocky Linux 9 服务器上安装和配置 GitLab。您还创建了您的第一个项目,并从您的电脑向其中提交了文件。如果您有任何疑问,请在下方评论中留言。