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" => "[email protected]", } 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