如何在Ubuntu 18.04上安装和配置GitLab
引言
GitLab 是一款开源应用程序,主要用于托管 Git 仓库,还具备问题追踪等其他与开发相关的功能。它被设计为使用自己的基础设施进行托管,在部署方面提供了灵活性,可以作为内部仓库存储来为开发团队使用,也可以作为与用户进行公开互动的方式,或者作为贡献者托管自己项目的手段。
该GitLab项目可以在您自己的硬件上通过最小化的安装机制创建一个GitLab实例。在本指南中,您将学习如何在Ubuntu 18.04服务器上安装和配置GitLab社区版。
先决条件
为了跟上这个教程,你需要准备:
- An Ubuntu 18.04 server with a non-root sudo user and basic firewall. To set this up, follow our Ubuntu 18.04 initial server setup guide.
根据GitLab发布的硬件要求建议使用至少具备以下配置的服务器:
- 4 cores for your CPU
- 4GB of RAM for memory
虽然你可以通过利用一些交换空间替代RAM来应付,但并不推荐这样做。本指南中的示例将使用最低限度的资源。
- A domain name pointed at your server. For more information, read our documentation on how to get started with DNS on Silicon Cloud. This tutorial will use your_domain as an example, but be sure to replace this with your actual domain name.
第一步 – 安装依赖
在安装GitLab之前,重要的是在安装过程中和持续使用中安装它所依赖的软件。所需的软件可以从Ubuntu的默认软件包仓库中安装。
首先,刷新本地软件包索引。
- sudo apt update
然后通过输入此命令安装依赖项。
- sudo apt install ca-certificates curl openssh-server postfix tzdata perl
你可能已经安装了其中一些软件。在安装 postfix 时,在提示时选择 Internet Site。在下一个屏幕上,输入你的服务器域名来配置系统如何发送邮件。
既然你已经安装了依赖,你可以开始安装GitLab了。
第二步 – 安装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
一旦您对脚本的安全性感到满意,请运行安装程序。 (Yīdàn nín duì jiǎoběn de ānquán xìng gǎndào mǎnyì, qǐng yùnxíng ānzhuāng chéngxù.)
- sudo bash /tmp/script.deb.sh
脚本配置服务器以使用由GitLab维护的代码库。这使您可以使用与其他系统软件包相同的软件包管理工具来管理GitLab。完成这一步骤后,您可以使用apt安装实际的GitLab应用程序。
- sudo apt 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从Let’s Encrypt请求和启用免费的TLS/SSL证书的能力,还需要允许HTTPS访问。
HTTP和HTTPS的端口映射协议可以在/etc/services文件中找到,因此您可以通过名称允许该流量进入。如果您尚未启用OpenSSH流量,请允许该流量。
- sudo ufw allow http
- sudo ufw allow https
- sudo ufw allow OpenSSH
您可以再次检查ufw的状态,以确保您已经授予访问至少这两种服务的权限。
- sudo ufw status
OutputStatus: 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的示例:
- 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'] = ['james@example.com']
一旦完成更改后,保存并关闭文件。如果您使用的是nano编辑器,可以通过按下CTRL+X,接着按Y,然后按ENTER键来完成这个步骤。
运行以下命令来重新配置GitLab。
- sudo gitlab-ctl reconfigure
这将使用GitLab可以找到的关于您的服务器的信息来初始化GitLab。这是一个完全自动化的过程,所以您不需要回答任何提示。这个过程还将为您的域配置一个Let’s Encrypt证书。
第五步-通过Web界面执行初始配置
在运行GitLab后,您可以通过Web界面对应用程序进行初始配置。
首次登录
在您的网络浏览器中访问您的GitLab服务器的域名。
https://your_domain
在您第一次访问时,您将会看到一个登录页面。
GitLab会为您生成一个初始的安全密码。它存储在一个文件夹中,您可以以管理员sudo用户的身份访问该文件夹。
- sudo nano /etc/gitlab/initial_root_password
# 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.
回到登录页面后,输入以下内容:
- Username: root
- Password: [the password listed on /etc/gitlab/initial_root_password]
将这些值输入到字段中,然后点击“登录”按钮。您将登录到应用程序,并被带到一个提示您开始添加项目的着陆页面。
你现在可以对你的GitLab实例进行微调。
更新您的密码
登录后的首要任务之一是更改密码。要进行更改,请点击导航栏右上角的图标,然后选择编辑个人资料。
接下来,你将进入用户设置页面。在左侧导航栏中选择“密码”,将你的GitLab生成密码更改为安全密码,然后在更新完成后点击“保存密码”按钮。
你将被带回登录界面,并收到一个通知,表示你的密码已更改。输入你的新密码以重新登录你的GitLab实例。
调整您的个人资料设置
GitLab选择了一些合理的默认选项,但一旦您开始使用该软件,这些通常并不合适。
为进行必要的修改,请点击导航栏右上角的用户图标,然后选择编辑个人资料。
您可以将“管理员”和“admin@example.com”的名称和电子邮件地址更改为更准确的内容。您选择的名称将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面进行的Git操作等等。
当您完成更新后,请点击底部的“更新个人资料设置”按钮。系统将提示您输入密码以确认更改。
我们会向您提供的地址发送一封确认电子邮件。请按照邮件中的说明进行确认,以便您可以开始使用GitLab。
更改您的账户名称
接下来,在左侧的导航栏中选择“账户”。
在这里,您可以启用双重认证并更改您的用户名。默认情况下,第一个管理员帐户的名字是root。由于这是一个已知的帐户名,更改为不同的名称会更安全。您仍将具有管理员特权;唯一改变的是名字。将root替换为您首选的用户名。
点击”更新用户名”按钮进行更改。之后您将被要求确认更改。
下次你登录GitLab时,请记得使用你的新用户名。
将SSH密钥添加到您的账户
您可以使用Git启用SSH密钥与GitLab项目进行交互。为此,您需要将您的SSH公钥添加到您的GitLab账户中。
在左侧导航栏中,选择SSH密钥。
如果您的本地计算机上已经创建了SSH密钥对,您可以通过键入以下命令来查看公钥:
- cat ~/.ssh/id_rsa.pub
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 james@mydesktop
复制这段文字并将其输入到您的GitLab实例的密钥文本框中。
如果你收到的消息不同,那么说明你的机器上尚未配置SSH密钥对。
Outputcat: /home/james/.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/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]-----+
一旦您拥有了这个,您可以通过输入以下命令将您的公钥显示出来,就像前面的例子一样。
- cat ~/.ssh/id_rsa.pub
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 james@mydesktop
将这个文本块插入到输出中,并输入到您的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 integration
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['james@digitalocean'] # This should be an array of email addresses to add as contacts
# letsencrypt['group'] = 'root'
# letsencrypt['key_size'] = 2048
# letsencrypt['owner'] = 'root'
# letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
# See http://docs.gitlab.com/omnibus/settings/ssl.html#automatic-renewal for more on these settings
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定期添加功能并更新他们的平台,所以务必查看项目主页以及时了解任何改进或重要通知。