介绍
GitLab 是一个开源应用程序,主要用于托管 Git 仓库,并提供额外的开发相关功能,如问题跟踪。它被设计为使用自己的基础设施进行托管,提供灵活性,可以作为开发团队的内部仓库存储、与用户交互的公共方式,或者作为贡献者托管他们自己项目的途径。
GitLab 项目允许在自己的硬件上创建一个 GitLab 实例,具有最小的安装机制。本指南将教如何在 Ubuntu 服务器上安装和配置 GitLab 社区版。
先决条件
在开始之前,需要准备一台安装了 Ubuntu 操作系统的服务器
发布的 GitLab 硬件要求建议使用至少有以下配置的服务器:
4 核心的 CPU,4GB 的内存
选择服务器提供商
为了本教程的演示,我将以一个具体的云服务提供商为例,展示如何进行操作。选择哪个提供商根据您的个人偏好和需求来决定。
以下步骤仅供参考,请根据实际需求选择配置。
购买云服务器
本示例中,我们选择了香港作为服务器区域。
点击 云产品 → 云服务器 → 立即购买
选择操作系统
在创建服务器实例时,选择 Ubuntu 24.04 作为操作系统。
连接到服务器
使用 X-shell 或您偏好的 SSH 客户端,通过远程用户名和密码连接到您的服务器。成功连接后,您将看到特定的欢迎信息,表明您已成功登录。
- 使用 SSH 以非 root 用户身份访问实例,并具有 sudo 权限。
第 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
Output
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
Output
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 证书保护的站点:
/etc/gitlab/gitlab.rb
...
## 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
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
在第一次访问中,将看到一个登录页面:
在第一次访问中,以‘root’身份登录。
GitLab 为生成了一个初始的安全密码。可以作为管理员 sudo
用户访问包含该密码的文件夹:
sudo nano /etc/gitlab/initial_root_password
/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 first time.
# 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
上列出的密码]
输入这些值,然后点击 Sign in 按钮。将登录到应用程序,并被带到一个提示开始添加项目的登陆页面:
以‘root’身份登录后的仪表板。
现在可以调整 GitLab 实例。
更新密码
登录后,应该做的第一件事是更改密码。要进行此更改,请单击导航栏右上角的图标,然后选择 Edit Profile:
点击用户图标后选择‘Edit Profile’。
然后将进入用户设置页面。在左侧导航栏中,选择 Password 以更改 GitLab 生成的密码,完成后点击 Save password 按钮:
将被带回登录屏幕,通知密码已更改。输入新密码以重新登录 GitLab 实例:
输入新密码以重新登录 GitLab 实例。
调整个人资料设置
GitLab 选择了一些合理的默认设置,但这些设置在开始使用软件后通常不适用。
要进行必要的修改,请单击导航栏右上角的用户图标,然后选择 Edit Profile。
可以将 Name 和 Email 地址从“Administrator”和“admin@example.com”调整为更准确的信息。选择的名字将显示给其他用户,而电子邮件将用于默认头像检测、通知、通过界面进行的 Git 操作等:
编辑‘Full Name’和‘Email’。
完成后,点击底部的 Update Profile settings 按钮。将被提示输入密码以确认更改。
将向提供的地址发送一封确认电子邮件。按照电子邮件中的说明确认账户,以便可以开始使用它与 GitLab。
更改账户名
接下来,在左侧导航栏中选择 Account:
在这里,可以启用双因素认证并更改 username。默认情况下,第一个管理账户被赋予了 root 这个名字。由于这是一个已知的账户名,更改为不同的名称更安全。仍然具有管理权限;唯一改变的是名字。将 root 替换为喜欢的用户名:
将用户名从‘root’更改为其他名称。
点击 Update username 按钮进行更改。之后将被提示确认更改。
下次登录 GitLab 时,请记住使用新用户名。
向账户添加 SSH 密钥
可以通过 Git 与 GitLab 项目交互启用 SSH 密钥。要做到这一点,需要将 SSH 公钥添加到 GitLab 账户。
在左侧导航栏中,选择 SSH Keys:
可以在这里输入公钥。
如果已经在 本地计算机 上创建了 SSH 密钥对,可以通过输入以下命令查看公钥:
cat ~/.ssh/id_rsa.pub
复制这段文本并将其输入到 GitLab 实例中的 Key 文本框中。
如果相反,收到的是不同的信息,说明还没有在机器上配置 SSH 密钥对:
Outputcat: /home/sammy/.ssh/id_rsa.pub: No such file or directory
如果是这种情况,可以通过输入以下命令创建 SSH 密钥对:
[environment local]
ssh-keygen
接受默认值,并可选提供密码以在本地保护密钥:
Output
[environment local]
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 |
一旦有了这个密钥,可以通过输入以下命令显示公钥:
cat ~/.ssh/id_rsa.pub
将输出的文本复制并粘贴到 GitLab 实例中的 Key 文本框中。给它一个描述性的标题,并点击 Add key 按钮。
现在可以从本地机器管理 GitLab 项目和仓库,而无需提供 GitLab 账户凭证。
第 6 步 — 限制或禁用公共注册
在当前的设置下,任何人都可以在访问 GitLab 实例的首页时注册账户。如果寻求托管公共项目,这可能是想要的。然而,很多时候,更限制性的设置是可取的。
首先,通过点击顶部导航栏的 hamburger menu 并选择下拉菜单中的 Admin 来导航到管理区域:
选择 Settings 从左侧导航栏:
将被带到 GitLab 实例的全局设置。在这里,可以调整许多影响新用户是否可以注册以及他们的访问级别的设置。
禁用注册
如果希望完全禁用注册,请滚动到 Sign-up Restrictions 部分并按 Expand 查看选项。
然后取消选中 Sign-up enabled 复选框:
记得在做出更改后点击 Save changes 按钮。
注册部分现在将从 GitLab 首页中移除。
按域名限制注册
如果作为组织的一部分使用 GitLab,并且提供与域名相关的电子邮件地址,可以限制按域名注册,而不是完全禁用它们。
在 Sign-up Restrictions 部分,选择 Send confirmation email on sign-up 选项,这将只允许用户在确认电子邮件后登录。
接下来,在 Whitelisted domains for sign-ups 框中添加域名或域名,每行一个域名。可以使用星号 “*” 来指定通配域名:
按域名限制注册。
完成后,点击 Save changes 按钮。
注册部分现在将从 GitLab 首页中移除。
限制项目创建
默认情况下,新用户可以创建多达 10 个项目。如果希望允许外部新用户进行可见性和参与,但希望限制他们创建新项目的权限,可以在 Account and Limit Settings 部分进行此操作。
在其中,可以将 Default projects limit 更改为 0,以完全禁止新用户创建项目:
从 “Account and limit” 设置中,可以将项目限制设置为零。
新用户仍然可以被手动添加到项目中,并可以访问其他用户创建的内部或公共项目。
更新后,记得点击 Save changes 按钮。
新用户现在可以创建账户,但无法创建项目。
续期 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'] = ['sammy@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 实例。可以开始导入或创建新项目,并为团队配置适当的访问权限。