Ubuntu 18.04下GitLab安装与配置指南:从零到部署

引言

GitLab 是一款开源应用程序,主要用于托管 Git 仓库,并提供问题追踪等其他与开发相关的功能。它被设计为可部署在您自己的基础设施上,提供了极大的部署灵活性。您可以将其用作内部仓库存储,供开发团队使用;也可以作为与用户公开互动的方式;或者作为贡献者托管自己项目的平台。

通过最小化的安装机制,您可以在自己的硬件上创建一个 GitLab 实例。本指南将详细介绍如何在 Ubuntu 18.04 服务器上安装和配置 GitLab 社区版。

先决条件

为了顺利完成本教程,您需要准备:

根据 GitLab 官方发布的硬件要求,建议服务器至少具备以下配置:

  • CPU:4 核
  • 内存:4GB RAM

虽然可以通过利用一些交换空间来弥补内存不足,但并不推荐这样做。本指南中的示例将使用最低限度的资源。

第一步 – 安装依赖

在安装 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
输出

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
输出

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
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! 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 项目在您的域名出现问题时可用来与您联系的电子邮件地址列表。建议取消注释并填写此信息,以便及时了解可能发生的任何问题。

/etc/gitlab/gitlab.rb 可以被翻译为“GitLab 的配置文件 gitlab.rb”。

letsencrypt['contact_emails'] = ['james@example.com']

一旦完成更改后,保存并关闭文件。如果您使用的是 nano 编辑器,可以通过按下 CTRL+X,接着按 Y,然后按 ENTER 键来完成这个步骤。

运行以下命令来重新配置 GitLab。

  1. sudo gitlab-ctl reconfigure

这将使用 GitLab 可以找到的关于您的服务器的信息来初始化 GitLab。这是一个完全自动化的过程,所以您不需要回答任何提示。这个过程还将为您的域配置一个 Let’s Encrypt 证书。

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

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

首次登录

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

https://your_domain

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

GitLab 初始登录页面

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

  1. sudo nano /etc/gitlab/initial_root_password
/etc/gitlab/initial_root_password 的本地中文释义为“GitLab 初始的根密码”。

# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the firs$
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: YOUR_PASSWORD

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

回到登录页面后,输入以下内容:

  • 用户名: root
  • 密码: [/etc/gitlab/initial_root_password 中列出的密码]

将这些值输入到字段中,然后点击“登录”按钮。您将登录到应用程序,并被带到一个提示您开始添加项目的着陆页面。

以 root 身份登录后的 GitLab 控制面板

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

更新您的密码

登录后的首要任务之一是更改密码。要进行更改,请点击导航栏右上角的图标,然后选择“编辑个人资料”。

点击用户图标并选择“编辑个人资料”进入设置页面

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

密码设置位于左侧导航栏。您可以从此处更新您的密码。

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

更改密码后,系统会要求您使用更新后的密码重新登录。

调整您的个人资料设置

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

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

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

在“编辑个人资料”设置中更新您的姓名和电子邮件

当您完成更新后,请点击底部的“更新个人资料设置”按钮。系统将提示您输入密码以确认更改。

我们会向您提供的地址发送一封确认电子邮件。请按照邮件中的说明进行确认,以便您可以开始使用 GitLab。

更改您的账户名称

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

GitLab账户左侧导航栏选择

在这里,您可以启用双重认证并更改您的用户名。默认情况下,第一个管理员账户的名称是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 james@mydesktop

复制这段文字并将其输入到您的GitLab实例的密钥文本框中。

如果您收到的消息不同,则说明您的机器上尚未配置SSH密钥对:

输出cat: /home/james/.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/james/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/james/.ssh/id_rsa. Your public key has been saved in /home/james/.ssh/id_rsa.pub. The key fingerprint is: SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 james@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 james@mydesktop

将这个文本块插入到输出中,并输入到您的GitLab实例的密钥文本框内。给它一个描述性的标题,然后点击“添加密钥”按钮。

现在您可以在本地设备上管理您的GitLab项目和代码库,无需提供GitLab账户凭据。

第六步 – 限制或禁用公共注册

通过您目前的设置,在访问您的GitLab实例的主页时,任何人都可以注册一个账号。如果您希望托管一个公开项目,那可能是您想要的。然而,许多时候更严格的设置是可取的。

首先,通过点击导航栏顶部的汉堡菜单,进入管理区域,并从下拉菜单中选择“管理”。

点击顶部导航栏的汉堡菜单并选择“管理”以继续

从左侧导航栏选择“设置”。

从管理导航栏中选择“设置”

您将被带到您的GitLab实例的全局设置页面。在这里,您可以调整一些影响新用户是否可以注册以及他们的访问级别的设置。

禁用注册

如果您希望完全停用注册,请滚动到“注册限制”部分并点击展开以查看选项。

然后取消选中“注册启用”复选框。

GitLab取消选择启用注册

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

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

限制以域名注册

如果您所使用的GitLab是作为一个与域名相关联的电子邮件地址的组织的一部分,那么您可以通过域名限制注册,而不是完全禁用注册。

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

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

按域名限制注册

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

GitLab首页现已取消了注册部分。

限制项目创建

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

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

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

新用户仍然可以通过手动方式被添加到项目中,并且能够访问其他用户创建的内部或公开项目。

在您更新完后,请记得点击“保存更改”按钮。

新用户现在可以创建账户,但不能创建项目。

更新 Let’s Encrypt 证书

默认情况下,GitLab 已设置了一个定时任务,每隔四天在午夜后更新 Let’s Encrypt 证书,具体的分钟取决于您的 external_url。您可以在 /etc/gitlab/gitlab.rb 文件中修改这些设置。

例如,如果您希望每7天的第12:30进行续订,您可以将其配置为实现此目标。首先,导航到配置文件。

  1. sudo nano /etc/gitlab/gitlab.rb

然后,在文件中找到下面的行并去除 # 符号,将其更新为以下内容:

/etc/gitlab/gitlab.rb 文件位于 /etc/gitlab 目录下。
...
################################################################################
# Let's Encrypt integration
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['james@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