Ubuntu 20.04 安装与配置 GitLab:完整指南
简介
GitLab是一款开源应用程序,主要用于托管Git仓库,并具备问题追踪等与开发相关的功能。它旨在利用自身基础设施进行托管,提供了极大的灵活性,可供开发团队部署为内部仓库存储、与用户进行公开交互的平台,或作为贡献者托管自己项目的工具。
本指南将教您如何在自己的硬件上,通过最小化安装机制来创建一个GitLab实例。GitLab项目允许您在Ubuntu 20.04服务器上安装和配置GitLab社区版。
先决条件
要遵循本教程进行操作,您需要准备以下条件:
- 一台配置了非root sudo用户和基本防火墙的Ubuntu 20.04服务器。如需设置,请参考我们的Ubuntu 20.04初始服务器设置指南。
GitLab发布的硬件要求建议服务器至少配置如下:
- CPU:4核
- 内存:4GB
尽管您可以通过使用交换空间来弥补部分内存不足,但这并不推荐。本指南中的示例将使用这些最低资源。
- 一个指向您服务器的域名。欲了解更多信息,请阅读我们关于如何在Silicon Cloud上开始使用DNS的文档。本教程将使用
your_domain
作为示例,但请务必将其替换为您实际的域名。
第一步 — 安装依赖项
在安装GitLab之前,安装并持续使用其依赖的软件至关重要。所需软件可以从Ubuntu的默认软件包仓库中获取。
首先,刷新本地软件包索引:
- sudo apt update
然后通过输入以下命令安装所需的依赖项:
- sudo apt install ca-certificates curl openssh-server postfix tzdata perl
您很有可能已经安装了其中一些软件。在安装Postfix时,请选择“互联网网站”(Internet Site)选项。在下一个屏幕上,输入您服务器的域名以配置系统发送邮件的方式。
现在您已经安装好了相关依赖,可以开始安装GitLab了。
第二步 – 安装GitLab
有了依赖项,您就可以安装GitLab了。这个过程利用一个安装脚本来配置您的系统,使其拥有GitLab的仓库。
首先,进入/tmp
目录:
- cd /tmp
然后下载安装脚本:
- curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
您可以随意检查下载的脚本,以确保您对其执行的操作感到满意。您还可以在GitLab的安装指南中找到脚本的托管版本:
- less /tmp/script.deb.sh
一旦您对脚本的安全性感到满意,请运行安装程序:
- sudo bash /tmp/script.deb.sh
该脚本配置您的服务器以使用由GitLab维护的代码库。这使您可以使用与您的其他系统包管理工具相同的工具来管理GitLab。完成此操作后,您可以使用apt
安装实际的GitLab应用程序:
- sudo apt install gitlab-ce
这会在您的系统上安装所需的组件,并可能需要一些时间来完成。
第三步 – 调整防火墙规则
在配置GitLab之前,您需要确保防火墙规则足够宽松,以允许Web流量通过。如果您按照先决条件中链接的指南进行操作,您已经启用了ufw
防火墙。
通过运行以下命令,查看您当前启用的防火墙状态:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
当前的规则允许SSH流量通过,但对其他服务的访问受限。由于GitLab是一个Web应用程序,您需要允许HTTP访问。因为您将利用GitLab请求和启用来自Let’s Encrypt的免费TLS/SSL证书的能力,所以还需要允许HTTPS访问。
HTTP和HTTPS的端口映射协议可以在/etc/services
文件中找到,因此您可以通过名称允许该流量进入。如果您还没有启用OpenSSH流量,请允许该流量:
- sudo ufw allow http
- sudo ufw allow https
- sudo ufw allow OpenSSH
您可以再次检查ufw
的状态,确保您已经允许至少这两个服务的访问:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
这个输出表示一旦您配置了应用程序,GitLab的Web界面现在是可以访问的。
第四步 – 编辑GitLab配置文件
在使用应用程序之前,需要更新配置文件并运行重新配置命令。首先,用您首选的文本编辑器打开GitLab的配置文件。本示例使用的是nano
:
- sudo nano /etc/gitlab/gitlab.rb
搜索external_url
配置行。将其更新为与您的域名匹配,并确保将http
更改为https
,以自动重定向用户到由Let’s Encrypt证书保护的站点。
/etc/gitlab/gitlab.rb
是 GitLab 的主要配置文件。
...
## GitLab URL
##! GitLab 将可访问的 URL 地址。
##! 有关配置 external_url 的更多详细信息,请参阅:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! 注意:在安装/升级期间,将使用环境变量 EXTERNAL_URL 的值来填充/替换此值。
##! 在 AWS EC2 实例上,我们还会尝试从 AWS 获取公共主机名/IP 地址。更多详细信息,请参阅:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'https://your_domain'
...
接下来,找到 letsencrypt['contact_emails']
设置。如果您正在使用 nano 编辑器,可以通过按下 CTRL+W
键来启用搜索提示。在提示符中输入 letsencrypt['contact_emails']
,然后按下 ENTER
键。该设置定义了一组电子邮件地址,让 Let’s Encrypt 项目在您的域名出现问题时可以与您联系。建议将其取消注释并填写,以便及时了解可能发生的任何问题。
letsencrypt['contact_emails'] = ['sammy@example.com']
完成更改后,请保存并关闭文件。如果您正在使用 nano,可以按下 CTRL+X
,然后按 Y
,最后按 ENTER
键来完成这一操作。
运行以下命令以重新配置 GitLab:
- sudo gitlab-ctl reconfigure
这将使用 GitLab 在您的服务器上找到的信息进行初始化。这是一个完全自动化的过程,因此您不需要回答任何提示。该过程还将为您的域配置一个 Let’s Encrypt 证书。
第五步 — 通过 Web 界面执行初始配置
在 GitLab 运行时,您可以通过 Web 界面对应用程序进行初始配置。
首次登录
在您的网络浏览器中访问您的 GitLab 服务器的域名。
https://your_domain
在您第一次访问时,您将会看到一个登录页面。

