Gitlab 本地部署全过程、Gitlab Pages、企业版 PATCH
Gitlab 官网目前提供了 Enterprise Edition 和 Community Edition 两种版本,分别对应 linux 系统的软件包 gitlab-ee 和 gitlab-ce。看名字就知道,gitlab-ee 是收费的功能更加丰富的版本。此外,企业版根据用户付费情况的不同,又分为了 Starter、Premiun、Ultimate 三种 PLAN,可以在 https://about.gitlab.com/pricing/feature-comparison/ 查看区别。
Gitlab 官方推荐用户安装企业版,因为在不购买许可证时,安装的 Gitlab-ee 就是运行为 Gitlab-ce 版本(付费功能自动隐藏),方便用户随时升级到企业版。毫无疑问,必须得选择安装 Gitlab-ee 啊!目前最新版是 15.4.0,下面是部署好的后台效果图:
安装
安装方法有很多种,甚至可以选择最原始的从源代码进行安装。针对 Linux 系统 Gitlab 官方提供了很多现成的软件包,安装简单高效,可以在 https://about.gitlab.com/install/ 查看支持的 Linux 发行版。我使用的是 Ubuntu 20.04 LTS 系统(目前,Gitlab 支持 Ubuntu 18.04 LTS 和 Ubuntu 20.04 LTS)。
-
安装依赖工具
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
。这个没啥可说的,一个命令等待安装完成即可。 -
安装邮件服务器
sudo apt-get install -y postfix
,用来在用户注册之后自动给用户发送一封注册邮件。最新版安装后不用任何配置默认就可以使用。
注意,也可以选择其他邮件服务器,等后面安装了 Gitlab 之后再进行配置。Gitlab 也支持配置公共邮箱系统(例如,@gmail.com、@163.com),如果直接选择使用公共邮箱系统,则可以不用安装 postfix 等,跳过此步骤即可。安装详情见独立博文 https://itexp.blog.csdn.net/article/details/127027705
-
添加 Gitlab 仓库源:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
,这样就可以直接使用apt
来安装 Gitlab 了。 -
直接使用命令
sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee
安装 Gitlab。命令执行后,就开始下载 Gitlab 软件包,下载之后,会自动解压(安装目录/opt/gitlab
)解压过程比较长,耐心等待。
初次安装,解压完成之后,会自动进行一系列的配置。整个配置过程时间比较长,耐心等待即可。如果运气好,没有产生错误,我这里就遇到了错误(只要上面没有填写有效的域名,肯定会出错。后文详细错误处理章节)!- 如果重装,貌似不会自动执行配置,手动执行
sudo gitlab-ctl reconfigure
即可。在此之前,是无法访问的! - 如果重装,数据库等组件是依旧会存在的,所以,重装后的用户账户、仓库等会恢复之前的!
- 命令中的
EXTERNAL_URL="https://gitlab.example.com"
是用于指定安装后 Gitlab 的访问地址。也可以不指定,安装完成后再进行修改,详见配置章节。Gitlab 会根据其中的 https 来决定配置。
- 如果重装,貌似不会自动执行配置,手动执行
-
修改网络访问相关的配置,多数情况下都需要修改防火墙,以下是一些 Ubuntu 防火墙常用命令
sudo ufw status
: 查看防火墙状态sudo ufw enable
: 打开防火墙sudo ufw disable
: 关闭防火墙sudo ufw allow 22/tcp
: 允许所有的外部 IP 访问本机的 22/tcp (ssh)端口sudo ufw allow 9092
: 允许所有的外部 IP 访问本机的自定义 9092 端口sudo ufw delete allow 9092
: 禁用 9092 端口sudo ufw allow from 192.168.1.10
: 允许此IP访问所有的本机端口,即添加到了允许访问列表sudo ufw delete allow from 192.168.1.10
: 从允许访问列表中删除,即禁止此 ip 进行访问
错误处理
我最开安装的时候,最新版是 15.3.3 版本,安装过程出现了如下第一个错误。安装完后,Gitlab 就发布了最新的 15.4.0 ,果断直接升级到了最新版。升级会覆盖 /opt/gitlab
下的文件,配置文件一般不会变动。
-
在安装过程中报错
Error executing action create on resource 'acme_certificate[staging]
。这个问题是不能正常处理 Let’s Encrypt 的 SSL 证书导致的(根据官网说明,在安装时,指定了https
的 URL 后,安装就会自动识别并进行 HTTPS 相关(Let’s Encrypt)配置)。
由于我这里是使用的局域网的 IP,是无法获取到 SSL 证书的。实际此错误并不影响使用 Gitlab。当然我们可以通过编辑 Gitlab 文件sudo nano /opt/gitlab/embedded/cookbooks/letsencrypt/resources/certificate.rb
来屏蔽掉错误提示(如上图所示)。别忘了执行sudo gitlab-ctl reconfigure
重新配置 Gitlab 即可。如果后续升级了 Gitlab,会导致修改被还原,需要再次进行修改
-
默认用户登陆后不能正常显示头像。这个问题是由于 Gitlab 默认使用的头像服务器 gravatar 被墙了(Gitlab 根据用户邮箱自动从 gravatar 获取头像)。可以通过修改 Gitlab 文件
sudo nano /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
中的配置来解决(当然也可以在个人资料里上传本地头像)。修改后gitlab-ctl restart
即可。注意,如果后续升级了 Gitlab,会导致修改被还原,需要再次进行修改
配置
安装过程的后半段,大部分时间 Gitlab 都在自动执行各种配置。配置文件主要就是 /etc/gitlab/gitlab.rb
,我们可以手动更改。需要注意的是,更改该文件之后,必须重新执行 sudo gitlab-ctl reconfigure
以使修改生效。
我这里仅仅是介绍一些安装之后必须要进行的配置,全部 Gitlab 配置项是相当多的,可自行查看 /etc/gitlab/gitlab.rb
文件,官网 https://docs.gitlab.com/ee/ 也有比较详细的文档可供参考。
Gitlab URL
在上面安装时,指定的域名为 https://gitlab.example.com
,由于我是纯内网使用,这里直接修改为服务器 IP 地址。使用命令 sudo nano /etc/gitlab/gitlab.rb
编辑 external_url
配置项就可以修改访问 Gitlab 的 URL。
- 官方文档:https://docs.gitlab.com/omnibus/settings/configuration.html#configure-the-external-url-for-gitlab
- 官方建议也把 Markdown cache 清理掉。
HTTP 重定向
默认情况下,安装之后只能使用 https 进行访问,如果需要使用 http 访问,则可以通过需要修改 sudo nano /etc/gitlab/gitlab.rb
中的相关配置,开启 http 重定向到 https 来实现。
管理员密码
在默认情况下,Gitlab 会自动创建一个 root 用户,密码将随机生成并存储在 /etc/gitlab/initial_root_password
中。这个密码文件将在 24 小时后自动删除。登录后记得修改密码。也可以直接在服务器上重置密码:
# 登录到 gitlab 控制台
sudo gitlab-rails console -e production
# 选择用户
user=User.where(id:1).first
# 重置密码,保存退出
user.password='12345678'
user.password_confirmation='12345678'
user.save!
exit
在安装时,可以在安装命令 sudo GITLAB_ROOT_PASSWORD="<strongpassword>" EXTERNAL_URL="http://gitlab.example.com" apt install gitlab-ee
中显示指定 root 用户的密码。
PATCH
安装完 Gitlab-ee 之后,默认是运行为 Gitlab-ce 版本,收费功能自动隐藏了。简单进行 PATCH 一下就可以使用完整的 Gitlab-ee 功能。注意,我这里仅仅是为了验证功能,请务必尊重版权,到官网购买订阅。
-
安装
sudo apt install ruby
。注意,必须是 2.3 及以上版本。 -
sudo gem install gitlab-license
-
使用命令
sudo nano license.rb
新建一个 Keygen 源码文件,然后输入以下内容(注意,根据需要修改其中的license.xx
字段的内容)require "openssl" require "gitlab/license" key_pair = OpenSSL::PKey::RSA.generate(2048) File.open("license_key", "w") { |f| f.write(key_pair.to_pem) } public_key = key_pair.public_key File.open("license_key.pub", "w") { |f| f.write(public_key.to_pem) } private_key = OpenSSL::PKey::RSA.new File.read("license_key") Gitlab::License.encryption_key = private_key license = Gitlab::License.new license.licensee = { # 注册信息"Name" => "none","Company" => "none","Email" => "example@test.com", } license.starts_at = Date.new(2020, 1, 1) # 开始时间 license.expires_at = Date.new(2050, 1, 1) # 结束时间 license.notify_admins_at = Date.new(2049, 12, 1) license.notify_users_at = Date.new(2049, 12, 1) license.block_changes_at = Date.new(2050, 1, 1) license.restrictions = {active_user_count: 10000, } puts "License:" puts license data = license.export puts "Exported license:" puts data File.open("GitLabBV.gitlab-license", "w") { |f| f.write(data) } public_key = OpenSSL::PKey::RSA.new File.read("license_key.pub") Gitlab::License.encryption_key = public_key data = File.read("GitLabBV.gitlab-license") $license = Gitlab::License.import(data) puts "Imported license:" puts $license unless $licenseraise "The license is invalid." end if $license.restricted?(:active_user_count)active_user_count = 10000if active_user_count > $license.restrictions[:active_user_count]raise "The active user count exceeds the allowed amount!"end