本教程适用于以下操作系统版本
- 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 时,应该会看到如下页面。

如果您安装了 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,您将看到如下登录界面。

输入 root 作为用户名,以及您在上一步中获得的密码,以登录到您的 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)页面。

要移除该页面,请运行以下命令。
$ 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 实例上的公开注册。这样做会将您重定向到如下设置页面。

取消勾选“启用注册”(Sign-up enabled)选项以限制注册。点击“保存更改”(Save changes)按钮以应用设置。
如果您在仪表盘中没有看到弹出窗口,可以通过点击左下角菜单中的“管理员区域”(Admin Area)按钮来访问设置页面。

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

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

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

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

输入您的密码信息,然后点击“保存密码”(Save password)以完成修改。您将被登出实例,需要重新登录。
修改用户名并启用双因素认证
您可以将默认的 GitLab 用户名从 root 修改为您选择的任意名称。为此,请点击左侧边栏的“账户”(Account)菜单。

进入页面后,输入您的新用户名,并点击“更新用户名”(Update username)按钮以完成修改。系统会再次提示您确认。再次点击“更新用户名”按钮以确认更改。
您还应该在此处启用双因素认证(two-factor authentication),以提升账户安全性。
禁用 Prometheus 指标并提升隐私
在上一步中,我们讨论了增大 droplet 的共享内存大小,并将其保持在至少 256 MB。这主要是为了在磁盘上存储与 Prometheus 指标相关的数据。如果您不使用该功能,应该禁用它。您只能在安装后禁用它。要禁用它,请从菜单栏打开“管理员面板”(Admin Panel)。
进入管理员面板后,打开“设置”(Settings)>>“指标和性能分析”(Metrics and profiling)菜单选项。

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

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

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

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

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

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

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

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

GitLab 仅被授权用于登录 Mattermost 实例。Mattermost 实例预装了一个 GitLab 插件,可以将您仓库的提交和通知发送到您的 Mattermost 实例。我们也需要对此进行配置。
访问 GitLab >>“编辑个人资料”(Edit Profile)页面,并从左侧边栏选择“应用程序”(Applications)菜单。您应该会看到您现有的 Mattermost 登录应用程序已经注册。

点击“添加新应用程序”(Add new application)按钮,为 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),您稍后会用到它们。应用程序密钥仅会显示一次,请注意这一点。

点击“继续”(Continue)按钮以完成。
打开您的 Mattermost 站点,并点击最左上角的按钮以显示如下弹出菜单。

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

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

输入之前生成的 GitLab URL、OAuth 客户端 ID(OAuth Client ID)和 OAuth 客户端密钥(OAuth Client Secret),然后点击“保存”(Save)按钮以完成。
现在,每个用户都需要在 Mattermost 中连接他们的 GitLab 账户。访问 Mattermost 上的 GitLab 频道,并输入以下命令开始:/gitlab connect,然后按回车键,您将看到如下消息。

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

第 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\\
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)菜单。

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

接下来,我们需要测试我们的 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)部分。

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

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

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

既然我们的仓库已经上线,让我们尝试从命令行添加一个变更日志(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 文件。恭喜!您已成功创建了您的第一个项目并向其中提交了文件。

这就完成了我们的第一个 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。您还创建了您的第一个项目,并从您的电脑向其中提交了文件。如果您有任何疑问,请在下方评论中留言。