GitLab 会为您生成一个初始的安全密码。它存储在一个文件夹中,您可以作为管理员 sudo 用户访问。
- sudo nano /etc/gitlab/initial_root_password
/etc/gitlab/initial_root_password
的文件内容示例:
# 警告:此值仅在以下情况下有效
# 1. 如果手动提供(通过 `GITLAB_ROOT_PASSWORD` 环境变量或 `gitlab_rails['initial_root_password']` 设置在 `gitlab.rb` 中,且在数据库首次填充之前提供)
# 2. 密码未手动更改,无论是通过 UI 还是命令行。
#
# 如果此处显示的密码无效,您必须按照 https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password 重置管理员密码。
Password: YOUR_PASSWORD
# 注意:此文件将在 24 小时后的首次重新配置运行时自动删除。
在登录页面上,输入以下内容:
- 用户名: root
- 密码: [
/etc/gitlab/initial_root_password
中列出的密码]
将这些值输入到字段中,然后点击登录按钮。您将登录到应用程序,并进入一个引导您开始添加项目的页面。

您现在可以对您的 GitLab 实例进行微调。
更新您的密码
登录后,您应该做的第一件事之一是更改您的密码。要进行这个更改,点击导航栏右上角的图标,然后选择“编辑个人资料”。

然后,您将进入用户设置页面。在左侧导航栏中,选择“密码”以更改您的 GitLab 生成的密码为一个安全的密码,然后在完成更新后点击“保存密码”按钮。

您将被带回登录界面,并收到一个通知,说明您的密码已被更改。输入您的新密码以重新登录您的 GitLab 实例。

调整您的个人资料设置
GitLab 选择了一些合理的默认设置,但一旦开始使用软件,这些设置通常不适用。
要进行必要的修改,请点击导航栏右上角的用户图标,然后选择“编辑个人资料”。
您可以将“管理员”和“admin@example.com”的名称和电子邮件地址更改为更准确的内容。您选择的名称将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面执行的 Git 操作等。

当您完成更新时,请点击底部的“更新个人资料设置”按钮。您将被要求输入密码以确认更改。
确认邮件将发送到您提供的地址。请按照邮件中的指示确认您的账户,以便您可以开始使用 GitLab。
更改您的账户名称
接下来,在左侧导航栏中选择“账户”。

在这里,您可以启用两步验证并更改您的用户名。默认情况下,第一个管理员账户的名称为 root。由于这是一个已知的账户名称,将其更改为不同的名称会更安全。您仍将具有管理员特权,唯一变化的是名称。用您偏好的用户名替换 root。

请点击“更新用户名”按钮进行更改。随后会要求您确认更改。
下次登录GitLab时,请记得使用您的新用户名。
在您的账户上添加一个SSH密钥
您可以在Git中使用SSH密钥与您的GitLab项目进行交互。为了实现这一点,您需要将您的SSH公钥添加到您的GitLab账户中。
在左侧导航栏中,选择“SSH密钥”。

