Ubuntu 20.04 安装与配置 GitLab:完整指南

简介

GitLab是一款开源应用程序,主要用于托管Git仓库,并具备问题追踪等与开发相关的功能。它旨在利用自身基础设施进行托管,提供了极大的灵活性,可供开发团队部署为内部仓库存储、与用户进行公开交互的平台,或作为贡献者托管自己项目的工具。

本指南将教您如何在自己的硬件上,通过最小化安装机制来创建一个GitLab实例。GitLab项目允许您在Ubuntu 20.04服务器上安装和配置GitLab社区版。

先决条件

要遵循本教程进行操作,您需要准备以下条件:

GitLab发布的硬件要求建议服务器至少配置如下:

  • CPU:4核
  • 内存:4GB

尽管您可以通过使用交换空间来弥补部分内存不足,但这并不推荐。本指南中的示例将使用这些最低资源。

  • 一个指向您服务器的域名。欲了解更多信息,请阅读我们关于如何在Silicon Cloud上开始使用DNS的文档。本教程将使用your_domain作为示例,但请务必将其替换为您实际的域名。

第一步 — 安装依赖项

在安装GitLab之前,安装并持续使用其依赖的软件至关重要。所需软件可以从Ubuntu的默认软件包仓库中获取。

首先,刷新本地软件包索引:

  1. sudo apt update

然后通过输入以下命令安装所需的依赖项:

  1. sudo apt install ca-certificates curl openssh-server postfix tzdata perl

您很有可能已经安装了其中一些软件。在安装Postfix时,请选择“互联网网站”(Internet Site)选项。在下一个屏幕上,输入您服务器的域名以配置系统发送邮件的方式。

现在您已经安装好了相关依赖,可以开始安装GitLab了。

第二步 – 安装GitLab

有了依赖项,您就可以安装GitLab了。这个过程利用一个安装脚本来配置您的系统,使其拥有GitLab的仓库。

首先,进入/tmp目录:

  1. cd /tmp

然后下载安装脚本:

  1. curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh

您可以随意检查下载的脚本,以确保您对其执行的操作感到满意。您还可以在GitLab的安装指南中找到脚本的托管版本:

  1. less /tmp/script.deb.sh

一旦您对脚本的安全性感到满意,请运行安装程序:

  1. sudo bash /tmp/script.deb.sh

该脚本配置您的服务器以使用由GitLab维护的代码库。这使您可以使用与您的其他系统包管理工具相同的工具来管理GitLab。完成此操作后,您可以使用apt安装实际的GitLab应用程序:

  1. sudo apt install gitlab-ce

这会在您的系统上安装所需的组件,并可能需要一些时间来完成。

第三步 – 调整防火墙规则

在配置GitLab之前,您需要确保防火墙规则足够宽松,以允许Web流量通过。如果您按照先决条件中链接的指南进行操作,您已经启用了ufw防火墙。

通过运行以下命令,查看您当前启用的防火墙状态:

  1. sudo ufw status
Output
Status: 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流量,请允许该流量:

  1. sudo ufw allow http
  2. sudo ufw allow https
  3. sudo ufw allow OpenSSH

您可以再次检查ufw的状态,确保您已经允许至少这两个服务的访问:

  1. sudo ufw status
Output
Status: 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

  1. 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:

  1. sudo gitlab-ctl reconfigure

这将使用 GitLab 在您的服务器上找到的信息进行初始化。这是一个完全自动化的过程,因此您不需要回答任何提示。该过程还将为您的域配置一个 Let’s Encrypt 证书。

第五步 — 通过 Web 界面执行初始配置

在 GitLab 运行时,您可以通过 Web 界面对应用程序进行初始配置。

首次登录

在您的网络浏览器中访问您的 GitLab 服务器的域名。

https://your_domain

在您第一次访问时,您将会看到一个登录页面。

GitLab initial login page

GitLab 会为您生成一个初始的安全密码。它存储在一个文件夹中,您可以作为管理员 sudo 用户访问。

  1. 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 中列出的密码]

将这些值输入到字段中,然后点击登录按钮。您将登录到应用程序,并进入一个引导您开始添加项目的页面。

Your GitLab dashboard after logging in as root.

您现在可以对您的 GitLab 实例进行微调。

更新您的密码

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

Click on the user icon and select 'Edit Profile' to enter the Settings page

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

The Password setting is in the left navigation bar. You can update your password from here.

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

After changing your password, you'll be asked to log back in with your updated password.

调整您的个人资料设置

GitLab 选择了一些合理的默认设置,但一旦开始使用软件,这些设置通常不适用。

要进行必要的修改,请点击导航栏右上角的用户图标,然后选择“编辑个人资料”。

您可以将“管理员”和“admin@example.com”的名称和电子邮件地址更改为更准确的内容。您选择的名称将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面执行的 Git 操作等。

Update your Name and Email within the Edit Profile settings

当您完成更新时,请点击底部的“更新个人资料设置”按钮。您将被要求输入密码以确认更改。

确认邮件将发送到您提供的地址。请按照邮件中的指示确认您的账户,以便您可以开始使用 GitLab。

更改您的账户名称

接下来,在左侧导航栏中选择“账户”。

GitLab Account selection in the left navigation bar

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

将您的用户名从'root'更改为您喜欢的名称。

请点击“更新用户名”按钮进行更改。随后会要求您确认更改。

下次登录GitLab时,请记得使用您的新用户名。

在您的账户上添加一个SSH密钥

您可以在Git中使用SSH密钥与您的GitLab项目进行交互。为了实现这一点,您需要将您的SSH公钥添加到您的GitLab账户中。

在左侧导航栏中,选择“SSH密钥”。

SSH密钥页面,您可以在其中输入您的SSH公钥。

如果您已在本地计算机上创建了一个SSH密钥对,您可以通过键入以下命令查看公钥:

  1. 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密钥对:

  1. 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]-----+

一旦您拥有了这个,您可以通过输入这个命令来展示您的公钥,就像前面的例子一样。

  1. 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,并且该机构提供与域名相关联的电子邮箱地址,您可以通过限制域名来控制注册,而不是完全禁用注册。

在“注册限制”部分,选择“注册时发送确认电子邮件”的选项,这将使用户只能在确认邮箱后才能登录。

接下来,将您的域名或域名添加到“注册白名单域”框中,每行一个域名。您可以使用星号“*”来指定通配符域名。

按域名限制注册

当您完成后,请点击“保存更改”按钮。

现在,GitLab首页上的注册部分已被移除。

限制项目创建

默认情况下,新用户可以创建最多10个项目。如果您希望允许外部的新用户能够看到和参与项目,但同时限制他们创建新项目的权限,您可以在“账户和限制”设置部分进行设置。

在内部,您可以将默认项目限制更改为0,从而完全禁止新用户创建项目。

在“账户和限制”设置中,您可以将项目限制设置为零

新用户仍然可以手动添加到项目中,并可以访问其他用户创建的内部或公开项目。

在您进行更新之后,记得点击“保存更改”按钮。

新用户现在可以创建账户,但暂时无法创建项目。

更新 Let’s Encrypt 证书

默认情况下,GitLab 会在每四天的午夜之后,根据您 external_url 设置的精确分钟,自动更新 Let’s Encrypt 证书。您可以在 /etc/gitlab/gitlab.rb 文件中修改这些设置。

例如,如果您希望每隔七天的 12:30 进行证书续订,可以进行如下配置。首先,导航到配置文件:

  1. 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 会定期添加新功能并更新其平台,因此请务必查看项目主页,及时了解任何改进或重要通知。

bannerAds