一.首先在linux服務(wù)器上安裝Gitlab服務(wù)需要依賴的組件,步驟如下:
? ? ①yum install policycoreutils-python
? ? ②如果使用默認的postfix發(fā)送郵件,執(zhí)行后面的步驟只冻,如果使用自己的smtp服務(wù)器來發(fā)送可以直接進入gitlab安裝步驟庇麦。
? ? ③yum install postfix 安裝postfix
? ? ④systemctl enable postfix 啟動postfix
? ? ⑤vim /etc/postfix/main.cf 修改 inet_interfaces = interface 為 inet_interfaces = all
? ? ⑥/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix,然后alternatives --display mta 檢查是否成功修改mta
? ? ⑦如果hostname為數(shù)字啟動服務(wù)會失敗喜德,需要修改hostname山橄,執(zhí)行hostnamectl set-hostname localhost.localdomain 修改hostname
? ? ⑧systemctl start postfix 啟動郵件服務(wù)postfix
二.接下來進入gitlab安裝:
1.下載對應(yīng)的gitlab rpm包,這里以gitlab-ce 12.5.7為例舍悯,在linux服務(wù)器上執(zhí)行
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.5.7-ce.0.el7.x86_64.rpm/download.rpm航棱,下載完成后,執(zhí)行rpm -ivh gitlab-ce-12.5.7-ce.0.el7.x86_64.rpm命令進行安裝
2.安裝完成后萌衬,會提示修改配置文件饮醇,vim /etc/gitlab/gitlab.rb 進行編輯,按需修改其中的屬性秕豫,external_url設(shè)置為域名朴艰,如果設(shè)置了端口,不能和unicorn['port']重復(fù)混移,git_data_dirs為倉庫存放目錄祠墅,gitlab_rails['gitlab_shell_ssh_port']是ssh端口,gitlab_rails['backup_path']為備份文件路徑歌径;其他的屬性可以查閱說明文檔毁嗦。
3.修改完配置后,執(zhí)行g(shù)itlab-ctl reconfigure 重載配置回铛,然后重啟?gitlab-ctl restart狗准。此時訪問gitlab(剛才配置的external_url地址),第一次會提示修改root密碼茵肃,按要求修改即可腔长。如果出現(xiàn)502錯誤,通常是配置文件錯誤免姿,如端口沖突饼酿,reconfigure未成功等,或者是機器內(nèi)存不足導(dǎo)致的胚膊。
4.如果要測試郵件發(fā)送是否OK故俐,可以執(zhí)行g(shù)itlab-rails console進入gitlab控制臺,然后輸入Notify.test_email("xxx@xxx.com","test","test").deliver_now 進行發(fā)送測試是否收到郵件紊婉。
5.常見的gitlab-ctl命令如下:
? ??gitlab-ctl start 啟動服務(wù)
????gitlab-ctl reconfigure 重新編譯配置
????gitlab-ctl restart 重啟gitlab服務(wù)
????gitlab-ctl status 查看運行狀態(tài)
????gitlab-ctl stop 停止服務(wù)
????gitlab-ctl tail 查看運行日志
6.如果需要升級gitlab版本药版,下載對應(yīng)的rpm包,執(zhí)行rpm -Uvh gitlab-ce-XXX.rpm喻犁,不同的大版本之間通常會提示錯誤無法升級槽片,此時需要按照提示先升級到當前大版本的最后一個小版本何缓,再進行升級。gitlab重裝與升級有許多坑(后面會說到)还栓,非必要時不建議進行升級碌廓。
三.企業(yè)項目代碼倉庫通常需要進行數(shù)據(jù)備份,gitlab-ce本身并不支持集群方案剩盒,官方推薦的備份方案是通過gitlab自帶的備份命令配合rsync來實現(xiàn)備份與恢復(fù)的谷婆。這里我使用定時任務(wù)調(diào)用gitlab自帶的備份命令加上scp遠程傳輸?shù)絺浞輽C器上,當主機宕機或者硬盤損壞時辽聊,可以啟用備機導(dǎo)入備份文件恢復(fù)服務(wù)的方式纪挎,具體操作如下:
1.兩臺機器建立免密ssh
? ? ①進入主機/root/.ssh目錄下(此目錄如果不存在,可ssh localhost生成或者自行創(chuàng)建)
? ? ②執(zhí)行?ssh-keygen -t rsa生成密鑰對跟匆,其中异袄,id_rsa是私鑰,id_rsa.pub是公鑰
? ? ③復(fù)制公鑰到備機/root/.ssh目錄下玛臂,假設(shè)命名為key_node1烤蜕,然后執(zhí)行命令追加主機的公鑰到備機認證文件中 cat key_node1 >>?authorized_keys。(>>代表追加寫入垢揩,>代表覆蓋寫入)
2.測試下直接從主機ssh到備機玖绿,如果不需要密碼則連接建立成功敛瓷。gitlab提供的備份命令不包括配置文件的備份叁巨,因此我們需要單獨備份以下配置文件:
? ? ①/etc/gitlab/gitlab.rb(gitlab核心配置文件)
? ? ②/etc/gitlab/gitlab-secrets.json(數(shù)據(jù)庫需要的secrets文件)
? ? ③/var/opt/gitlab/nginx/conf(nginx配置)
? ? ④/etc/postfix/main.cf(如果不使用postfix則不需要)
3.假設(shè)gitlab.rb中設(shè)置的備份目錄為/var/opt/gitlab/backups,我們要做到定期備份呐籽,可以在這個目錄下以時間命名作為備份文件夾锋勺,編寫類似如下腳本:
? ??LocalDir=/var/opt/gitlab/backups
? ??RemoteDir=$LocalBackDir/remote
? ??bakname=$(date -d "today" +"%Y%m%d_%H%M%S")
????BakDir=$LocalDir/$bakname
????mkdir $BakDir
? ? 此處建議可以echo一些日志記錄到某個日志文件,echo "gitlab backup begin" >> xxx.log
? ? cp?/etc/gitlab/gitlab.rb?$BakDir (其他配置同理)
? ??gitlab-backup create STRATEGY=copy(備份策略默認為直接壓縮狡蝶,此時如果push代碼會導(dǎo)致備份失敗庶橱,所以我這里選用復(fù)制策略,對空間有一定要求贪惹,但是可以保證不會發(fā)生提交代碼導(dǎo)致的備份失敗苏章,另外,12.1以前的gitlab版本奏瞬,備份命令為gitlab-rake gitlab:backup:create)
? ? 假設(shè)我們每天生成一個備份枫绅,那么此時只需要將最新的備份復(fù)制到BakDir中,我們以查找30分? ? ? ? ? 鐘內(nèi)生成的備份文件為例硼端,target=`find $LocalBackDir -type f -mmin -30 -name '*.tar'`
? ? mv -bfu $target $BakDir 移動文件
? ??scp -r -P 22 $BakDir root@{備機ip}:{備機端口}
4.crontab -e 將腳本掛載到定時任務(wù)中并淋。
5.備機恢復(fù)時,將遠程備份目錄下最新的文件夾下的配置文件替換到對應(yīng)目錄下珍昨,然后復(fù)制gitlab生成的備份tar包到gitlab.rb中配置的備份目錄中县耽,執(zhí)行itlab-backup restore?BACKUP={tar包版本號句喷,假如tar包名字123_gitlab_backup.tar,則版本號為123}兔毙,12.1以前的gitlab版本唾琼,restore命令為gitlab-rake gitlab:backup:restore。執(zhí)行完成后澎剥,gitlab-ctl reconfigure 然后 gitlab-ctl restart 即可
6.gitlab服務(wù)端遷移后父叙,由于ip地址發(fā)生了變化,在客戶端需要刪除C:/Users/xxx/.ssh/known_hosts文件否則無法拉取提交代碼肴裙。
四.gitlab重裝升級過程中的一些坑及對應(yīng)的解決辦法
1.gitlab-ctl reconfigure 執(zhí)行到redis部分卡住趾唱,CTRL+C終止后,執(zhí)行 sudo systemctl restart gitlab-runsvdir 再重新 reconfigure蜻懦。
2.gitlab-ctl reconfigure報錯?
sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.shmall.conf": No such file or directory甜癞,修改unicorn端口,再重新 reconfigure會生成對應(yīng)的文件宛乃。
3.gitlab-ctl reconfigure報錯
--sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.sem.conf": No such file or directory
--sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-net.core.somaxconn.conf": No such file or directory
丟失了這兩個配置文件悠咱,進入/etc/sysctl.d目錄,ll以后發(fā)現(xiàn)征炼,這兩個文件都是通過鏈接到/opt/gitlab/embedded/etc/目錄下析既,這里沒有找到好的辦法,我是從備機上復(fù)制這兩個文件到上面的位置谆奥,重新 reconfigure 即可眼坏,應(yīng)該是重裝過程中操作失誤導(dǎo)致的文件丟失。
五.搭建好gitlab服務(wù)端后酸些,客戶端配置如下
1.下載gitbash宰译,查看是否已配置公鑰 cat ~/.ssh/id_rsa.pub
2.如果沒有,生成密鑰 ssh-keygen -t rsa -C "xxx@xxx.com"
3.登陸gitlab魄懂,在settings中添加密鑰沿侈,密鑰通過 cat ~/.ssh/id_rsa.pub 查看
4.配置 git config --global user.name "xxx" git config --global user.email "xxx@xxx.com"
5.在目標文件夾下打開gitbash,git clone xxx 克隆項目