GitLab從安裝到全自動化備份一條龍

需求

  1. 在新服務器上安裝並搭建好gitlab
  2. 手動+自動將舊服務器上的gitlab備份
  3. 手動+自動將gitlab備份包scp到新服務器上
  4. 手動+自動恢復新服務器上的gitlab備份包
  5. 在新舊服務器上自動刪除過時備份包

前提

  1. 版本
  • gitlab-ce是社區版
  • gitlab-ee是企業版
  1. 方案
  • 定時器執行shell腳本
  1. 工具
  1. 操做
  • 若是不是root用戶請在全部命令前+sudo
  • 新老服務器gitlab版本保持一致
  • 舊服務器用的是gitlab-ee_10.7.2-ee.0_amd64.deb版本的gitlab,示例也選擇這個企業版
  1. backups目錄的只有root才能操做的,可是gitlab恢復操做使用者是git

因此將新舊服務器上/var/opt/gitlab/backups文件夾設置爲可讀可寫可執行,方便操做html

sudo chmod 777 backups/
複製代碼

如今開始,我會一步一步操做,帶領你們一條龍從安裝到自動化備份,最終實現不再要被gitlab備份困擾的問題且能夠專心敲代碼的夢想vue

在新服務器上安裝並搭建好gitlab

  1. 安裝方式一:官網安裝(慢)
  2. 安裝方式二:國內鏡像安裝(快)

官網安裝gitlab

請戳gitlab的官方網站linux

因爲的我係統是ubuntu,因此我選擇ubuntu 安裝步驟就出如今下面了

  1. 安裝和配置必須的依賴
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
複製代碼
  1. 安裝Postfix來發送通知郵件。若是你想要用另外一個方式去發送郵件,請在gitlab安裝好後,下一步就是配置一個額外的SMTP服務。
sudo apt-get install -y postfix
複製代碼

在安裝Postfix時一個配置屏幕會出現。選擇Internet Site而且回車。mail name爲你的服務器的DNS而且回車。若是額外的屏幕出現,繼續接受默認配置而且回車。nginx

  1. 添加gitlab安裝包倉庫並安裝 添加gitlab包倉庫
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
複製代碼
  1. 安裝gitlab包。選擇https://gitlab.example.com更改成要訪問gitlab實例的url。安裝將自動配置並啓動gitlab到url。

爲了https://gitlab將自動請求帶有Let's Encrypt的證書,這須要入棧http訪問和有效的主機名。git

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee
複製代碼

此時你會發現慢的要死,速度是100k/s,畢竟二者隔了一堵牆,那就換國內鏡像安裝吧github

清華鏡像安裝gitlab

既然官網太慢,那麼咱們選擇清華鏡像安裝gitlab面試

清華大學開源軟件鏡像站shell

Gitlab Community Edition 鏡像使用幫助編程

裏面有各類版本ubuntu

備份須要和原服務器的gitlab版本一致,不然沒法安裝

在搜索欄裏搜索gitlab,就會跳出相關gitlab的版本

gitlab-ee_10.7.2-ee.0_amd64.deb版本在/ubuntu/pool/bionic/main/g/gitlab-ee/

或者是直接訪問到gitlab-ee版本下,

直接訪問到gitlab-ce版本下。

  1. 先更新倉庫
sudo apt-get update
複製代碼
  1. 加入gitlab的GPG公鑰
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
複製代碼
  1. 寫進再選擇你的 Debian/Ubuntu 版本

文本框中內容寫進/etc/apt/sources.list.d/gitlab-ce.list,

我是寫進/etc/apt/sources.list.d/gitlab-ee.list,

deb https://mirrors.tuna.tsinghua.edu.cn/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版本了。

配置並啓動gitlab

sudo gitlab-ctl reconfigure
複製代碼

每當修改了GitLab的配置以後,都要執行以下的命令,重啓配好的配置並重啓GitLab,而後查看GitLab的狀態

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-ctl status
複製代碼

