一蚌成、簡(jiǎn)介
GitLab是利用 Ruby on Rails 一個(gè)開(kāi)源的版本管理系統(tǒng),實(shí)現(xiàn)一個(gè)自托管的Git項(xiàng)目倉(cāng)庫(kù)锚扎,可通過(guò)Web界面進(jìn)行訪問(wèn)公開(kāi)的或者私人項(xiàng)目。它擁有與Github類似的功能馁启,能夠?yàn)g覽源代碼驾孔,管理缺陷和注釋」吒恚可以管理團(tuán)隊(duì)對(duì)倉(cāng)庫(kù)的訪問(wèn)翠勉,它非常易于瀏覽提交過(guò)的版本并提供一個(gè)文件歷史庫(kù)。團(tuán)隊(duì)成員可以利用內(nèi)置的簡(jiǎn)單聊天程序(Wall)進(jìn)行交流霉颠。它還提供一個(gè)代碼片段收集功能可以輕松實(shí)現(xiàn)代碼復(fù)用对碌,便于日后有需要的時(shí)候進(jìn)行查找。
二蒿偎、Gitlib和Github區(qū)別
相同點(diǎn)
兩個(gè)都是基于web的Git倉(cāng)庫(kù),而且GitLab在使用方式上和GitHub基本上是一樣的朽们,都提供了存儲(chǔ)、分享诉位、發(fā)布和合作開(kāi)發(fā)項(xiàng)目的中心化云存儲(chǔ)場(chǎng)所
不同點(diǎn)
GitHUb同時(shí)提供公共倉(cāng)庫(kù)和私有倉(cāng)庫(kù)骑脱,但如果需要使用私有倉(cāng)庫(kù),是需要收費(fèi)的.GitLab讓開(kāi)發(fā)團(tuán)隊(duì)對(duì)他們的代碼倉(cāng)庫(kù)擁有更多的控制苍糠,相比于GitHub叁丧,它有不少的特色:
允許免費(fèi)設(shè)置倉(cāng)庫(kù)權(quán)限;允許用戶選擇分享一個(gè)project的部分代碼岳瞭;允許用戶設(shè)置project的獲取權(quán)限拥娄,進(jìn)一步的提升安全性;可以設(shè)置獲取到團(tuán)隊(duì)整體的改進(jìn)進(jìn)度瞳筏;通過(guò)innersourcing讓不在權(quán)限范圍內(nèi)的人訪問(wèn)不到該資源条舔。
所以根據(jù)業(yè)務(wù)使用場(chǎng)景來(lái)看,私密性的話乏矾,gitlib權(quán)限管制無(wú)疑是最好的選擇;而面對(duì)于開(kāi)源的話迁杨,github則是最好的選擇钻心。這個(gè)我們根據(jù)實(shí)際情況而定。
安裝Gitlib
- 環(huán)境 centos7.6 關(guān)閉防火墻及seliunx設(shè)置(不再介紹)
- 依賴
sudo yum install -y curl policycoreutils-python openssh-server
- 安裝postfix來(lái)實(shí)現(xiàn)郵件通知功能
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
- 配置Gitlib官網(wǎng)的安裝腳本地址并下載安裝铅协,詳情可見(jiàn)官網(wǎng)介紹 這里強(qiáng)調(diào)一下版本問(wèn)題 我們使用CE社區(qū)版本免費(fèi) 企業(yè)版本則為EE版本捷沸,若其他操作平臺(tái),請(qǐng)參考相對(duì)應(yīng)操作系統(tǒng)
#添加倉(cāng)庫(kù)地址,根據(jù)實(shí)際情況選擇
#ee版本
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
#ce版本
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
- 安裝
yum intall gitlab-ce
- RPM包安裝試狐史,國(guó)內(nèi)清華源鏡像下載[RPM]包相對(duì)要快很多(https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
包自行安裝
此時(shí)文件量比較大 所以需要時(shí)間來(lái)下載 請(qǐng)耐心等待直到 compete完成安裝
- 訪問(wèn) 正常來(lái)說(shuō)痒给,執(zhí)行完這步之后说墨,會(huì)幫我們安裝和自動(dòng)配置GitLab相關(guān)的信息的.如果沒(méi)有啟動(dòng)GitLab可以再執(zhí)行一下這句命令。 請(qǐng)初始化配置苍柏,如下命令尼斧,自動(dòng)創(chuàng)建服務(wù)及數(shù)據(jù)
gitlab-ctl reconfigure
直接初始完成
- 502報(bào)錯(cuò),如圖试吁,此時(shí)請(qǐng)重啟服務(wù)
sudo gitlab-ctl restart
查看gitlab啟動(dòng)狀態(tài)棺棵,gitlab-ctl status查看狀態(tài),如果沒(méi)有報(bào)錯(cuò)熄捍,那么請(qǐng)查看內(nèi)存使用情況烛恤,如有變動(dòng)說(shuō)明gitlab仍在啟動(dòng)中,請(qǐng)耐心等候
[root@k8s ~]# gitlab-ctl status
run: alertmanager: (pid 7017) 115s; run: log: (pid 7013) 115s
run: gitaly: (pid 6956) 116s; run: log: (pid 6955) 116s
run: gitlab-monitor: (pid 6993) 115s; run: log: (pid 6992) 115s
run: gitlab-workhorse: (pid 6980) 115s; run: log: (pid 6979) 115s
run: grafana: (pid 7018) 115s; run: log: (pid 7016) 115s
run: logrotate: (pid 7009) 115s; run: log: (pid 7008) 115s
run: nginx: (pid 7010) 115s; run: log: (pid 6982) 115s
run: node-exporter: (pid 6986) 115s; run: log: (pid 6981) 115s
run: postgres-exporter: (pid 7015) 115s; run: log: (pid 7012) 115s
run: postgresql: (pid 6966) 116s; run: log: (pid 6965) 116s
run: prometheus: (pid 7014) 115s; run: log: (pid 7011) 115s
run: redis: (pid 6985) 115s; run: log: (pid 6984) 115s
run: redis-exporter: (pid 6987) 115s; run: log: (pid 6983) 115s
run: sidekiq: (pid 6958) 116s; run: log: (pid 6957) 116s
run: unicorn: (pid 14764) 1s; run: log: (pid 6994) 115s
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1723 2817 72 1158 3621
Swap: 0 0 0
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1920 2620 72 1158 3424
Swap: 0 0 0
[root@k8s ~]# free -m
total used free shared buff/cache available
Mem: 5699 1943 2597 72 1158 3401
Swap: 0 0 0
稍等片刻 設(shè)置密碼后 以root用戶登陸
系統(tǒng)郵件配置
目的余耽,系統(tǒng)配置郵箱使用stmp發(fā)送創(chuàng)建帳號(hào)信息等缚柏,如:創(chuàng)建帳號(hào)后發(fā)送用戶密碼初始設(shè)置頁(yè)面到用戶或用戶有變更時(shí)會(huì)出現(xiàn)類似情況
SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol)
若報(bào)錯(cuò)則為ssl配置問(wèn)題,因本次我們未使用https域名所以此項(xiàng)則不配置碟贾,具體操作如下
vim /etc/gitlab/gitlab.rb
找到如下設(shè)置
### Email Settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.XXX.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "XXX@XXX.com"
gitlab_rails['smtp_password'] = "your password"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false #這里是否使用ssl協(xié)議币喧,本次因未配置ssl域名,這里我們?cè)O(shè)置為false
gitlab_rails['smtp_openssl_verify_mode'] = 'none' #如上同理
gitlab_rails['smtp_domain'] = "mail.XXX.com"
gitlab_rails['gitlab_email_from'] = 'XXX@XXX.com'
保存后
gitlab-ctl reconfigure #重啟配置
gitlab-ctl restart
gitlab-rails console #測(cè)試郵件
Notify.test_email(‘接收方郵件地址’,‘郵件標(biāo)題’,‘郵件內(nèi)容’).deliver_now
Notify.test_email('xxx@XXX.com','hello','hello').deliver_now
-
當(dāng)創(chuàng)建用戶或用戶信息變更時(shí)缕陕,系統(tǒng)郵件將會(huì)發(fā)送郵件通知用戶
漢化
請(qǐng)注意對(duì)應(yīng)版本信息 如不清楚gitlab版本以及git粱锐,請(qǐng)不要操作,否則gitlab癱瘓扛邑!
[root@k8s ~]# sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.2.4
- 下載漢化包 注意補(bǔ)丁包版本一定要與gitlab的版本一致怜浅,以下直接下載的是gitlab-12-2穩(wěn)定版的。
wget https://gitlab.com/xhang/gitlab/repository/12-2-stable-zh/archive.tar.bz2 -O gitlab-12-2-stable-zh.tar.bz2
或
git clone https://gitlab.com/xhang/gitlab.git
-rw-r--r-- 1 root root 2231640 Sep 4 14:33 gitlab-12-2-stable-zh.tar.bz2
- 解壓
[root@k8s ~]# tar xf gitlab-12-2-stable-zh.tar.bz2
[root@k8s home]# mv gitlab-12-2-stable-zh-d492132c9775663063d2438cbc674e14cda3bd25/ gitlab-12-2-stable-zh
[root@k8s home]# cat gitlab-12-2-stable-zh/VERSION
12.2.0
- 備份原有配置
[root@k8s home]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.ori}
- 復(fù)制并覆蓋配置文件
[root@k8s home]# cp -rf gitlab-12-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
cp: overwrite ‘/opt/gitlab/embedded/service/gitlab-rails/app/controllers/abuse_reports_controller.rb’? yes
cp: overwrite ‘/opt/gitlab/embedded/service/gitlab-rails/app/controllers/acme_challenges_controller.rb’? yes
這里仍提示是否覆蓋 發(fā)現(xiàn)這是別名引起的
[root@k8s home]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
發(fā)現(xiàn)每次執(zhí)行cp命令蔬崩,其實(shí)是執(zhí)行了cp -i命令的別名恶座,因此無(wú)論怎么輸入都提示是否覆蓋。
修改~/.bashrc沥阳,在“alias cp='cp -i'”前添加#號(hào)注釋后即可跨琳。
[root@k8s home]# vi ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
# alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
~
刷新
[root@k8s home]# source ~/.bashrc
仍不生效的話,請(qǐng)?jiān)诿钋凹由稀癨”
[root@k8s home]# \cp -rf gitlab-12-2-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘gitlab-12-2-stable-zh/log’
cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘gitlab-12-2-stable-zh/tmp’
這里的錯(cuò)誤桐罕,忽略脉让,因?yàn)橹耙呀?jīng)設(shè)置gitlab的root密碼了
- 重新配置gitlab
[root@k8s home]# gitlab-ctl reconfigure
- 重置gitlab
[root@k8s home]# gitlab-ctl restart
ok: run: alertmanager: (pid 26363) 0s
ok: run: gitaly: (pid 26378) 0s
ok: run: gitlab-monitor: (pid 26400) 0s
ok: run: gitlab-workhorse: (pid 26417) 1s
ok: run: grafana: (pid 26426) 0s
ok: run: logrotate: (pid 26443) 1s
ok: run: nginx: (pid 26451) 0s
ok: run: node-exporter: (pid 26537) 0s
ok: run: postgres-exporter: (pid 26547) 1s
ok: run: postgresql: (pid 26561) 0s
ok: run: prometheus: (pid 26571) 1s
ok: run: redis: (pid 26584) 0s
ok: run: redis-exporter: (pid 26589) 1s
ok: run: sidekiq: (pid 26597) 0s
ok: run: unicorn: (pid 26609) 1s
[root@k8s home]#
-
進(jìn)入界面,請(qǐng)耐心等待功炮,仍會(huì)出502錯(cuò)誤提示溅潜。此時(shí)界面已不再是英文,可見(jiàn)漢化成功薪伏,耶~~~
Gitlab基本命令
sudo gitlab-ctl start # 啟動(dòng)所有 gitlab 組件滚澜;并加入開(kāi)機(jī)啟動(dòng)項(xiàng)里面:/etc/rc.local
sudo gitlab-ctl stop # 停止所有 gitlab 組件;
sudo gitlab-ctl restart # 重啟所有 gitlab 組件嫁怀;
sudo gitlab-ctl status # 查看服務(wù)狀態(tài)设捐;
sudo gitlab-ctl tail # 查看日志借浊;
安裝GitLab服務(wù)器配置注意事項(xiàng),502很大程度上是因?yàn)镃PU萝招、內(nèi)存耗盡導(dǎo)致
安裝硬件需求
CPU
1 核心CPU最多支持100個(gè)用戶蚂斤,所有的workers和后臺(tái)任務(wù)都在同一個(gè)核心工作這將導(dǎo)致GitLab服務(wù)響應(yīng)會(huì)有點(diǎn)緩慢。
2核心 支持500用戶即寒,這也是官方推薦的最低標(biāo)準(zhǔn)橡淆。
4 核心支持2,000用戶。
8 核心支持5,000用戶母赵。
16 核心支持10,000用戶逸爵。
32 核心支持20,000用戶。
64 核心支持40,000用戶凹嘲。
如果想支持更多用戶师倔,可以使用 集群式架構(gòu)
Memory
安裝使用GitLab需要至少4GB可用內(nèi)存(RAM + Swap)! 由于操作系統(tǒng)和其他正在運(yùn)行的應(yīng)用也會(huì)使用內(nèi)存, 所以安裝GitLab前一定要注意當(dāng)前服務(wù)器至少有4GB的可用內(nèi)存. 少于4GB內(nèi)存會(huì)導(dǎo)致在reconfigure的時(shí)候出現(xiàn)各種詭異的問(wèn)題, 而且在使用過(guò)程中也經(jīng)常會(huì)出現(xiàn)500錯(cuò)誤.
1GB 物理內(nèi)存 + 3GB 交換分區(qū) 是最低的要求,但我們 強(qiáng)烈反對(duì) 使用這樣的配置周蹭。 查看下面unicorn worker章節(jié)獲取更多建議趋艘。
2GB 物理內(nèi)存 + 2GB 交換分區(qū) 支持100用戶,但服務(wù)響應(yīng)會(huì)很慢凶朗。
4GB 物理內(nèi)存 支持100用戶瓷胧,也是 官方推薦 的配置。
8GB 物理內(nèi)存 支持 1,000 用戶棚愤。
16GB 物理內(nèi)存 支持 2,000 用戶搓萧。
32GB 物理內(nèi)存 支持 4,000 用戶。
64GB 物理內(nèi)存 支持 8,000 用戶宛畦。
128GB 物理內(nèi)存 支持 16,000 用戶瘸洛。
256GB 物理內(nèi)存 支持 32,000 用戶。
如果想支持更多用戶次和,可以使用 集群式架構(gòu)
即使你服務(wù)器有足夠多的RAM反肋, 也要給服務(wù)器至少分配2GB的交換分區(qū)。 因?yàn)槭褂媒粨Q分區(qū)可以在你的可用內(nèi)存波動(dòng)的時(shí)候降低GitLab出錯(cuò)的幾率踏施。
注意: Sidekiq的25個(gè)workers在查看進(jìn)程(top或者h(yuǎn)top)的時(shí)候會(huì)發(fā)現(xiàn)它會(huì)單獨(dú)顯示每個(gè)worker石蔗,但是它們是共享內(nèi)存分配的,這是因?yàn)镾idekiq是一個(gè)多線程的程序畅形。 詳細(xì)內(nèi)容查看下面關(guān)于Unicorn workers 的介紹抓督。
注意事項(xiàng)
一、首先看看配置文件/etc/gitlab/gitlab.rb 中的端口號(hào)是否被占用
二束亏、另外一個(gè)原因是gitlab占用內(nèi)存太多,導(dǎo)致服務(wù)器崩潰
內(nèi)存問(wèn)題 解決辦法,啟用swap分區(qū)阵具,步驟如下:
cat /proc/swaps 查看swap分區(qū)是否啟動(dòng)(無(wú))
創(chuàng)建 :
dd if=/dev/zero of=/data/swap bs=512 count=8388616
創(chuàng)建swap大小為bs*count=4294971392(4G)碍遍;
通過(guò)mkswap命令將上面新建出的文件做成swap分區(qū)
mkswap /data/swap
查看內(nèi)核參數(shù)vm.swappiness中的數(shù)值是否為0定铜,如果為0則根據(jù)實(shí)際需要調(diào)整成60
查看: cat /proc/sys/vm/swappiness
設(shè)置: sysctl -w vm.swappiness=60
若想永久修改,則編輯/etc/sysctl.conf文件怕敬,改文件中有vm.swappiness變量配置揣炕,默認(rèn)為0
啟用分區(qū)
swapon /data/swap
echo “/data/swap swap swap defaults 0 0” >> /etc/fstab
再次使用cat /proc/swaps 查看swap分區(qū)是否啟動(dòng)
重啟gitlab。
卸載gitlab
- 清理命令
sudo gitlab-ctl uninstall
sudo gitlab-ctl cleanse
sudo gitlab-ctl remove-accounts
- 停止gitlab
gitlab-ctl stop
- 卸載gitlab
rpm -e gitlab-ce
- 查看進(jìn)程
ps aux | grep gitlab
kill -9 xxx
殺掉守護(hù)進(jìn)程
- 清理殘余文件
find / -name gitlab | xargs rm -rf