如何在 Ubuntu 16.04 上安装和配置 GitLab
介绍
GitLab CE,或社区版,是一个主要用于托管 Git 存储库的开源应用程序,具有其他与开发相关的功能,如问题跟踪。它旨在使用您自己的基础架构进行托管,并提供灵活性,可以作为您的开发团队的内部存储库进行部署,公开作为与用户交互的一种方式,甚至作为贡献者托管他们自己的项目的一种方式开放。
GitLab 项目使得在您自己的硬件上使用简单的安装机制设置 GitLab 实例变得相对直接。在本指南中,我们将介绍如何在 Ubuntu 16.04 服务器上安装和配置 GitLab。
先决条件
本教程假设您可以访问全新的 Ubuntu 16.04 服务器。已发布的 GitLab 硬件要求建议使用具有以下功能的服务器:
- 2 个核心
- 4GB 内存
虽然您可以通过用一些交换空间替换 RAM 来解决问题,但不推荐这样做。对于本指南,我们假设您至少拥有上述资源。
为了开始,您需要一个在服务器上配置了 sudo
访问权限的非 root 用户。设置基本防火墙以提供额外的安全层也是一个好主意。您可以按照我们的 Ubuntu 16.04 初始服务器设置指南中的步骤进行此设置。
满足上述先决条件后,继续开始安装过程。
安装依赖项
在我们安装 GitLab 本身之前,重要的是安装它在安装过程中和持续使用的一些软件。幸运的是,所有必需的软件都可以从 Ubuntu 的默认软件包存储库轻松安装。
由于这是我们在此会话期间第一次使用 apt
,我们可以刷新本地包索引,然后通过键入以下内容来安装依赖项:
- sudo apt-get update
- sudo apt-get install ca-certificates curl openssh-server postfix
您可能已经安装了其中的一些软件。对于 postfix
安装,出现提示时选择 Internet Site。在下一个屏幕上,输入服务器的域名或 IP 地址以配置系统发送邮件的方式。
安装 GitLab
现在依赖项已经到位,我们可以安装 GitLab 本身。这是一个直接的过程,它利用安装脚本使用 GitLab 存储库配置您的系统。
移动到 /tmp
目录,然后下载安装脚本:
- cd /tmp
- curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
请随意检查下载的脚本,以确保您对它将要执行的操作感到满意。您还可以在此处找到该脚本的托管版本:
- less /tmp/script.deb.sh
一旦您对脚本的安全性感到满意,请运行安装程序:
- sudo bash /tmp/script.deb.sh
该脚本将设置您的服务器以使用 GitLab 维护的存储库。这使您可以使用与其他系统包相同的包管理工具来管理 GitLab。完成后,您可以使用 apt
安装实际的 GitLab 应用程序:
- sudo apt-get 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 服务器相关联的域名,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 status
命令,您应该会看到至少为这两项服务配置了访问权限:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
上面的输出表明,一旦我们配置了应用程序,就可以访问 GitLab Web 界面。
编辑 GitLab 配置文件
在您可以使用该应用程序之前,您需要更新一个配置文件并运行重新配置命令。首先,打开Gitlab的配置文件:
- sudo nano /etc/gitlab/gitlab.rb
靠近顶部的是 external_url
配置行。更新它以匹配您自己的域或 IP 地址。如果您有域,请将 http
更改为 https
以便 GitLab 自动将用户重定向到受我们将请求的 Let's Encrypt 证书保护的站点。
# If your GitLab server does not have a domain name, you will need to use an IP
# address instead of a domain and keep the protocol as `http`.
external_url 'https://yourdomain'
接下来,如果您的 GitLab 服务器有域名,请在文件中搜索 letsencrypt[enable]
设置。取消注释该行并将其设置为 true
。这将告诉 GitLab 为您的 GitLab 域请求一个 Let's Encrypt 证书,并将应用程序配置为使用它来服务流量。
在其下方,查找 letsencrypt[contact_emails]
设置。此设置定义了一个电子邮件地址列表,如果您的域出现问题,Let's Encrypt 项目可以使用这些地址与您联系。取消注释并填写它是个好主意,这样您就会知道任何问题:
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['sammy@yourdomain.com']
保存并关闭文件。现在,运行以下命令重新配置 Gitlab:
- sudo gitlab-ctl reconfigure
这将使用它可以找到的有关您的服务器的信息来初始化 GitLab。这是一个完全自动化的过程,因此您无需回答任何提示。如果您启用了 Let's Encrypt 集成,则应为您的域配置证书。
通过 Web 界面执行初始配置
现在 GitLab 正在运行并且允许访问,我们可以通过 Web 界面对应用程序进行一些初始配置。
首次登录
在 Web 浏览器中访问 GitLab 服务器的域名:
http://gitlab_domain_or_IP
如果您启用了 Let's Encrypt 并在 external_url
中使用了 https
,您应该会被重定向到安全的 HTTPS 连接。
在您第一次访问时,您应该会看到为管理帐户设置密码的初始提示:

在初始密码提示中,提供并确认管理帐户的安全密码。完成后单击更改密码按钮。
您将被重定向到传统的 GitLab 登录页面:

在这里,您可以使用刚刚设置的密码登录。凭据是:
- 用户名:root
- 密码:[你设置的密码]
在现有用户的字段中输入这些值,然后单击登录按钮。您将登录到应用程序并转到提示您开始添加项目的登录页面:

您现在可以进行一些简单的更改,以按照您喜欢的方式设置 GitLab。
调整您的个人资料设置
全新安装后,您应该做的第一件事就是使您的配置文件处于更好的状态。 GitLab 选择了一些合理的默认值,但一旦您开始使用该软件,这些默认值通常就不合适了。
要进行必要的修改,请单击界面右上角的用户图标。在出现的下拉菜单中,选择设置:

