
原文地址[1]歡迎star
需求1.在新服務(wù)器上安裝并搭建好gitlab2.手動+自動將舊服務(wù)器上的gitlab備份3.手動+自動將gitlab備份包scp到新服務(wù)器上4.手動+自動恢復(fù)新服務(wù)器上的gitlab備份包5.在新舊服務(wù)器上自動刪除過期備份包 前提1.版本 ·gitlab-ce是社區(qū)版·gitlab-ee是企業(yè)版 1.方案 ·定時器執(zhí)行shell腳本 1.工具 ·crontab[2]·shell[3]·expect[4] 1.操作 ·如果不是root用戶請在所有命令前+sudo·新老服務(wù)器gitlab版本保持一致·舊服務(wù)器用的是gitlab-ee_10.7.2-ee.0_amd64.deb 版本的gitlab,示例也選擇這個企業(yè)版 1.backups目錄的只有root才能操作的,但是gitlab恢復(fù)操作使用者是git 所以將新舊服務(wù)器上/var/opt/gitlab/backups 文件夾設(shè)置為可讀可寫可執(zhí)行,方便操作 現(xiàn)在開始,我會一步一步操作,帶領(lǐng)大家一條龍從安裝到自動化備份,最終實現(xiàn)再也不要被gitlab備份困擾的問題且可以專心敲代碼的夢想 在新服務(wù)器上安裝并搭建好gitlab1.安裝方式一:官網(wǎng)安裝(慢)2.安裝方式二:國內(nèi)鏡像安裝(快) 官網(wǎng)安裝gitlab請戳gitlab的官方網(wǎng)站[5] 
由于的我系統(tǒng)是ubuntu,所以我選擇ubuntu 安裝步驟就出現(xiàn)在下面了 1. 安裝和配置必須的依賴 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates
2. 安裝Postfix 來發(fā)送通知郵件。如果你想要用另一個方式去發(fā)送郵件,請在gitlab安裝好后,下一步就是配置一個額外的SMTP服務(wù)。 sudo apt-get install -y postfix
在安裝Postfix 時一個配置屏幕會出現(xiàn)。選擇Internet Site 并且回車。mail name 為你的服務(wù)器的DNS并且回車。如果額外的屏幕出現(xiàn),繼續(xù)接受默認配置并且回車。 3. 添加gitlab安裝包倉庫并安裝 添加gitlab包倉庫 curl https://packages./install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
4. 安裝gitlab包。選擇https://gitlab. 更改為要訪問gitlab實例的url。安裝將自動配置并啟動gitlab到url。 為了https:// gitlab將自動請求帶有Let's Encrypt 的證書,這需要入棧http訪問和有效的主機名。 sudo EXTERNAL_URL='https://gitlab.' apt-get install gitlab-ee
此時你會發(fā)現(xiàn)慢的要死,速度是100k/s,畢竟兩者隔了一堵墻,那就換國內(nèi)鏡像安裝吧 清華鏡像安裝gitlab既然官網(wǎng)太慢,那么我們選擇清華鏡像安裝gitlab 清華大學開源軟件鏡像站[6] 
Gitlab Community Edition 鏡像使用幫助[7] 里面有各種版本 備份需要和原服務(wù)器的gitlab版本一致,否則無法安裝 在搜索欄里搜索gitlab,就會跳出相關(guān)gitlab的版本 gitlab-ee_10.7.2-ee.0_amd64.deb 版本在/ubuntu/pool/bionic/main/g/gitlab-ee/ 下
或者是直接訪問到gitlab-ee[8]版本下, 直接訪問到gitlab-ce[9]版本下。 1. 先更新倉庫 2. 加入gitlab的GPG公鑰 curl https://packages./gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
3. 寫進再選擇你的 Debian/Ubuntu 版本 文本框中內(nèi)容寫進/etc/apt/sources.list.d/gitlab-ce.list , 我是寫進/etc/apt/sources.list.d/gitlab-ee.list , 寫deb https://mirrors.tuna./gitlab-ee/ubuntu xenial main 1.更新apt倉庫,安裝 gitlab-ee sudo apt-get update sudo apt-get install gitlab-ee=10.7.2-ee.0

下載gitlab-ee_10.7.2-ee.0 
這樣就安裝了10.7.2-ee.0版本了。 配置并啟動gitlabsudo gitlab-ctl reconfigure

