Gitlab服務(wù)搭建,遠(yuǎn)程備份以及還原

一.首先在linux服務(wù)器上安裝Gitlab服務(wù)需要依賴的組件,步驟如下:

? ? ①yum install policycoreutils-python

? ? ②如果使用默認(rèn)的postfix發(fā)送郵件,執(zhí)行后面的步驟,如果使用自己的smtp服務(wù)器來(lái)發(fā)送可以直接進(jìn)入gitlab安裝步驟。

? ? ③yum install postfix 安裝postfix

? ? ④systemctl enable postfix 啟動(dòng)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ù)字啟動(dòng)服務(wù)會(huì)失敗,需要修改hostname,執(zhí)行hostnamectl set-hostname localhost.localdomain 修改hostname

? ? ⑧systemctl start postfix 啟動(dòng)郵件服務(wù)postfix

二.接下來(lái)進(jìn)入gitlab安裝:

1.下載對(duì)應(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命令進(jìn)行安裝

2.安裝完成后,會(huì)提示修改配置文件,vim /etc/gitlab/gitlab.rb 進(jìn)行編輯,按需修改其中的屬性,external_url設(shè)置為域名,如果設(shè)置了端口,不能和unicorn['port']重復(fù),git_data_dirs為倉(cāng)庫(kù)存放目錄,gitlab_rails['gitlab_shell_ssh_port']是ssh端口,gitlab_rails['backup_path']為備份文件路徑;其他的屬性可以查閱說(shuō)明文檔。

3.修改完配置后,執(zhí)行g(shù)itlab-ctl reconfigure 重載配置,然后重啟?gitlab-ctl restart。此時(shí)訪問(wèn)gitlab(剛才配置的external_url地址),第一次會(huì)提示修改root密碼,按要求修改即可。如果出現(xiàn)502錯(cuò)誤,通常是配置文件錯(cuò)誤,如端口沖突,reconfigure未成功等,或者是機(jī)器內(nèi)存不足導(dǎo)致的。

4.如果要測(cè)試郵件發(fā)送是否OK,可以執(zhí)行g(shù)itlab-rails console進(jìn)入gitlab控制臺(tái),然后輸入Notify.test_email("xxx@xxx.com","test","test").deliver_now 進(jìn)行發(fā)送測(cè)試是否收到郵件。

5.常見(jiàn)的gitlab-ctl命令如下:

? ??gitlab-ctl start 啟動(dòng)服務(wù)

????gitlab-ctl reconfigure 重新編譯配置

????gitlab-ctl restart 重啟gitlab服務(wù)

????gitlab-ctl status 查看運(yùn)行狀態(tài)

????gitlab-ctl stop 停止服務(wù)

????gitlab-ctl tail 查看運(yùn)行日志

6.如果需要升級(jí)gitlab版本,下載對(duì)應(yīng)的rpm包,執(zhí)行rpm -Uvh gitlab-ce-XXX.rpm,不同的大版本之間通常會(huì)提示錯(cuò)誤無(wú)法升級(jí),此時(shí)需要按照提示先升級(jí)到當(dāng)前大版本的最后一個(gè)小版本,再進(jìn)行升級(jí)。gitlab重裝與升級(jí)有許多坑(后面會(huì)說(shuō)到),非必要時(shí)不建議進(jìn)行升級(jí)。

三.企業(yè)項(xiàng)目代碼倉(cāng)庫(kù)通常需要進(jìn)行數(shù)據(jù)備份,gitlab-ce本身并不支持集群方案,官方推薦的備份方案是通過(guò)gitlab自帶的備份命令配合rsync來(lái)實(shí)現(xiàn)備份與恢復(fù)的。這里我使用定時(shí)任務(wù)調(diào)用gitlab自帶的備份命令加上scp遠(yuǎn)程傳輸?shù)絺浞輽C(jī)器上,當(dāng)主機(jī)宕機(jī)或者硬盤損壞時(shí),可以啟用備機(jī)導(dǎo)入備份文件恢復(fù)服務(wù)的方式,具體操作如下:

1.兩臺(tái)機(jī)器建立免密ssh

? ? ①進(jìn)入主機(jī)/root/.ssh目錄下(此目錄如果不存在,可ssh localhost生成或者自行創(chuàng)建)

? ? ②執(zhí)行?ssh-keygen -t rsa生成密鑰對(duì),其中,id_rsa是私鑰,id_rsa.pub是公鑰

? ? ③復(fù)制公鑰到備機(jī)/root/.ssh目錄下,假設(shè)命名為key_node1,然后執(zhí)行命令追加主機(jī)的公鑰到備機(jī)認(rèn)證文件中 cat key_node1 >>?authorized_keys。(>>代表追加寫入,>代表覆蓋寫入)

2.測(cè)試下直接從主機(jī)ssh到備機(jī),如果不需要密碼則連接建立成功。gitlab提供的備份命令不包括配置文件的備份,因此我們需要單獨(dú)備份以下配置文件:

