?原服務(wù)部署代碼
~]# cd /data/gitlab
gitlab]# docker run --detach -p 8443:443 -p 380:80 -p 322:22 --name gitlab --restart unless-stopped ?-v `pwd`/config:/etc/gitlab -v `pwd`/log:/var/log/gitlab -v `pwd`/data:/var/opt/gitlab ?beginor/gitlab-ce:11.0.1-ce.0
查看需要備份的gitlab版本
docker exec github cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
11.0.1
先打開/data/gitlab/config/gitlab.rb配置文件叼旋,查看一個和備份相關(guān)的配置項:
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
可以到/var/opt/gitlab/backups找到備份包,解壓查看逾条,會發(fā)現(xiàn)備份的還是比較全面的,數(shù)據(jù)庫、repositories、build、upload等分類還是比較清晰的
該項定義了默認(rèn)備份出文件的路徑匆篓,可以通過修改該配置,并執(zhí)行?gitlab-ctl reconfigure 或者?gitlab-ctl? restart重啟服務(wù)生效寇窑。備份執(zhí)行一條命令就搞定:/opt/gitlab/bin/gitlab-rake gitlab:backup:create鸦概,也可以加到crontab中定時執(zhí)行:
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
可以到/var/opt/gitlab/backups找到備份包,解壓查看甩骏,會發(fā)現(xiàn)備份的還是比較全面的窗市,數(shù)據(jù)庫、repositories饮笛、build咨察、upload等分類還是比較清晰的。
每天執(zhí)行備份福青,肯定有目錄被爆滿的風(fēng)險扎拣,我們可以立馬想到的可以通過find 查找一定的時間前的文件,配合rm進(jìn)行刪除素跺。不過不需要這么麻煩,gitlab-ce自身集成的有自動刪除配置誉券。同樣打開/etc/gitlab/gitlab.rb配置文件指厌,可以找到如下配置:
gitlab_rails['backup_keep_time'] = 604800
這里是設(shè)置備份保留7天(7*3600*24=604800),秒為單位踊跟,如果想增大或減小踩验,可以直接在該處配置,并通過gitlab-ctl restart 重啟服務(wù)生效
備份完成商玫,會在備份目錄中生成一個當(dāng)天日期的tar包箕憾。
二、數(shù)據(jù)恢復(fù)
初始化拳昌,就執(zhí)行一次
gitlab-ctl reconfigure
啟動
gitlab-ctl status/stop/start
通過本機(jī)IP訪問頁面袭异,設(shè)置初始密碼,其他操作類似GitHUB炬藤。
2.恢復(fù)gitlab
恢復(fù)前需要先停掉數(shù)據(jù)連接服務(wù):
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
如果是臺空主機(jī)御铃,沒有任何操作,理論上不停這兩個服務(wù)也可以沈矿。停這兩個服務(wù)是為了保證數(shù)據(jù)一致性上真。如果你沒修改過默認(rèn)備份目錄的話,將老服務(wù)器/var/opt/gitlab/backups目錄下的備份文件拷貝到新服務(wù)器上的/var/opt/gitlab/backups
[root@localhost gitlab]# rsync -avz 1530773117_2018_07_05_gitlab_backup.tar 10.0.3.111:/var/opt/gitlab/backups/
600權(quán)限是無權(quán)恢復(fù)的羹膳。 --- 這里改成了777
[root@yunwei-test backups]# pwd
/var/opt/gitlab/backups
[root@yunwei-test backups]# chmod 777 1530773117_2018_07_05_gitlab_backup.tar
[root@yunwei-test backups]# ll
total 17328900
-rwxrwxrwx 1 git git 17744793600 Jul? 5 14:47 1530773117_2018_07_05_gitlab_backup.tar
執(zhí)行下面的命令進(jìn)行恢復(fù):后面再輸入兩次yes就完成恢復(fù)了睡互。
gitlab-rake gitlab:backup:restore BACKUP=1530773117_2018_07_05
PS:根據(jù)版本不同恢復(fù)時可能有點小區(qū)別
[root@localhost backups]# gitlab-rake gitlab:backup:restore BACKUP=1537974886_2018_09_26_10.8.7
或者
[root@localhost backups]# gitlab-rake gitlab:backup:restore BACKUP=1537974886
vi /data/gitlab/config/gitlab.rb
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800
0 2 1,15 * * /data/gatlab/gitlabback.sh >/dev/null 2>&1
vi gitlabback.sh
#!/bin/bash
docker exec github /opt/gitlab/bin/gitlab-rake gitlab:backup:create >/dev/null 2>&1
scp -p 250 /data/gitlab/data/backups/*.tar 192.168.0.8:/home/gitlab-back >/dev/null 2>&1
恢復(fù)
mv 1639387305_2021_12_13_11.0.1_gitlab_backup.tar /data/gitlab/data/backups
chmod +x 1639387305_2021_12_13_11.0.1_gitlab_backup.tar
docker exec -it gitlab bash
cd /var/opt/gitlab/backups
gitlab-rake gitlab:backup:restore BACKUP=1639387305_2021_12_13_11.0.1
后面再輸入兩次yes就完成恢復(fù)了。
恢復(fù)完成后,啟動剛剛的兩個服務(wù)就珠,或者重啟所有服務(wù)寇壳,再打開瀏覽器進(jìn)行訪問,發(fā)現(xiàn)數(shù)據(jù)和之前的一致:
gitlab-ctl start unicorn
gitlab-ctl start sidekiq
或
gitlab-ctl restart
注意:通過備份文件恢復(fù)gitlab必須保證兩臺主機(jī)的gitlab版本一致嗓违,否則會提示版本不匹配九巡。