打開瀏覽器,默認是訪問http://localhost便可。若是改了ip和端口,則訪問http://ip:端口既可

這就是新搭建的gitlab

安裝gitlab出現的問題

斷口被佔用

端口80以及端口8080分別被Ubuntu服務器上的Apache、Tomcat和nginx等服務所佔用。

個人作法是修改 /etc/gitlab/gitlab.rb 文件

vim /etc/gitlab/gitlab.rb
複製代碼

修改其中的external_url

手動將舊服務器上的gitlab備份

修改gitlab備份地址

備份地址默認是在var/opt/gitlab/backups

  1. 打開原gitlab服務器終端,經過修改gitlab.rb配置文件來修改默認存放備份文件的目錄
sudo vim /etc/gitlab/gitlab.rb
複製代碼
  1. 默認以下
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
複製代碼
  1. backup_path改成自定義的目錄
gitlab_rails['backup_path'] = "/data/gitlab/backups"
複製代碼

  1. 修改後重啓配置文件
sudo gitlab-ctl reconfigure
複製代碼

個人示例裏是沒有改,備份的時間卻是改爲了7天

/etc/gitlab/gitlab.rb

# Change the external_url to the address your users will type in their browser
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
複製代碼

重啓配置出現的問題

出現這個radis的問題,不知道如何解決,有大佬知道,求告知,可是不影響備份

這個問題是因爲,我執行了sudo chmod -R 777 gitlab的命令,將gitlab的子目錄下的全部文件都賦予了可讀可寫可執行的權限

解決方式

sudo chmod -R 2770 /var/opt/gitlab/git-data/repositories
複製代碼

gitlab開始備份

經過命令來備份原服務器上gitlab的數據。

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到新服務器上

經過scp命令

不會請戳Linux scp命令

scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar  gitlab-backup@192.168.3.113:/var/opt/gitlab/backups
複製代碼

在新服務器中/var/opt/gitlab/backups下就出現了新的備份包

重啓發現全部備份包和腳本都清除的問題

以前因爲backups權限問題,我將備份包發送到/tmp目錄下,

重啓電腦時,linux自動清除/tmp文件夾下的內容

緣由是tmp是一個特殊的文件夾,系統會自動清理,因此你們最好不要把文件放到這個地方,被清理了就很差了。

手動恢復新服務器上的gitlab備份包

修改備份文件權限

若是沒有修改backups目錄的權限,會出現下面問題

貿然恢復,就會出現如下錯誤

正確操做是下降backups操做權限

sudo chown git backups/
sudo chmod 700 backups/
複製代碼

爲了不gitlab恢復時,因爲權限,而產生不能解壓的問題,咱們就將備份文件權限改成777(可讀可寫)

chmod 777 1558509153_2019_05_22_10.7.2-ee_gitlab_backup.tar
複製代碼

中止相關數據鏈接服務

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
複製代碼

從備份文件恢復gitlab

BACKUP等於gitlab版本號,_gitlab_backup.tar是會默認添加的

sudo gitlab-rake gitlab:backup:restore BACKUP=1558509153_2019_05_22_10.7.2-ee
複製代碼

安裝開始,一共有兩個交互

  1. 是否丟掉以前的倉庫

2. 是否丟掉以前的key文件

3 安裝成功

開啓gitlab,並訪問

sudo gitlab-ctl start
複製代碼

打開瀏覽器,訪問gitlab

自動將舊服務器上的gitlab備份

舊服務器上的/var/opt/gitlab目錄

定時備份

添加定時任務,天天凌晨6點執行gitlab備份

# 仇飛鴻編輯於2019-5-30 添加定時任務,天天6點,自動執行將舊服務器上的gitlab備份操做
0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
複製代碼

編寫完 /etc/crontab 文件以後,須要從新啓動cron服務

#從新加載cron配置文件
sudo /usr/sbin/service cron reload
#重啓cron服務
sudo /usr/sbin/service cron restart
複製代碼

注意:6以前是0,而不是* 最後須要從新啓動cron服務

設置備份過時時間

就算是天天6點備份,一年下來也有356份,那也不得了了

那就能夠設置備份過時時間,備份目錄下只保存還沒過時的壓縮包,大大減輕了服務器的壓力

經過編輯/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

我設置了7天內不過時

自動將gitlab備份包scp到新服務器上

新舊服務器配對密鑰

因爲scp老是出現交互,提示輸入密碼

方案一:配對密碼,取消密碼

方案二:expect自動交互

這裏咱們採起方案一

生成密鑰對

在舊服務器上,輸入命令

ssh-keygen -t rsa
複製代碼

  1. 生成的過程當中提示輸入密鑰對保存位置,直接回車,接受默認值就好了。
  2. 由於以前已經有/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/
複製代碼

在舊服務器上cp生成rsa公鑰證書給新服務器

而後在/root/.ssh下複製備份一份id_rsa.pub 命名爲 id_rsa.pub.A,以便拷貝到新服務器。

執行cp命令複製

cp id_rsa.pub id_rsa.pub.A
複製代碼

執行scp命令傳輸

scp id_rsa.pub.A gitlab-backup@192.168.3.113:/home/gitlab-backup/.ssh
複製代碼

進入新服務器查看公鑰

這裏使用scp命令須要輸入密碼,當咱們把下面的第三步執行完畢以後,之後舊服務器使用scp命令複製文件到新服務器的話,就不須要再次輸入密碼。

密鑰配對

建立authorized_keys文件

當第二步將舊服務器上的id_rsa.pub.A 文件copy到新服務器的目錄/root/.ssh下

咱們在新服務器的/root/.ssh下建立authorized_keys文件,使用以下命令

touch authorized_keys
複製代碼

將id_rsa.pub.A文件內容追加到authorized_keys 文件中

打開authorized_keys查看

修改authorized_keys文件的權限

修改authorized_keys文件的權限

authorized_keys文件的權限很重要,若是設置爲777,那麼登陸的時候,仍是須要提供密碼的。

測試

在舊服務器上使用scp命令複製文件到新服務器上是否還須要密碼

scp 1559635752_2019_06_04_10.7.2-ee_gitlab_backup.tar gitlab-backup@192.168.3.113:/var/opt/gitlab/backups
複製代碼

在新服務器上,再次使用剛纔的命令,發現已經能夠不須要輸入密碼

建立Shell定時遠程備份腳本

在新服務器上建立定時遠程備份腳本

建立自動scp的腳本和日誌目錄

cd /var/opt/gitlab
touch auto_scp.sh
cd /backups
sudo mkdir log
複製代碼

由於到時候,咱們會將該定時遠程備份腳本auto_scp.sh執行的時間,放到Gitlab自動備份腳本auto_scp.sh以後的一小時以內,所以咱們只須要每次執行遠程備份腳本auto_scp.sh的時候,只須要cp一個小時以內的生成的新的Gitlab備份文件。

auto_scp.sh

#!/bin/bash 
# 新舊服務器 gitlab備份文件存放路徑 
BACKUPDIR=/var/opt/gitlab/backups

# 遠程備份服務器 登陸帳戶 
RemoteUser=gitlab-backup

# 遠程備份服務器 IP地址 
RemoteIP=192.168.3.113

#當前系統日期 
DATE=`date "+%Y-%m-%d-%H-%M-%S"`

#Log存放路徑
LogFile=$BACKUPDIR/log/$DATE.log

#查找本地備份目錄下時間爲1天以內而且後綴爲.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

#備份到遠程服務器
scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$BACKUPDIR
echo "---------------------------------分割線---------------------------------" >> $LogFile

echo "remote server is $RemoteUser@$RemoteIP:$BACKUPDIR" >> $LogFile

#追加日誌到日誌文件
echo "---------------------------------結束-----------------------------------" >> $LogFile
~                      
複製代碼

測試

因爲auto_scp.sh執行權限是root,因此還得要交互密碼