每當修改了GitLab的配置之后,都要執(zhí)行如下的命令,重啟配好的配置并重啟GitLab,然后查看GitLab的狀態(tài) sudo gitlab-ctl reconfigure sudo gitlab-ctl restart sudo gitlab-ctl status
打開瀏覽器,默認是訪問http://localhost 即可。如果改了ip和端口,則訪問http://ip:端口 既可 
這就是新搭建的gitlab 安裝gitlab出現(xiàn)的問題斷口被占用端口80以及端口8080分別被Ubuntu服務(wù)器上的Apache、Tomcat和nginx等服務(wù)所占用。 我的做法是修改 /etc/gitlab/gitlab.rb 文件 vim /etc/gitlab/gitlab.rb
修改其中的external_url 

手動將舊服務(wù)器上的gitlab備份修改gitlab備份地址備份地址默認是在var/opt/gitlab/backups 1.打開原gitlab服務(wù)器終端,通過修改gitlab.rb 配置文件來修改默認存放備份文件的目錄 sudo vim /etc/gitlab/gitlab.rb
1. 默認如下 gitlab_rails['backup_path'] = '/var/opt/gitlab/backups'
2. 將backup_path 改為自定義的目錄 gitlab_rails['backup_path'] = '/data/gitlab/backups'

1.修改后重啟配置文件 sudo gitlab-ctl reconfigure
我的示例里是沒有改,備份的時間倒是改成了7天 /etc/gitlab/gitlab.rb external_url 'http://192.168.3.2' unicorn['port'] = 10086 gitlab_rails['manage_backup_path']=true gitlab_rails['backup_path']='var/opt/gitlab/backups' gitlab_rails['backup_archive_permissions']=0644 gitlab_rails['backup_keep_time']=604800
重啟配置出現(xiàn)的問題
出現(xiàn)這個radis的問題,不知道如何解決,有大佬知道,求告知,但是不影響備份 
這個問題是由于,我執(zhí)行了sudo chmod -R 777 gitlab 的命令,將gitlab的子目錄下的所有文件都賦予了可讀可寫可執(zhí)行的權(quán)限 解決方式 sudo chmod -R 2770 /var/opt/gitlab/git-data/repositories
gitlab開始備份通過命令來備份原服務(wù)器上gitlab的數(shù)據(jù)。 sudo gitlab-rake gitlab:backup:create

備份的文件會放在var/opt/gitlab/backups 下,名稱類似于1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar ,這個壓縮包包含了gitlab備份的時間和版本。 可以看到backups下面的備份包 
手動將gitlab備份包scp到新服務(wù)器上通過scp命令 將新服務(wù)器上的backups權(quán)限升到777 不會請戳Linux scp命令[1] scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar gitlab-backup@192.168.3.113:/var/opt/gitlab/backups
在新服務(wù)器中/var/opt/gitlab/backups 下就出現(xiàn)了新的備份包 重啟發(fā)現(xiàn)所有備份包和腳本都清除的問題之前由于backups權(quán)限問題,我將備份包發(fā)送到/tmp目錄下, 重啟電腦時,linux自動清除/tmp文件夾下的內(nèi)容 原因是tmp是一個特殊的文件夾,系統(tǒng)會自動清理,所以大家最好不要把文件放到這個地方,被清理了就不好了。 手動恢復(fù)新服務(wù)器上的gitlab備份包修改備份文件權(quán)限如果沒有修改backups目錄的權(quán)限,會出現(xiàn)下面問題 
貿(mào)然恢復(fù),就會出現(xiàn)以下錯 
正確操作是降低backups操作權(quán)限
sudo chown git backups/ sudo chmod 700 backups/
不要降低權(quán)限,不然文件夾進不去 操作是降低backups操作權(quán)限 為了避免gitlab恢復(fù)時,由于權(quán)限,而產(chǎn)生不能解壓的問題,我們就將備份文件權(quán)限改為777(可讀可寫) chmod 777 1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar
停止相關(guān)數(shù)據(jù)連接服務(wù)sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq
從備份文件恢復(fù)gitlabBACKUP等于gitlab版本號,_gitlab_backup.tar 是會默認添加的 sudo gitlab-rake gitlab:backup:restore BACKUP=1558509153_2019_05_22_10.7.2-ee
安裝開始,一共有兩個交互 1.是否丟掉之前的倉庫 
1.是否丟掉之前的key文件 
3 安裝成功 
開啟gitlab,并訪問 打開瀏覽器,訪問gitlab 
自動將舊服務(wù)器上的gitlab備份舊服務(wù)器上的/var/opt/gitlab 目錄 
定時備份 添加定時任務(wù),每天凌晨6點執(zhí)行g(shù)itlab備份 # 仇飛鴻編輯于2019-5-30 添加定時任務(wù),每天6點,自動執(zhí)行將舊服務(wù)器上的gitlab備份操作 0 6 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
編寫完 /etc/crontab 文件之后,需要重新啟動cron服務(wù) #重新加載cron配置文件 sudo /usr/sbin/service cron reload #重啟cron服務(wù) sudo /usr/sbin/service cron restart
注意:6之前是0,而不是* 最后需要重新啟動cron服務(wù) 設(shè)置備份過期時間就算是每天6點備份,一年下來也有356份,那也不得了了 那就可以設(shè)置備份過期時間,備份目錄下只保存還沒過期的壓縮包,大大減輕了服務(wù)器的壓力 通過編輯/etc/gitlab/gitlab.rb 配置文件,找到gitlab_rails[‘backup_keep_time’] sudo vim /etc/gitlab/gitlab.rb
將gitlab_rails[‘backup_keep_time’] 改為gitlab_rails[‘backup_keep_time’]=604800 我設(shè)置了7天內(nèi)不過期 
自動將gitlab備份包scp到新服務(wù)器上新舊服務(wù)器配對密鑰由于scp總是出現(xiàn)交互,提示輸入密碼 方案一:配對密碼,取消密碼 方案二:expect自動交互 這里我們采取方案一 生成密鑰對在舊服務(wù)器上,輸入命令 
1.生成的過程中提示輸入密鑰對保存位置,直接回車,接受默認值就行了。2.因為之前已經(jīng)有/root/.ssh/id_rsa 文件存在,因此提示你是否覆蓋,輸入y表示覆蓋3.接著會提示輸入一個密碼,直接回車,讓它空著。當然,也可以輸入一個密碼。4.接著輸入確認密碼,輸入完之后,回車密鑰對就生成完了。
在/root/.ssh下生成id_rsa 和 id_rsa.pub 兩個文件, 其中公共密鑰保存在 /root/.ssh/id_rsa.pub,私有密鑰保存在/root/.ssh/id_rsa。
cd /home/gushenxing/.ssh/

