docker gitlab部署、備份和恢復

gitlab部署

1、宿主機新建gitlab的數據存放目錄

$ mkdir /data /data/gitlab /data/gitlab/data  /data/gitlab/config  /data/gitlab/logs 

2、運行gitlab鏡像

$  docker run --detach \
--hostname 服務器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0    //這裏最好指定tag吧,因爲恢復的時候用相同的tag纔不會出現版本的問題

3、配置gitlab.rb

//修改 clone ssh時的端口  ssh://git@服務器ip:12220/groupname/xxxx.git
//如果使用的是默認端口就不需要改了
$ vim /data/gitlab/config/gitlab.rb //去掉註釋 修改 gitlab_rails['gitlab_shell_ssh_port'] = 12220  
//進入容器
$ docker exec -it gitlab /bin/bash
//容器中重新加載配置文件:
$ gitlab-ctl reconfigure
//容器中重啓gitlab服務
$ gitlab-ctl restart

gitlab備份、恢復

1、利用crontab、rsync實現準實時備份 、恢復

1.1、利用crontab、rsync實現準實時備份

直接把 /data/gitlab目錄下的內容同步到【文件存儲】或【服務器】等。
crontab 添加下面任務 因爲gitlab的服務器上掛載了阿里雲的NAS文件存儲,所以我這裏直接在gitlab服務器上添加crontab任務,定時把文件同步到NAS上。
crontab任務: 0 */2 * * * /usr/bin/rsync -avzP --delete --exclude=‘backups’ /data/gitlab /mnt_nas/gitlab/raw_backups >> /mnt_nas/rsynclog/rsync-gitlab-raw-backup.log //最多會丟失2小時的內容,其實時間間隔可以再小點15分鐘一次都可以 。

有時可能這樣同步過來的數據再回復的時候可能會報錯,但我這邊試了很多次都沒問題

1.2、恢復

基於同步過來的文件新建一個gitlab鏡像

//可以把備份的文件拷貝到任何合適的地方來新建鏡像
//注意修改gitlab.rb文件
$  docker run --detach \
--hostname 服務器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /mnt_nas/gitlab/raw_backups/gitlab/config:/etc/gitlab \
--volume /mnt_nas/gitlab/raw_backups/gitlab/logs:/var/log/gitlab \
--volume /mnt_nas/gitlab/raw_backups/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0 

2、利用crontab、gitlab-rake、rsync實現備份 、恢復

2.1、利用crontab、gitlab-rake、rsync實現備份

//添加下面crontab任務。
//docker exec -i  這個不能加t 即docker exec -it ,不然gitlab-rake gitlab:backup:create的命令執行不了
//STRATEGY=copy  使用複製策略
//因爲我把NAS掛載到了/data/gitlab//data/backups的目錄,所以執行下面任務會直接把備份的文件生成到NAS上,省去了rsync部分
crontab任務: 0 3  * * *   docker exec -i gitlab gitlab-rake gitlab:backup:create STRATEGY=copy    >> /mnt_nas/rsynclog/gitlab-rake-backup.log
//還要把/data/gitlab/config目錄中的配置文件gitlab-secrets.json備份過來,我這邊是把這個目錄備份的,
crontab任務: 0 3,13  * * *   /usr/bin/rsync -avzP  --delete  /data/gitlab/config /mnt_nas/gitlab/gitlab_rake_backups >> /mnt_nas/rsynclog/gitlab-config-backup.log

備份策略選項
該選項對gitlab 8.17及以上版本有效。
默認的備份策略是使用linux的tar/gzip命令。這在大多數情況下是沒有問題的,但是當數據在打包過程中發生改變時,將會有錯誤拋出file changed as we read it,這會導致備份進程失敗。爲了解決這個問題,8.17引入了一個名爲copy的備份策略,就是在調用tar、gzip時將數據拷貝到一個臨時位置。不過也引入了另一個問題,將額外佔用一倍的磁盤空間。 要使用複製策略而不是默認流策略,可以指定STRATEGY = copy。例如,sudo gitlab-rake gitlab:backup:create STRATEGY = copy。

2.2、恢復

重走一遍gitlab的部署
宿主機新建gitlab的數據存放目錄

$ mkdir /data /data/gitlab /data/gitlab/data  /data/gitlab/config  /data/gitlab/logs 

運行gitlab鏡像

$  docker run --detach \
--hostname 服務器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0    //這裏最好指定tag吧,因爲恢復的時候用相同的tag纔不會出現版本的問題

配置gitlab.rb

//修改 clone ssh時的端口  ssh://git@服務器ip:12220/groupname/xxxx.git
//如果使用的是默認端口就不需要改了
$ vim /data/gitlab/config/gitlab.rb //去掉註釋 修改 gitlab_rails['gitlab_shell_ssh_port'] = 12220  

把備份的gitlab-secrets.json複製到/data/gitlab/config,把備份的倉儲壓縮包( 如:1587550111_2020_04_22_11.9.8_gitlab_backup.tar)複製到/data/gitlab/data/backups目錄
執行恢復:
docker exec -i gitlab gitlab-rake gitlab:backup:restore BACKUP=1587550111_2020_04_22_11.9.8 force=yes (注1587550111_2020_04_22_11.9.8沒有後綴_gitlab_backup.tar)

//重新加載配置文件:
$ docker exec -i gitlab gitlab-ctl reconfigure
//重啓gitlab服務
$ docker exec -i gitlab gitlab-ctl restart

常見錯誤

1、備份恢復後出現 【gitlab服務遷移到新服務器後integrations報500錯誤】

需要用備份的gitlab-secrets.json覆蓋掉新生成的gitlab-secrets.json文件
然後重新加載配置文件:
gitlab-ctl reconfigure
重啓gitlab服務
gitlab-ctl restart

完畢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章