下降auto_scp.sh和log的權限

sudo chown gushenxing:gushenxing auto_scp.sh 
sudo chown gushenxing:gushenxing log
複製代碼
  1. 執行命令,不要sudo執行
bash auto_scp.sh 
複製代碼

此時不須要密碼

  1. 查看日誌文件

  1. 發現新服務器上已經出現了備份包

往crontab添加定時任務,自動執行scp腳本

sudo vim /etc/crontab
複製代碼

添加下面命令

# 仇飛鴻編輯於2019-6-04 添加定時任務,天天7點,自動執行將gitlab備份包scp到新服務
器上的操做
0  7    * * *   gushenxing  bash /var/opt/gitlab/auto_scp.sh
複製代碼

編寫完 /etc/crontab 文件以後,須要從新啓動cron服務

#從新加載cron配置文件
sudo /usr/sbin/service cron reload
#重啓cron服務
sudo /usr/sbin/service cron restart
複製代碼

舊服務器上的操做已結束,完成了自動將舊服務器上的gitlab備份和自動將gitlab備份包scp到新服務器上

自動恢復新服務器上的gitlab備份包

自動刪除過時備份包腳本

cd /var/opt/gitlab
sudo touch auto_remove_backup.sh
複製代碼

填寫腳本代碼

#!/bin/bash 
#遠程備份服務器gitlab備份文件存放路徑
GITLABDIR=/var/opt/gitlab/backups

# 查找遠程備份路徑下,超過7天且文件後綴爲.tar的gitlab備份文件,而後刪除
find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;
複製代碼

往crontab添加定時任務,自動執行刪除備份包腳本

sudo vim /etc/crontab
複製代碼

添加下面命令

# 仇飛鴻編輯於2019-5-30 添加定時任務,天天上午8點,自動執行刪除過時的gitlab備份文件操做
0  8    * * *   root    bash /var/opt/gitlab/auto_remove_backup.sh
複製代碼

編寫完 /etc/crontab 文件以後,須要從新啓動cron服務

#從新加載cron配置文件
sudo /usr/sbin/service cron reload
#重啓cron服務
sudo /usr/sbin/service cron restart
複製代碼

自動恢復腳本

cd /var/opt/gitlab
sudo touch auto_recovery_backup.sh
複製代碼
#!/bin/bash 
#備份文件所在目錄
REMOTEDIRBACKUPS=/var/opt/gitlab/backups

#找到當日生成的備份文件
BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')

#當前系統日期 
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/})

#截取恢復文件名
RESTOREFILE=$(echo ${FILE%_gitlab*})



echo "---------------------------------分割線---------------------------------" >> $LogFile

#輸出日誌,打印出備份文件複製目標目錄
echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile

#進入到目標目錄
cd $REMOTEDIRBACKUPS

#備份文件權限修改成可讀可寫可執行
chmod 777 $FILE

#中止相關數據鏈接服務
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

#自動化交互,從備份文件恢復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

#輸出日誌,從備份文件恢復gitlab
echo "recovery was successful" >> $LogFile

#追加日誌到日誌目錄
echo "---------------------------------結束-----------------------------------" >> $LogFile


複製代碼

其中加入自動交互expect

測試

執行結果

往crontab添加定時任務,自動執行恢復備份包腳本

sudo vim /etc/crontab
複製代碼

在crontab中加入此定時任務

# 仇飛鴻編輯於2019-6-3 添加定時任務,天天上午9點,自動執行從備份包中恢復gitlab操做
0  9    * * *   root    bash /var/opt/gitlab/auto_recovery_backup.sh
複製代碼

編寫完 /etc/crontab 文件以後,須要從新啓動cron服務

#從新加載cron配置文件
sudo /usr/sbin/service cron reload
#重啓cron服務
sudo /usr/sbin/service cron restart
複製代碼

完整版腳本

舊服務器上的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 添加定時任務,天天6點,自動執行將舊服務器上的gitlab備份>操做
0  6    * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