在舊服務(wù)器上cp生成rsa公鑰證書給新服務(wù)器
然后在/root/.ssh下復(fù)制備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到新服務(wù)器。 執(zhí)行cp命令復(fù)制 cp id_rsa.pub id_rsa.pub.A

執(zhí)行scp命令傳輸 scp id_rsa.pub.A gitlab-backup@192.168.3.113:/home/gitlab-backup/.ssh

進入新服務(wù)器查看公鑰 
這里使用scp命令需要輸入密碼,當我們把下面的第三步執(zhí)行完畢之后,以后舊服務(wù)器使用scp命令復(fù)制文件到新服務(wù)器的話,就不需要再次輸入密碼。 密鑰配對創(chuàng)建authorized_keys文件當?shù)诙綄⑴f服務(wù)器上的id_rsa.pub.A 文件copy到新服務(wù)器的目錄/root/.ssh 
我們在新服務(wù)器的/root/.ssh下創(chuàng)建authorized_keys文件,使用如下命令 將id_rsa.pub.A文件內(nèi)容追加到authorized_keys 文件中cat id_rsa.pub.A >> authorized_keys

打開authorized_keys 查看 
修改authorized_keys文件的權(quán)限修改authorized_keys文件的權(quán)限 authorized_keys文件的權(quán)限很重要,如果設(shè)置為777,那么登錄的時候,還是需要提供密碼的。
這個權(quán)限足夠,越低越好 -rw-rw-r-- 1 gitlab-backup gitlab-backup 403 7月 19 10:53 authorized_keys
或者是這個權(quán)限 
測試在舊服務(wù)器上使用scp命令復(fù)制文件到新服務(wù)器上是否還需要密碼 scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar gitlab-backup@192.168.3.113:/var/opt/gitlab/backups
在新服務(wù)器上,再次使用剛才的命令,發(fā)現(xiàn)已經(jīng)可以不需要輸入密 
創(chuàng)建Shell定時遠程備份腳本在舊服務(wù)器上創(chuàng)建定時遠程備份腳本創(chuàng)建自動scp的腳本和日志目錄 cd /var/opt/gitlab touch auto_scp.sh cd /backups sudo mkdir log
因為到時候,我們會將該定時遠程備份腳本auto_scp.sh執(zhí)行的時間,放到Gitlab自動備份腳本auto_scp.sh之后的一小時之內(nèi),因此我們只需要每次執(zhí)行遠程備份腳本auto_scp.sh的時候,只需要cp一個小時之內(nèi)的生成的新的Gitlab備份文件。 auto_scp.sh
#!/bin/bash
# 新舊服務(wù)器 gitlab備份文件存放路徑 BACKUPDIR=/var/opt/gitlab/backups
# 遠程備份服務(wù)器 登錄賬戶 RemoteUser=gitlab-backup
# 遠程備份服務(wù)器 IP地址 RemoteIP=192.168.3.113
#當前系統(tǒng)日期 DATE=`date '+%Y-%m-%d-%H-%M-%S'`
#Log存放路徑 LogFile=$BACKUPDIR/log/$DATE.log
#查找本地備份目錄下時間為1天之內(nèi)并且后綴為.tar的gitlab備份文件 BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')
#新建日志文件 touch $LogFile
#追加日志到日志文件 echo '---------------------------------開始-----------------------------------' >> $LogFile
echo 'gitlab auto backup to remote server, start at $DATE' >> $LogFile
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,打印出每次scp的文件名 echo 'the file to scp to remote server is $BACKUPFILE_SEND_TO_REMOTE' >> $LogFile
#備份到遠程服務(wù)器 scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$BACKUPDIR echo '---------------------------------分割線---------------------------------' >> $LogFile
echo 'remote server is $RemoteUser@$RemoteIP:$BACKUPDIR' >> $LogFile
#追加日志到日志文件 echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile ~

測試由于auto_scp.sh執(zhí)行權(quán)限是root,所以還得要交互密 
降低auto_scp.sh和log的權(quán)限 sudo chown gushenxing:gushenxing auto_scp.sh sudo chown gushenxing:gushenxing log
1. 執(zhí)行命令,不要sudo執(zhí)行 此時不需要密碼 2. 查看日志文件 
3.
發(fā)現(xiàn)新服務(wù)器上已經(jīng)出現(xiàn)了備份 
往crontab添加定時任務(wù),自動執(zhí)行scp腳本添加下面命令 # 仇飛鴻編輯于2019-6-04 添加定時任務(wù),每天7點,自動執(zhí)行將gitlab備份包scp到新服務(wù) 器上的操作 0 7 * * * gushenxing bash /var/opt/gitlab/auto_scp.sh

編寫完 /etc/crontab 文件之后,需要重新啟動cron服務(wù) #重新加載cron配置文件 sudo /usr/sbin/service cron reload #重啟cron服務(wù) sudo /usr/sbin/service cron restart
舊服務(wù)器上的操作已結(jié)束,完成了自動將舊服務(wù)器上的gitlab備份和自動將gitlab備份包scp到新服務(wù)器上 自動恢復(fù)新服務(wù)器上的gitlab備份包自動刪除過期備份包腳本cd /var/opt/gitlab sudo touch auto_remove_backup.sh
填寫腳本代碼 #!/bin/bash
#遠程備份服務(wù)器gitlab備份文件存放路徑 GITLABDIR=/var/opt/gitlab/backups
# 查找遠程備份路徑下,超過7天且文件后綴為.tar的gitlab備份文件,然后刪除 find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;
往crontab添加定時任務(wù),自動執(zhí)行刪除備份包腳本添加下面命令 # 仇飛鴻編輯于2019-5-30 添加定時任務(wù),每天上午8點,自動執(zhí)行刪除過期的gitlab備份文件操作 0 8 * * * root bash /var/opt/gitlab/auto_remove_backup.sh
編寫完 /etc/crontab 文件之后,需要重新啟動cron服務(wù) #重新加載cron配置文件 sudo /usr/sbin/service cron reload #重啟cron服務(wù) sudo /usr/sbin/service cron restart
自動恢復(fù)腳本cd /var/opt/gitlab sudo touch auto_recovery_backup.sh
#!/bin/bash
#備份文件所在目錄 REMOTEDIRBACKUPS=/var/opt/gitlab/backups
#找到當日生成的備份文件 BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')
#當前系統(tǒng)日期 DATE=`date '+%Y-%m-%d-%H-%M-%S'`
#Log存放路徑 LogFile=$REMOTEDIRBACKUPS/log/$DATE.log
#新建日志文件 sudo touch $LogFile
#追加日志到日志目錄 echo '---------------------------------開始-----------------------------------' >> $LogFile
echo 'gitlab auto recovery, start at $DATE' >> $LogFile
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,打印出當日生成的備份文件 echo 'backup files generated on that day is $BACKUPFILE' >> $LogFile
#截取出主要文件名 FILE=$(echo ${BACKUPFILE#*backups/})
#截取恢復(fù)文件名 RESTOREFILE=$(echo ${FILE%_gitlab*})
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,打印出備份文件復(fù)制目標目錄 echo 'backup files generated scp to $REMOTEDIRBACKUPS' >> $LogFile
#進入到目標目錄 cd $REMOTEDIRBACKUPS
#備份文件權(quán)限修改為可讀可寫可執(zhí)行 chmod 777 $FILE
#停止相關(guān)數(shù)據(jù)連接服務(wù) sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq
#自動化交互,從備份文件恢復(fù)gitlab sudo /usr/bin/expect -c ' set timeout -1 spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILE expect { \'yes/no\' {set timeout -1; send \'yes\n\';exp_continue;} \'yes/no\' {set timeout -1; send \'yes\n\'} }
expect eof' #開啟gitlab sudo gitlab-ctl start
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,從備份文件恢復(fù)gitlab echo 'recovery was successful' >> $LogFile
#追加日志到日志目錄 echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile
其中加入自動交互expect 測試 執(zhí)行結(jié)果 

