介绍
GitLab CE 或 Community Edition 是一个开源应用程序,主要用于托管 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 证书保护的站点。
/etc/gitlab/gitlab.rb
# 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 项目可以使用这些地址与您联系。 最好取消注释并填写此内容,以便您了解任何问题:
/etc/gitlab/gitlab.rb
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 选择了一些合理的默认值,但是一旦您开始使用该软件,这些通常就不合适了。
要进行必要的修改,请单击界面右上角的用户图标。 在出现的下拉菜单中,选择Settings:
您将被带到设置的 Profile 部分:
将“Administrator”和“admin@example.com”中的 Name 和 Email 地址调整为更准确的地址。 您选择的名称将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面的 Git 操作等。
完成后单击底部的更新配置文件设置按钮:
确认电子邮件将发送到您提供的地址。 按照电子邮件中的说明确认您的帐户,以便您可以开始在 GitLab 中使用它。
更改您的帐户名称
接下来,点击左侧菜单栏中的 Account 项:
在这里,您可以找到您的私有 API 令牌或配置双因素身份验证。 但是,我们目前感兴趣的功能是 Change username 部分。
默认情况下,第一个管理帐户的名称为 root。 由于这是一个已知的帐户名称,因此将其更改为不同的名称会更安全。 您仍将拥有管理权限; 唯一会改变的是名称:
单击更新用户名按钮进行更改:
下次登录 GitLab 时,请记住使用您的新用户名。
向您的帐户添加 SSH 密钥
在大多数情况下,您会希望将 SSH 密钥与 Git 一起使用来与您的 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 Web 界面中的配置文件设置页面。
相反,如果您收到如下所示的消息,则您的计算机上尚未配置 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 Web 界面中的配置文件设置。
点击左侧菜单中的 SSH Keys 项:
在提供的空间中粘贴您从本地计算机复制的公钥。 给它一个描述性的标题,然后单击 Add key 按钮:
您现在应该能够从本地计算机管理您的 GitLab 项目和存储库,而无需提供您的 GitLab 帐户凭据。
限制或禁用公开注册(可选)
您可能已经注意到,当您访问 GitLab 实例的登录页面时,任何人都可以注册一个帐户。 如果您希望托管公共项目,这可能是您想要的。 然而,很多时候,更严格的设置是可取的。
首先,通过单击页面顶部主菜单栏中的 扳手图标 进入管理区域:
在随后的页面上,您可以看到整个 GitLab 实例的概览。 要调整设置,请单击左侧菜单底部的 Settings 项。
您将被带到 GitLab 实例的全局设置。 在这里,您可以调整一些设置,这些设置会影响新用户是否可以注册以及他们的访问级别。
禁用注册
如果您希望完全禁用注册(您仍然可以为新用户手动创建帐户),请向下滚动到 注册限制 部分。
取消选中 Sign-up enabled 复选框:
向下滚动到底部并点击保存按钮:
现在应该从 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
在里面,粘贴以下脚本:
/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 会定期添加功能并对其平台进行更新,因此请务必查看项目的主页以了解任何改进或重要通知的最新信息。