? ? ①/etc/gitlab/gitlab.rb(gitlab核心配置文件)

? ? ②/etc/gitlab/gitlab-secrets.json(數(shù)據(jù)庫(kù)需要的secrets文件)

? ? ③/var/opt/gitlab/nginx/conf(nginx配置)

? ? ④/etc/postfix/main.cf(如果不使用postfix則不需要)

3.假設(shè)gitlab.rb中設(shè)置的備份目錄為/var/opt/gitlab/backups,我們要做到定期備份,可以在這個(gè)目錄下以時(shí)間命名作為備份文件夾,編寫類似如下腳本:

? ??LocalDir=/var/opt/gitlab/backups

? ??RemoteDir=$LocalBackDir/remote

? ??bakname=$(date -d "today" +"%Y%m%d_%H%M%S")

????BakDir=$LocalDir/$bakname

????mkdir $BakDir

? ? 此處建議可以echo一些日志記錄到某個(gè)日志文件,echo "gitlab backup begin" >> xxx.log

? ? cp?/etc/gitlab/gitlab.rb?$BakDir (其他配置同理)

? ??gitlab-backup create STRATEGY=copy(備份策略默認(rèn)為直接壓縮,此時(shí)如果push代碼會(huì)導(dǎo)致備份失敗,所以我這里選用復(fù)制策略,對(duì)空間有一定要求,但是可以保證不會(huì)發(fā)生提交代碼導(dǎo)致的備份失敗,另外,12.1以前的gitlab版本,備份命令為gitlab-rake gitlab:backup:create

? ? 假設(shè)我們每天生成一個(gè)備份,那么此時(shí)只需要將最新的備份復(fù)制到BakDir中,我們以查找30分? ? ? ? ? 鐘內(nèi)生成的備份文件為例,target=`find $LocalBackDir -type f -mmin -30 -name '*.tar'`

? ? mv -bfu $target $BakDir 移動(dòng)文件

? ??scp -r -P 22 $BakDir root@{備機(jī)ip}:{備機(jī)端口}

4.crontab -e 將腳本掛載到定時(shí)任務(wù)中。

5.備機(jī)恢復(fù)時(shí),將遠(yuǎn)程備份目錄下最新的文件夾下的配置文件替換到對(duì)應(yīng)目錄下,然后復(fù)制gitlab生成的備份tar包到gitlab.rb中配置的備份目錄中,執(zhí)行itlab-backup restore?BACKUP={tar包版本號(hào),假如tar包名字123_gitlab_backup.tar,則版本號(hào)為123},12.1以前的gitlab版本,restore命令為gitlab-rake gitlab:backup:restore。執(zhí)行完成后,gitlab-ctl reconfigure 然后 gitlab-ctl restart 即可

6.gitlab服務(wù)端遷移后,由于ip地址發(fā)生了變化,在客戶端需要?jiǎng)h除C:/Users/xxx/.ssh/known_hosts文件否則無(wú)法拉取提交代碼。

四.gitlab重裝升級(jí)過(guò)程中的一些坑及對(duì)應(yīng)的解決辦法

1.gitlab-ctl reconfigure 執(zhí)行到redis部分卡住,CTRL+C終止后,執(zhí)行 sudo systemctl restart gitlab-runsvdir 再重新 reconfigure。

2.gitlab-ctl reconfigure報(bào)錯(cuò)?

sysctl: cannot open "/etc/sysctl.d/90-omnibus-gitlab-kernel.shmall.conf": No such file or directory,修改unicorn端口,再重新 reconfigure會(huì)生成對(duì)應(yīng)的文件。

3.gitlab-ctl reconfigure報(bào)錯(cuò)

--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

丟失了這兩個(gè)配置文件,進(jìn)入/etc/sysctl.d目錄,ll以后發(fā)現(xiàn),這兩個(gè)文件都是通過(guò)鏈接到/opt/gitlab/embedded/etc/目錄下,這里沒(méi)有找到好的辦法,我是從備機(jī)上復(fù)制這兩個(gè)文件到上面的位置,重新 reconfigure 即可,應(yīng)該是重裝過(guò)程中操作失誤導(dǎo)致的文件丟失。

五.搭建好gitlab服務(wù)端后,客戶端配置如下

1.下載gitbash,查看是否已配置公鑰 cat ~/.ssh/id_rsa.pub

2.如果沒(méi)有,生成密鑰 ssh-keygen -t rsa -C "xxx@xxx.com"

3.登陸gitlab,在settings中添加密鑰,密鑰通過(guò) cat ~/.ssh/id_rsa.pub 查看

4.配置 git config --global user.name "xxx" git config --global user.email "xxx@xxx.com"

5.在目標(biāo)文件夾下打開gitbash,git clone xxx 克隆項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容