# 仇飛鴻編輯於2019-6-04 添加定時任務,天天7點,自動執行將gitlab備份包scp到新服務
器上的操做
0  7    * * *   gushenxing   bash /var/opt/gitlab/auto_scp.sh
複製代碼

新服務器上的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 添加定時任務,天天上午8點,自動執行刪除過時的gitlab備份文件操做
0  8    * * *   root   bash /var/opt/gitlab/auto_remove_backup.sh

# 仇飛鴻編輯於2019-6-3 添加定時任務,天天上午9點,自動執行從備份包中恢復gitlab操做
0  9    * * *   root   bash /var/opt/gitlab/auto_recovery_backup.sh
複製代碼

自動將gitlab備份包scp到新服務器腳本auto_scp.sh

#!/bin/bash 
# 新舊服務器 gitlab備份文件存放路徑 

BACKUPDIR=/var/opt/gitlab/backups



# 遠程備份服務器 登陸帳戶 

RemoteUser=gitlab-backup



# 遠程備份服務器 IP地址 

RemoteIP=192.168.3.113



#當前系統日期 

DATE=`date "+%Y-%m-%d-%H-%M-%S"`



#Log存放路徑

LogFile=$BACKUPDIR/log/$DATE.log



#查找本地備份目錄下時間爲1天以內而且後綴爲.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 "---------------------------------結束-----------------------------------" >> $LogFile
複製代碼

自動執行刪除過時的gitlab備份文件腳本auto_remove_backup.sh

#!/bin/bash 
#遠程備份服務器gitlab備份文件存放路徑
GITLABDIR=/var/opt/gitlab/backups

# 查找遠程備份路徑下,超過7天且文件後綴爲.tar的gitlab備份文件,而後刪除
find $GITLABDIR -type f -mtime +7 -name '*.tar' -exec rm {} \;

複製代碼

自動執行從備份包中恢復gitlab腳本auto_recovery_backup.sh

#!/bin/bash 
#備份文件所在目錄

REMOTEDIRBACKUPS=/var/opt/gitlab/backups



#找到當日生成的備份文件

BACKUPFILE=$(sudo find ./ -mtime -1 -name '*.tar')



#當前系統日期 

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





#截取出主要文件名
RESTOREFILE=$(echo ${FILE%_gitlab*})


echo "---------------------------------分割線---------------------------------" >> $LogFile



#輸出日誌,打印出備份文件複製目標目錄

echo "backup files generated scp to $REMOTEDIRBACKUPS" >> $LogFile



#進入到目標目錄

cd $REMOTEDIRBACKUPS



#備份文件權限修改成可讀可寫可執行

chmod 777 $FILE
#中止相關數據鏈接服務

sudo gitlab-ctl stop unicorn

sudo gitlab-ctl stop sidekiq



#自動化交互,從備份文件恢復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



#輸出日誌,從備份文件恢復gitlab

echo "recovery was successful" >> $LogFile


#追加日誌到日誌目錄

echo "---------------------------------結束-----------------------------------" >> $LogFile




複製代碼

參考文獻

gitlab官網

ubuntu16.04中gitlab安裝

gitlab自動備份

【git學習】在CenterOS系統上恢復GitLab時出現錯誤:tar: 因爲前次錯誤,將以上次的錯誤狀態退出 unpacking backup failed

如何查看 GitLab 版本號

Linux上Gitlab卸載

git學習------> Gitlab如何進行備份恢復與遷移?

【git學習】在CenterOS系統上安裝GitLab並自定義域名訪問GitLab管理頁面

linux權限補充:rwt rwT rws rwS 特殊權限

最後,別忘了給這個項目點一個star哦,謝謝支持。

blog

一個學習編程技術的公衆號。天天推送高質量的優秀博文、開源項目、實用工具、面試技巧、編程學習資源等等。目標是作到我的技術與公衆號一塊兒成長。歡迎你們關注,一塊兒進步,走向全棧大佬的修煉之路

相關文章
相關標籤/搜索