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
完畢