如果您已在本地计算机上创建了一个SSH密钥对,您可以通过键入以下命令查看公钥:
- cat ~/.ssh/id_rsa.pub
输出ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
将此文本复制并输入到您的GitLab实例的密钥文本框中。
如果您收到的是另外一条讯息,那么说明您的机器上尚未配置SSH密钥对:
输出cat: /home/sammy/.ssh/id_rsa.pub: No such file or directory
如果是这种情况,您可以通过输入以下命令来创建一个SSH密钥对:
- ssh-keygen
接受默认设置,并可选择提供一个本地密钥保护密码:
输出Generating public/private rsa key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 sammy@gitlab.docsthat.work
The key's randomart image is:
+---[RSA 2048]----+
| ..%o==B|
| *.E =.|
| . ++= B |
| ooo.o . |
| . S .o . .|
| . + .. . o|
| + .o.o ..|
| o .++o . |
| oo=+ |
+----[SHA256]-----+
一旦您拥有了这个,您可以通过输入这个命令来展示您的公钥,就像前面的例子一样。
- cat ~/.ssh/id_rsa.pub
输出ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
将这个文本块插入输出,并将其输入到您的 GitLab 实例中的“密钥文本框”内。为其提供一个描述性标题,然后点击“添加密钥”按钮。
现在您可以从本地计算机管理GitLab项目和代码库,而无需提供GitLab账户凭据。
步骤六 — 限制或禁止公开注册
使用您目前的设置,任何人都可以在访问您的GitLab实例主页时注册账号。如果您正在寻求托管公开项目,这可能是您想要的。然而,很多时候,更严格的设置是可取的。
首先,通过点击顶部导航栏中的汉堡菜单,在下拉菜单中选择“管理区域”,进入管理界面。
从左侧导航栏中选择“设置”。
您将被带到您的GitLab实例的全局设置页面。在这里,您可以调整一些设置,这些设置会影响新用户是否可以注册以及他们的访问级别。
停用注册
如果您希望完全禁用注册,可以滚动到“注册限制”部分,然后点击展开以查看选项。
取消选中“启用注册”复选框。
在您进行更改后,请记得单击“保存更改”按钮。
现在,GitLab的注册部分已从首页删除。
限制按域名注册
如果您在一个机构中使用GitLab,并且该机构提供与域名相关联的电子邮箱地址,您可以通过限制域名来控制注册,而不是完全禁用注册。
在“注册限制”部分,选择“注册时发送确认电子邮件”的选项,这将使用户只能在确认邮箱后才能登录。
接下来,将您的域名或域名添加到“注册白名单域”框中,每行一个域名。您可以使用星号“*”来指定通配符域名。
当您完成后,请点击“保存更改”按钮。
现在,GitLab首页上的注册部分已被移除。
限制项目创建
默认情况下,新用户可以创建最多10个项目。如果您希望允许外部的新用户能够看到和参与项目,但同时限制他们创建新项目的权限,您可以在“账户和限制”设置部分进行设置。
在内部,您可以将默认项目限制更改为0,从而完全禁止新用户创建项目。
新用户仍然可以手动添加到项目中,并可以访问其他用户创建的内部或公开项目。
在您进行更新之后,记得点击“保存更改”按钮。
新用户现在可以创建账户,但暂时无法创建项目。
更新 Let’s Encrypt 证书
默认情况下,GitLab 会在每四天的午夜之后,根据您 external_url
设置的精确分钟,自动更新 Let’s Encrypt 证书。您可以在 /etc/gitlab/gitlab.rb
文件中修改这些设置。
例如,如果您希望每隔七天的 12:30 进行证书续订,可以进行如下配置。首先,导航到配置文件:
- sudo nano /etc/gitlab/gitlab.rb
然后,在文件中找到以下行,删除行首的“#”号,并更新为以下内容:
/etc/gitlab/gitlab.rb 文件内容
...
################################################################################
# Let's Encrypt 集成
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['sammy@digitalocean'] # 这应该是一个包含联系人电子邮件地址的数组
# letsencrypt['group'] = 'root'
# letsencrypt['key_size'] = 2048
# letsencrypt['owner'] = 'root'
# letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
# 有关这些设置的更多信息,请参阅 http://docs.gitlab.com/omnibus/settings/ssl.html#automatic-renewal
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"
...
您也可以将 letsencrypt['auto_renew']
设置为 false
来禁用自动续订。
/etc/gitlab/gitlab.rb 文件内容
...
letsencrypt['auto_renew'] = false
...
通过自动续订,您无需担心服务中断。
结论
现在您已经在自己的服务器上拥有了一个可正常运行的 GitLab 实例。您可以开始导入或创建新项目,并为团队配置适当的访问级别。GitLab 会定期添加新功能并更新其平台,因此请务必查看项目主页,及时了解任何改进或重要通知。