往crontab添加定時任務(wù),自動執(zhí)行恢復(fù)備份包腳本 在crontab中加入此定時任務(wù) # 仇飛鴻編輯于2019-6-3 添加定時任務(wù),每天上午9點,自動執(zhí)行從備份包中恢復(fù)gitlab操作 0 9 * * * root bash /var/opt/gitlab/auto_recovery_backup.sh

編寫完 /etc/crontab 文件之后,需要重新啟動cron服務(wù) #重新加載cron配置文件 sudo /usr/sbin/service cron reload #重啟cron服務(wù) sudo /usr/sbin/service cron restart
完整版腳本舊服務(wù)器上的crontab腳本# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) # 仇飛鴻編輯于2019-5-30 添加定時任務(wù),每天6點,自動執(zhí)行將舊服務(wù)器上的gitlab備份>操作 0 6 * * * root /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
# 仇飛鴻編輯于2019-6-04 添加定時任務(wù),每天7點,自動執(zhí)行將gitlab備份包scp到新服務(wù) 器上的操作 0 7 * * * gushenxing bash /var/opt/gitlab/auto_scp.sh
#
新服務(wù)器上的crontab腳本# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do.
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
# 仇飛鴻編輯于2019-5-30 添加定時任務(wù),每天上午8點,自動執(zhí)行刪除過期的gitlab備份文 件操作 0 8 * * * root bash /var/opt/gitlab/auto_remove_backup.sh
# 仇飛鴻編輯于2019-6-3 添加定時任務(wù),每天上午9點,自動執(zhí)行從備份包中恢復(fù)gitlab操>作 0 9 * * * root bash /var/opt/gitlab/auto_recovery_backup.sh
# 仇飛鴻編輯于2019-6-12 添加定時任務(wù),每天上午10點,自動刪除var/opt/gitlab/backups/tmp 0 10 * * * root rm -rf /var/opt/gitlab/backups/tmp
自動將gitlab備份包scp到新服務(wù)器腳本auto_scp.sh #!/bin/bash
# 新舊服務(wù)器 gitlab備份文件存放路徑
BACKUPDIR=/var/opt/gitlab/backups
# 遠程備份服務(wù)器 登錄賬戶
RemoteUser=gitlab-backup
# 遠程備份服務(wù)器 IP地址
RemoteIP=192.168.3.113
#當前系統(tǒng)日期
DATE=`date '+%Y-%m-%d-%H-%M-%S'`
#Log存放路徑
LogFile=$BACKUPDIR/log/$DATE.log
#查找本地備份目錄下時間為1天之內(nèi)并且后綴為.tar的gitlab備份文件
BACKUPFILE_SEND_TO_REMOTE=$(find $BACKUPDIR -type f -mmin -1440 -name '*.tar')
#新建日志文件
touch $LogFile
#追加日志到日志文件
echo '---------------------------------開始-----------------------------------' >> $LogFile
echo 'gitlab auto backup to remote server, start at $DATE' >> $LogFile
echo '---------------------------------分割線---------------------------------' >> $LogFile
echo 'remote server is $RemoteUser@$RemoteIP:$BACKUPDIR' >> $LogFile
#追加日志到日志文件
echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile
自動執(zhí)行刪除過期的gitlab備份文件腳本auto_remove_backup.sh #!/bin/bash
#遠程備份服務(wù)器gitlab備份文件存放路徑 GITLABDIR=/var/opt/gitlab/backups
# 查找遠程備份路徑下,超過7天且文件后綴為.tar的gitlab備份文件,然后刪除 find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;
自動執(zhí)行從備份包中恢復(fù)gitlab腳本auto_recovery_backup.sh #!/bin/bash
#備份文件所在目錄
REMOTEDIRBACKUPS=/var/opt/gitlab/backups
#找到當日生成的備份文件
BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')
#當前系統(tǒng)日期
DATE=`date '+%Y-%m-%d-%H-%M-%S'`
#Log存放路徑
LogFile=$REMOTEDIRBACKUPS/log/$DATE.log
#新建日志文件
sudo touch $LogFile
#追加日志到日志目錄
echo '---------------------------------開始-----------------------------------' >> $LogFile
echo 'gitlab auto recovery, start at $DATE' >> $LogFile
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,打印出當日生成的備份文件
echo 'backup files generated on that day is $BACKUPFILE' >> $LogFile
#截取出主要文件名
FILE=$(echo ${BACKUPFILE#*backups/})
#截取恢復(fù)文件名
RESTOREFILE=$(echo ${FILE%_gitlab*})
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,打印出備份文件復(fù)制目標目錄
echo 'backup files generated scp to $REMOTEDIRBACKUPS' >> $LogFile
#進入到目標目錄
cd $REMOTEDIRBACKUPS
#備份文件權(quán)限修改為可讀可寫可執(zhí)行
chmod 777 $FILE
#停止相關(guān)數(shù)據(jù)連接服務(wù)
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
#自動化交互,從備份文件恢復(fù)gitlab
sudo /usr/bin/expect -c '
set timeout -1
spawn sudo gitlab-rake gitlab:backup:restore BACKUP=$RESTOREFILE
expect {
\'yes/no\' {set timeout -1; send \'yes\n\';exp_continue;}
\'yes/no\' {set timeout -1; send \'yes\n\'}
}
expect eof'
#開啟gitlab
sudo gitlab-ctl start
echo '---------------------------------分割線---------------------------------' >> $LogFile
#輸出日志,從備份文件恢復(fù)gitlab
echo 'recovery was successful' >> $LogFile
#追加日志到日志目錄
echo '---------------------------------結(jié)束-----------------------------------' >> $LogFile
參考文獻gitlab官網(wǎng)[2] ubuntu16.04中g(shù)itlab安裝[3] gitlab自動備份[4] 【git學習】在CenterOS系統(tǒng)上恢復(fù)GitLab時出現(xiàn)錯誤:tar: 由于前次錯誤,將以上次的錯誤狀態(tài)退出 unpacking backup failed[5] 如何查看 GitLab 版本號[6] Linux上Gitlab卸載[7] git學習------> Gitlab如何進行備份恢復(fù)與遷移?[8] 【git學習】在CenterOS系統(tǒng)上安裝GitLab并自定義域名訪問GitLab管理頁面[9] linux權(quán)限補充:rwt rwT rws rwS 特殊權(quán)限[10] References[1] Linux scp命令: https://www.runoob.com/linux/linux-comm-scp.html
[2] gitlab官網(wǎng): https://about./install/#ubuntu
[3] ubuntu16.04中g(shù)itlab安裝: https://blog.csdn.net/weixin_38883338/article/details/82153402
[4] gitlab自動備份: https://www.jianshu.com/p/a176789fef21
[5] 【git學習】在CenterOS系統(tǒng)上恢復(fù)GitLab時出現(xiàn)錯誤:tar: 由于前次錯誤,將以上次的錯誤狀態(tài)退出 unpacking backup failed: https://www.jianshu.com/p/8a287f31a646
[6] 如何查看 GitLab 版本號: https://blog.csdn.net/wo18237095579/article/details/81106150
[7] Linux上Gitlab卸載: https://www.jianshu.com/p/e2e98c45c244
[8] git學習------> Gitlab如何進行備份恢復(fù)與遷移?: https://blog.csdn.net/ouyang_peng/article/details/77070977
[9] 【git學習】在CenterOS系統(tǒng)上安裝GitLab并自定義域名訪問GitLab管理頁面: https://blog.csdn.net/ouyang_peng/article/details/72903221
[10] linux權(quán)限補充:rwt rwT rws rwS 特殊權(quán)限: https://www.cnblogs.com/qlwy/archive/2011/06/26/2121919.html
|