简介
GitLab是一个开源应用程序,主要用于托管 Git 仓库,并提供与开发相关的附加功能(如问题跟踪)。GitLab 可由用户自己的基础架构托管,可灵活部署为开发团队的内部存储库、与用户对接的公共方式或供稿者托管自己项目的途径。
通过 GitLab 项目,你可以在自己的硬件上创建一个 GitLab 实例,只需最简单的安装机制。本篇文章将教你如何在 Ubuntu 服务器上安装和配置 GitLab 社区版。
必要准备
-
一个聪明的大脑(本篇文章内容难度偏难,适合有基础的小伙伴食用,但爱挑战困难的小伙伴也可以试试)
-
一台Linux服务器,GitLab硬件要求建议使用至少有以下配置的服务器:
- CPU至少有4个核心
- 内存至少有4GB
-
一个指向你服务器的域名。本教程将使用
your_domain
作为示例,但请确保替换为你自己的域名。
如果你还没有服务器,或者已有的服务器配置不满足的建议的最低配置,那可以跟着我的步骤 ,创建一台属于自己的Linux服务器,
我将会以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。
注册链接: https://www.rainyun.com/NTEzMTM1_?s=blog
创建云服务器
以下内容只是参考,具体按照自己的需求选择配置即可。
点击“云产品”→“云服务器”→“立即购买”。
建议选择距离你较近的区域,以降低延迟。
选择配置,建议选择 4核4G配置的。
选择Ubuntu 22.04版本。
点击“立即购买”,并完成后续购买流程。 购买完成后,等待服务器部署完毕,进入管理面板,找到远程连接信息。
使用PowerShell进行远程连接:输入ssh root@你的服务器IP
(例如ssh root@154.9.227.239
),首次连接需输入yes
,然后回车即可登录。
到这里,我们的服务器就创建完毕,并且能够远程SSH访问了。
第1步 — 安装依赖项
在安装GitLab之前,需要安装它在安装过程中以及持续运行中所依赖的软件。
首先,更新本地软件包:
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
运行安装程序:
sudo bash /tmp/script.deb.sh
该脚本设置你的服务器以使用GitLab维护的仓库。这使你可以使用与你用于其他系统软件包相同的包管理工具来管理GitLab。完成后,就可以使用apt
安装实际的GitLab应用程序:
sudo apt install gitlab-ce
这将在你的系统上安装必要的组件,可能需要一些时间来完成。
第3步 — 调整防火墙规则
在配置GitLab之前,需要在防火墙开启部分端口,你也可以在你购买云服务器的web管理面板中开启对应协议的端口,但在本篇博客中,会使用 ufw
来开启。
通过运行以下命令查看当前活动的防火墙状态:
$ sudo ufw status# 输出
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
当前规则允许SSH流量通过,但限制了对其他服务的访问。由于GitLab是一个Web应用程序,需要允许HTTP(80)
访问。因为你将利用GitLab的内置的功能申请并启用Let’s Encrypt的免费TLS/SSL证书,也允许HTTPS(443)
访问。
HTTP和HTTPS的协议到端口映射在/etc/services
文件中可用,因此你可以通过名称允许该流量。如果你还没有启用OpenSSH流量,你应该允许该流量:
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
你可以再次检查ufw status
以确保你至少授予了这两个服务的访问权限:
$ sudo ufw status# 输出
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
:
...
## 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可以用来联系你的电子邮件地址列表。建议取消注释并填写,基本上是用来提醒你的域名SSL证书是否快要过期:
letsencrypt['contact_emails'] = ['you_email@gmail.com']
修改完成后保存,可以按CTRL+X
,然后Y
,然后ENTER
来完成。
运行以下命令重新配置GitLab:
sudo gitlab-ctl reconfigure
这是一个完全自动化的过程,所以你不需要做什么事情。该过程还将自动为你的域名配置 Let’s Encrypt 证书。
第5步 — 通过Web界面进行初始配置
GitLab运行后,你可以通过Web界面对应用程序进行初始配置。
第一次登录
在浏览器中输入你的的 GitLab 服务器的域名:
https://your_domain
第一次访问,会看到一个登录页面:
首次访问需要使用 root
用户登录
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 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
中查看到的密码
然后点击登录按钮,就可以看到 以下画面了:
接下来可以在管理面板中修改部分信息。
更新密码
登录后要做的第一件事就是更改密码。要更改密码,请单击导航栏右上角的图标,然后选择Edit profile:
然后进入用户设置页面。在左侧导航栏选择Password,将 GitLab 生成的复杂密码更改为你自己的密码,完成更新后点击Save password按钮:
然后需要重新登录 GitLab。
修改配置文件设置
点击导航栏右上角的用户图标,选择 Edit Profile。
建议将 Full name 和 Email 修改为自己的。
完成修改后,点击 Update Profile settings ,Gitlab 会让你验证一次密码。
并且会根据上面填写的 Email 信息,由Gitlab官方,发送一封确认邮件,按提示完成即可。
更改账户名称
在左侧导航栏中选择 Account:
可以将默认的 root 修改为你自己喜欢的用户名
点击 Update username 进行更改。
下次再登录 Gitlab 的时候,就可以使用你自己喜欢的用户明名登录即可。
为账户添加 SSH 密钥
你可以通过 Git 启用 SSH 密钥来与 GitLab 项目交互。为此,你需要在 GitLab 账户中添加 SSH 公钥。
如果已在本地计算机上创建了 SSH 密钥对,则可输入以下内容查看公钥:
cat ~/.ssh/id_rsa.pub# 正确输出
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 you_computer_name@mydesktop# 错误输出
cat: ~/.ssh/id_rsa.pub: No such file or directory
如果你输出了:错误输出
可以在本地运行 ssh-keygen
命令,按照提示输入信息即可:
$ ssh-keygen
# 输出,并按提示按 Enter 即可
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 you_computer_name@mydesktop
复制输出的文本并将其填写到 GitLab 实例中的 Key 文本框。
现在,你无需提供 GitLab 账户凭证,就能在本地计算机上管理 GitLab 项目和仓库了。
第 6 步 - 限制或禁用公开注册
在当前的设置下,任何人都有可能在访问 GitLab 实例的登陆页面时注册一个账户。如果你想托管一个公共项目,那这可能就是你想要的效果。
但是如果你需要你自己用,或者你们团队、你们组织内部使用,那么就需要禁用公开注册了,以下内容将会教你:
首先,点击顶部导航栏的菜单,从下拉菜单中选择Admin,进入管理区:
从左侧导航栏中选择 Settings:
你将进入 GitLab 实例的全局设置。在这里,你可以调整一系列影响新用户注册与否及其访问级别的设置。
禁用注册
如果你希望完全禁用注册,请滚动到 Sign-up Restrictions 部分并按下 Expand 查看选项。
然后取消选择 Sign-up enabled 复选框:
最后保存即可。
限制项目创建
默认情况下,新用户最多可以创建 10 个项目。如果希望允许外部新用户查看和参与,但又想限制他们创建新项目的权限,可以在 Account and Limit Settings 部分中进行限制。
可以将 Default projects limit 更改为 0,以完全禁止新用户创建项目:
保存后,新用户现在可以创建账户,但无法创建项目。
更新 Let’s Encrypt 证书
默认情况下,GitLab 会在每隔四天的晚上更新 Let’s Encrypt 证书,具体时间取决于 external_url
文件。你可以在 /etc/gitlab/gitlab.rb
文件中修改这些设置。
例如,如果你想每隔 7 天在 12:30 更新一次,你可以这样配置。
首先,使用 nano 打开配置文件:
sudo nano /etc/gitlab/gitlab.rb
然后,在文件中找到以下几行,删除 #
并更新为以下内容:
...
################################################################################
# Let's Encrypt integration
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['you_email@gmail.com'] # 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
...
有了自动续订功能,就无需担心 HTTPS 服务中断。
相关链接
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog
我的博客:https://blog.ivwv.site