简介
GitLab 是一个开源应用程序,主要用于托管 Git 仓库,并提供额外的与开发相关的功能,如问题跟踪。它旨在使用您自己的基础设施进行托管,并提供部署灵活性,可作为开发团队的内部存储库存储库、与用户进行公开交互的方式,或者是贡献者托管其自己的项目的手段。
GitLab 项目使您能够在自己的硬件上创建一个 GitLab 实例,具有最小的安装机制。在本指南中,您将学习如何在 Ubuntu 18.04 服务器上安装和配置 GitLab 社区版。
先决条件
要按照本教程进行操作,您需要:
- 一个安装了 Ubuntu 18.04 的服务器,具有非root
sudo
用户和基本防火墙。要设置这些,请按照我们的 Ubuntu 18.04 初始服务器设置指南进行操作。
发布的 GitLab 硬件要求建议使用至少具有以下配置的服务器:
- 4 个 CPU 核心
- 4GB 内存
尽管您可能可以通过将一些交换空间替换为内存来满足要求,但并不建议这样做。本指南中的示例将使用这些最低资源。
- 指向您服务器的域名。有关更多信息,请阅读我们的关于在 DigitalOcean 上开始使用 DNS 的文档。本教程将使用
your_domain
作为示例,但请确保将其替换为您的实际域名。
步骤 1 — 安装依赖项
在安装 GitLab 之前,重要的是要安装安装过程中和持续使用的软件。所需的软件可以从 Ubuntu 的默认软件包存储库中安装。
首先,刷新本地软件包索引:
sudo apt update
然后通过输入以下命令安装依赖项:
sudo apt install ca-certificates curl openssh-server postfix tzdata perl
您可能已经安装了其中一些软件。对于 postfix
的安装,请在提示时选择Internet Site。在下一个屏幕上,输入您服务器的域名以配置系统发送邮件的方式。
现在,您已经安装了依赖项,可以开始安装 GitLab。
步骤 2 — 安装 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
这将在您的系统上安装必要的组件,并可能需要一些时间来完成。
步骤 3 — 调整防火墙规则
在配置 GitLab 之前,您需要确保您的防火墙规则足够宽松,以允许 Web 流量。如果您按照先决条件中的指南进行操作,您将已经启用了 ufw
防火墙。
通过运行以下命令查看当前活动防火墙的状态:
sudo ufw 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 流量,您应该允许该流量:
sudo ufw allow http sudo ufw allow https sudo ufw allow OpenSSH
您可以再次检查 ufw status
,以确保至少允许了这两项服务的访问:
sudo ufw 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 界面现在是可访问的。
步骤 4 —— 编辑 GitLab 配置文件
在使用该应用程序之前,更新配置文件并运行重新配置命令。首先,使用您喜欢的文本编辑器打开 GitLab 的配置文件。本示例使用 nano
:
sudo nano /etc/gitlab/gitlab.rb
搜索 external_url
配置行。将其更新为与您的域匹配,并确保将 http
更改为 https
,以自动将用户重定向到由 Let’s Encrypt 证书保护的站点:
... ## 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 项目可以使用的电子邮件地址列表,以便在您的域出现问题时与您联系。建议取消注释并填写此信息,以便及时了解可能发生的任何问题:
letsencrypt['contact_emails'] = ['sammy@example.com']
完成更改后,保存并关闭文件。如果您使用的是 nano
,可以按 CTRL+X
,然后按 Y
,然后按 ENTER
完成此操作。
运行以下命令重新配置 GitLab:
sudo gitlab-ctl reconfigure
这将使用它可以找到的关于您的服务器的信息初始化 GitLab。这是一个完全自动化的过程,因此您不必回答任何提示。该过程还将为您的域配置 Let’s Encrypt 证书。
步骤 5 —— 通过 Web 界面执行初始配置
在 GitLab 运行时,您可以通过 Web 界面对应用程序进行初始配置。
首次登录
在 Web 浏览器中访问您的 GitLab 服务器的域名:
https://your_domain
首次访问时,您将看到一个登录页面:
!GitLab 初始登录页面
GitLab 为您生成了一个初始安全密码。它存储在一个文件夹中,您可以作为管理员 sudo
用户访问:
sudo nano /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
中列出的密码]
将这些值输入到字段中,然后单击 登录 按钮。您将登录到应用程序,并转到提示您开始添加项目的登录页面:
!作为 root 登录后的 GitLab 仪表板。
现在,您可以微调您的 GitLab 实例。
更新您的密码
登录后,您应该做的第一件事之一是更改您的密码。要进行此更改,请单击导航栏右上角的图标,然后选择 编辑个人资料:
!单击用户图标并选择“编辑个人资料”以进入设置页面
然后,您将进入用户设置页面。在左侧导航栏中,选择 密码 以将您的 GitLab 生成密码更改为安全密码,然后在完成更新后单击 保存密码 按钮:
!密码设置在左侧导航栏中。您可以从这里更新您的密码。
您将被带回登录屏幕,并显示密码已更改的通知。输入您的新密码以重新登录到您的 GitLab 实例:
!更改密码后,您将被要求使用更新后的密码重新登录。
调整个人资料设置
GitLab 默认选择了一些合理的设置,但一般在开始使用该软件后,这些设置通常不再适用。
要进行必要的修改,请点击导航栏右上角的用户图标,然后选择编辑个人资料。
您可以将姓名和电子邮件地址从"管理员"和"admin@example.com"调整为更准确的内容。您选择的姓名将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面进行的 Git 操作等:
!在编辑个人资料设置中更新您的姓名和电子邮件
完成更新后,点击底部的更新个人资料设置按钮。然后,您将被提示输入密码以确认更改。
确认邮件将发送到您提供的地址。请按照邮件中的说明确认您的帐户,以便开始在 GitLab 中使用它。
更改您的帐户名称
接下来,在左侧导航栏中选择帐户:
!左侧导航栏中的 GitLab 帐户选择
在这里,您可以启用双因素认证并更改您的用户名。默认情况下,第一个管理员帐户被赋予名称root。由于这是一个已知的帐户名称,将其更改为其他名称更安全。您仍将拥有管理员权限;唯一变化的是名称。将root替换为您喜欢的用户名:
!将您的用户名从’root’更改为您喜欢的内容。
点击更新用户名按钮进行更改。然后,您将被提示确认更改。
下次登录 GitLab 时,请记住使用您的新用户名。
将 SSH 密钥添加到您的帐户
您可以使用 SSH 密钥与 GitLab 项目进行交互。为此,您需要将您的 SSH 公钥添加到您的 GitLab 帐户中。
在左侧导航栏中选择SSH 密钥:
!您可以在此处输入您的 SSH 公钥的 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,您可以按域限制注册,而不是完全禁用注册。
在注册限制部分,选择注册时发送确认电子邮件框,这将允许用户在确认电子邮件后才能登录。
接下来,将您的域或域添加到注册的域名白名单框中,每行一个域。您可以使用星号“*”来指定通配符域:
!按域限制注册
完成后,点击保存更改按钮。
现在,注册部分已从 GitLab 登录页面中移除。
限制项目创建
默认情况下,新用户可以创建多达 10 个项目。如果您希望允许外部新用户查看和参与,但希望限制他们创建新项目的访问权限,您可以在帐户和限制设置部分进行设置。
在此部分,您可以将默认项目限制更改为 0 以完全禁止新用户创建项目:
!从“帐户和限制”设置中,您可以将项目限制设置为零
新用户仍然可以手动添加到项目中,并访问其他用户创建的内部或公共项目。
更新后,记得点击保存更改按钮。
现在,新用户可以创建账户,但无法创建项目。
更新 Let’s Encrypt 证书
默认情况下,GitLab 设置了定时任务,在每隔四天的午夜后更新 Let’s Encrypt 证书,具体分钟数基于您的 external_url
。您可以在 /etc/gitlab/gitlab.rb
文件中修改这些设置。
例如,如果您希望在每隔 7 天的 12:30 进行更新,您可以进行配置。首先,进入配置文件:
sudo nano /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
来禁用自动更新:
... letsencrypt['auto_renew'] = false ...
有了自动更新,您就不需要担心服务中断。
结论
您现在在自己的服务器上托管了一个可用的 GitLab 实例。您可以开始导入或创建新项目,并为团队配置适当的访问级别。GitLab 定期添加功能并对其平台进行更新,因此请务必查看项目的主页,以了解任何改进或重要通知。