您将被带到设置的个人资料部分:

将名称和电子邮件地址从“管理员”和“admin@example.com”调整为更准确的内容。您选择的名称将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面的 Git 操作等。
完成后单击底部的更新配置文件设置按钮:

确认电子邮件将发送到您提供的地址。按照电子邮件中的说明确认您的帐户,以便您可以开始将其与 GitLab 一起使用。
更改您的帐户名称
接下来,单击左侧菜单栏中的帐户项:

在这里,您可以找到您的私有 API 令牌或配置双因素身份验证。但是,我们目前感兴趣的功能是更改用户名部分。
默认情况下,第一个管理帐户的名称为 root。由于这是一个已知的帐户名称,因此将其更改为其他名称更安全。您仍将拥有管理权限;唯一会改变的是名字:

单击“更新用户名”按钮进行更改:

下次登录 GitLab 时,请记住使用您的新用户名。
将 SSH 密钥添加到您的帐户
在大多数情况下,您会希望通过 Git 使用 SSH 密钥来与您的 GitLab 项目进行交互。为此,您需要将 SSH 公钥添加到您的 GitLab 帐户。
如果您已经在本地计算机上创建了 SSH 密钥对,您通常可以通过键入以下内容来查看公钥:
- cat ~/.ssh/id_rsa.pub
您应该会看到一大段文字,如下所示:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
复制此文本并返回到 GitLab 网络界面中的配置文件设置页面。
相反,如果您收到如下所示的消息,则您的计算机上尚未配置 SSH 密钥对:
Outputcat: /home/sammy/.ssh/id_rsa.pub: No such file or directory
如果是这种情况,您可以通过键入以下内容来创建 SSH 密钥对:
- ssh-keygen
接受默认值并可选择提供密码以在本地保护密钥:
OutputGenerating 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
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
复制显示的文本块,然后返回到 GitLab 网络界面中的个人资料设置。
单击左侧菜单中的 SSH 密钥项:

在提供的空间中粘贴您从本地计算机复制的公钥。给它一个描述性的标题,然后单击添加键按钮:

您现在应该能够从本地计算机管理您的 GitLab 项目和存储库,而无需提供您的 GitLab 帐户凭据。
限制或禁用公共注册(可选)
您可能已经注意到,当您访问 GitLab 实例的登录页面时,任何人都可以注册一个帐户。如果您希望托管公共项目,这可能就是您想要的。然而,很多时候,更严格的设置是可取的。
首先,通过单击页面顶部主菜单栏中的扳手图标进入管理区域:

在接下来的页面上,您可以看到整个 GitLab 实例的概览。要调整设置,请单击左侧菜单底部的“设置”项。

您将被带到 GitLab 实例的全局设置。在这里,您可以调整一些设置,这些设置会影响新用户是否可以注册以及他们的访问级别。
禁用注册
如果您希望完全禁用注册(您仍然可以手动为新用户创建帐户),请向下滚动到“注册限制”部分。
取消选中启用注册复选框:

向下滚动到底部,然后单击“保存”按钮:

现在应该从 GitLab 登录页面中删除注册部分。
按域限制注册
如果您将 GitLab 用作提供与域关联的电子邮件地址的组织的一部分,则可以按域限制注册,而不是完全禁用它们。
在“注册限制”部分,首先选中“注册时发送确认电子邮件”框,仅允许用户在确认电子邮件后登录。
接下来,将您的一个或多个域添加到用于注册的白名单域框,每行一个。您可以使用星号“*”来指定通配符域:

向下滚动到底部,然后单击“保存”按钮:

现在应该从 GitLab 登录页面中删除注册部分。
限制项目创建
默认情况下,新用户最多可以创建 10 个项目。如果您希望允许外部新用户查看和参与,但希望限制他们创建新项目的权限,您可以在“帐户和限制设置”部分执行此操作。
在内部,您可以将 Default projects limit 更改为 0 以完全禁止新用户创建项目:

新用户仍然可以手动添加到项目中,并且可以访问其他用户创建的内部或公共项目。
向下滚动到底部,然后单击“保存”按钮:

新用户现在可以创建帐户,但无法创建项目。
创建一个 Cron 作业来自动续订 Let's Encrypt 证书
按照设计,Let's Encrypt 证书的有效期仅为 90 天。如果您之前为您的 GitLab 域启用了 Let's Encrypt,您将需要确保定期更新您的证书以避免服务中断。 GitLab 提供了 gitlab-ctl renew-le-certs
命令来在当前资产即将到期时请求新证书。
为了自动化这个过程,我们可以创建一个 cron 作业来定期自动运行这个命令。该命令只会在证书即将过期时更新证书,因此我们可以安全地定期运行它。
首先,在文本编辑器中创建并打开位于 /etc/cron.daily/gitlab-le
的文件:
- sudo nano /etc/cron.daily/gitlab-le
在里面,粘贴以下脚本:
#!/bin/bash
set -e
/usr/bin/gitlab-ctl renew-le-certs > /dev/null
完成后保存并关闭文件。
通过键入以下内容将文件标记为可执行文件:
- sudo chmod +x /etc/cron.daily/gitlab-le
现在,GitLab 应该每天自动检查其 Let's Encrypt 证书是否需要更新。如果是,该命令将自动更新证书。
结论
您现在应该有一个运行的 GitLab 实例托管在您自己的服务器上。您可以开始导入或创建新项目并为您的团队配置适当的访问级别。 GitLab 会定期添加功能并更新其平台,因此请务必查看该项目的主页,以了解最新的改进或重要通知。