gitlab備份


Gitlab日常備份及遷移
Gitlab安裝體驗一文介紹了如何在阿里雲上安裝Gitlab,安裝是很簡單方便,但是出於數據安全的考慮,我們需要做一些備份,以防萬一。

本文重點介紹Gitlab的日常備份及遷移恢復

Gitlab創建備份
使用Gitlab一鍵安裝包安裝Gitlab非常簡單, 同樣的備份恢復與遷移也非常簡單. 使用一條命令即可創建完整的Gitlab備份:

gitlab-rake gitlab:backup:create
使用以上命令會在/var/opt/gitlab/backups目錄下創建一個名稱類似為1393513186_gitlab_backup.tar的壓縮包, 這個壓縮包就是Gitlab整個的完整部分, 其中開頭的1393513186是備份創建的日期。

Gitlab修改備份文件默認目錄
你也可以通過修改/etc/gitlab/gitlab.rb來修改默認存放備份文件的目錄

gitlab_rails['backup_path'] = '/mnt/backups'
/mnt/backups修改為你想存放備份的目錄即可,修改完成之后使用gitlab-ctl reconfigure命令重載配置文件即可。

Gitlab恢復備份
同樣, Gitlab的從備份恢復也非常簡單

# 停止相關數據連接服務
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

# 從1393513186編號備份中恢復
gitlab-rake gitlab:backup:restore BACKUP=1393513186_gitlab_backup

# 啟動Gitlab
sudo gitlab-ctl start
Gitlab遷移
遷移如同備份與恢復的步驟一樣,只需要將老服務器/var/opt/gitlab/backups目錄下的備份文件拷貝到新服務器上的/var/opt/gitlab/backups即可(如果你沒修改過默認備份目錄的話)。

但是需要注意的是新服務器上的Gitlab的版本必須與創建備份時的Gitlab版本號相同。

比如新服務器安裝的是最新的7.60版本的Gitlab,那么遷移之前,最好將老服務器的Gitlab升級為7.60在進行備份。

Gitlab定時自動異地備份
由於Gitlab部署在了阿里雲上,把Gitlab再備份在本地意義不是特別大,所以這里利用了家里的NAS做了一個簡單的異地備份。

服務器備份腳本
在阿里雲服務器上創建如下腳本,存儲在/home/scripts/gitlab_backup.sh文件中

#!/bin/bash

# Gitlab自動備份腳本


#Gitlab 備份地址
LocalBackDir=/var/opt/gitlab/backups

#備份日志文件
LogFile=$LocalBackDir/remote_backup.log

#新建備份日志文件
touch $LogFile

echo "-------------------------------------------------------------------------" >> $LogFile

#記錄本地生成gitlab備份日志
echo "Gitlab auto backup at local server, start at $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

#執行gitlab本地備份
gitlab-rake gitlab:backup:create >> $LogFile 2>&1

# $?符號顯示上一條命令的返回值,如果為0則代表執行成功,其他表示失敗
if [ $? -eq 0 ];then
   #追加日志到日志文件
   echo "Gitlab auto backup at local server successed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
else
   #追加日志到日志文件
   echo "Gitlab auto backup at local server failed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
fi

#查找本地備份目錄修改時間為10分鍾以內且后綴為.tar的Gitlab備份文件
Backfile_Send_To_Remote=`find $LocalBackDir -type f  -mmin -10 -name '*.tar' | tail -1` >> $LogFile 2>&1

echo $Backfile_Send_To_Remote
NAS免密登錄阿里雲
異地備份思路需要在NAS上登錄到阿里雲服務器上執行對應的備份命令並下載文件,所以需要讓NAS可以免密登錄阿里雲服務器,以定時自動執行這個任務。

免密登錄的配置,可以參考SSH免密登錄配置

NAS服務器腳本
SSH進入NAS,然后創建腳本,自動在服務器上執行備份,並下載到NAS本地來。腳本存儲在/volume1/homes/gitlab_back/scripts/gitlab_backup_download.sh文件中。

#!/bin/bash

# 遠程登錄gitlab服務器,執行自動備份腳本,然后傳輸至本地

#Gitlab服務器
RemoteServer=git.ufeng.top
RemoteServerUser=root

#Gitlab服務器備份地址
RemoteBackDir=/var/opt/gitlab/backups

#NAS本地備份地址
LocalBackDir=/volume1/homes/gitlab_back

#備份日志文件
LogFile=$LocalBackDir/remote_backup.log

#新建備份日志文件
touch $LogFile

echo "-------------------------------------------------------------------------" >> $LogFile
#記錄NAS下載gitlab備份日志
echo "Gitlab backup auto download at NAS, start at $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

#遠程登錄gitlab服務器並執行備份腳本,獲取備份文件的名字
result=`ssh $RemoteServerUser@$RemoteServer "sh /home/scripts/gitlab_backup.sh"`

#遠程下載備份文件到本地
scp $RemoteServerUser@$RemoteServer:$result $LocalBackDir

echo "Gitlab remote backup file is ${result}" >> $LogFile

# 備份結果追加到備份日志
if [ $? -eq 0 ];then
	echo ""
	echo "$(date +"%Y-%m-%d %H:%M:%S") Gitlab Remote download Succeed!" >> $LogFile
else
	echo "$(date +"%Y-%m-%d %H:%M:%S") Gitlab Remote download Failed!" >> $LogFile
fi
然后配置群暉的定時任務,每天自動執行。

群暉計划任務.png

自動清理歷史備份文件
由於阿里雲的存儲空間有限,所以對Gitlab的歷史備份文件需要定期刪除,釋放磁盤空間。

同樣在/home/scripts/gitlab_auto_del_backup.sh文件中存儲自動清理歷史備份的腳本內容。

#!/bin/bash

#清理多余的歷史備份

#Gitlab 備份地址
LocalBackDir=/var/opt/gitlab/backups

#備份日志文件
LogFile=$LocalBackDir/remote_clean.log

#新建備份日志文件
touch $LogFile

echo "--------------------------------------------------------------------- " >> $LogFile
echo "Gitlab auto clean local backup, start at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

# 找到3*24*60分鍾前,以tar結尾的文件並刪除
find $LocalBackDir -type f -mmin +4320  -name "*.tar" -exec rm -rf {} \;

# $?符號顯示上一條命令的返回值,如果為0則代表執行成功,其他表示失敗
if [ $? -eq 0 ];then
   #追加日志到日志文件
   echo "Gitlab auto clean local backup success at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
else
   #追加日志到日志文件
   echo "Gitlab auto clean local backup failed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
fi
然后賦予執行權限

chmod u+x /home/scripts/gitlab_auto_del_backup.sh
配置定時任務

crontab -e

0 3 * * * /home/scripts/gitlab_auto_del_backup.sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM