GitLab安裝與維護(hù)
GitLab是GitHub的免費(fèi)私有庫替代方案,并且安裝與配置都很方便。
系統(tǒng)需求
GitLab要求最少4GB內(nèi)存,支持小團(tuán)隊(duì)使用沒問題,實(shí)測2GB內(nèi)存的VPS基本沒法用,開swapfile也不行,動(dòng)不動(dòng)就60秒超時(shí)。因此4GB內(nèi)存是必須的。
關(guān)于這一點(diǎn),內(nèi)存大戶主要是Unicorn,基于ruby的http服務(wù)器。Unicorn會(huì)在啟動(dòng)后預(yù)先占用大部分內(nèi)存,內(nèi)存會(huì)隨著使用逐漸增長,并且不會(huì)釋放。根據(jù)GitLab和Unicorn的官方文檔,這不是它們的鍋,那么這個(gè)鍋可能是ruby和rails了。解決方法是unicorn-work-kill,會(huì)根據(jù)請(qǐng)求次數(shù)和內(nèi)存占用自動(dòng)重啟Unicorn。Omnibus版的GitLab是默認(rèn)開啟的。
版本選擇
GitLab分為社區(qū)版和企業(yè)版,在未付費(fèi)的情況下,兩者的功能是一樣的。并且社區(qū)版整合了CI/CD,因此可以滿足絕大部分的開發(fā)需求。
安裝包主要包括Omnibus整合包,Docker、AWS等的云鏡像,以及一些第三方維護(hù)的版本。其中Omnibus直接整合了所有服務(wù)端組件,適合自用和練手。
安裝
安裝以O(shè)mnibus整合包為例,操作系統(tǒng)為Ubuntu16.04。
安裝必要組件(可選)
Gitlab需要 curl,openSSH 和 ca-certificates 這幾個(gè)組件:
sudo apt-get install -y curl openssh-server ca-certificates
不過服務(wù)器系統(tǒng)一般自帶,所以是可選的。
安裝郵件服務(wù)(可選)
郵件服務(wù),用于GitLab發(fā)送找回密碼的郵件:
sudo apt-get install -y postfix
不過如果服務(wù)器沒有域名的話,大部分郵箱會(huì)拒收郵件,而管理員帳號(hào)可以直接重置其他賬號(hào)的密碼,所以是可選的。
添加源
官方提供的腳本:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
這個(gè)腳本會(huì)自動(dòng)添加源到apt 的source list,以及安全key。另外,如果自己服務(wù)器在國內(nèi),腳本會(huì)自動(dòng)添加清華的鏡像,速度還行。
安裝
先更新apt緩存:
sudo apt update
推薦使用apt
而不是apt-get
,前者大多數(shù)情況下更簡單一點(diǎn)。
然后是安裝:
sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ce
其中EXTERNAL_URL
,改成自己的域名。沒有域名的話,可以直接設(shè)置成IP的形式:http://1.2.3.4
,這個(gè)推測跟nginx服務(wù)以及GitLab中的項(xiàng)目地址有關(guān),所以最好正確設(shè)置。當(dāng)然也可以之后在配置文件里更改。
配置
安裝完成后,可以在配置文件中修改配置/etc/gitlab/gitlab.rb
。
比如之前的EXTERNAL_URL
:
external_url 'http://gitlab.example.com'
官方還有一個(gè)關(guān)于unicorn
的優(yōu)化建議:
# unicorn['worker_processes'] = 2 ##修改要去掉前面的#號(hào)
默認(rèn)值是2,如果服務(wù)器只用于GitLab的話,官方建議是CPU核心數(shù)加一,可以提高服務(wù)器的響應(yīng)速度。不過如果內(nèi)存只有4G,或者服務(wù)器同時(shí)承載其他服務(wù),就不要改了,以免內(nèi)存不足。另外,這個(gè)參數(shù)最小值是2,設(shè)為1,服務(wù)器可能會(huì)卡死。
配置完成后,刷新配置:
sudo gitlab-ctl reconfigure
每次修改完gitlab.rb
,都要刷新配置。
如果沒有報(bào)錯(cuò)的話,GitLab就配置完畢并且正常運(yùn)行了。接下來可以打開瀏覽器開始訪問了。