原來(lái)公司的gitlab是通過(guò)apt-get安裝的,本身gitlab依賴(lài)的服務(wù)也特別多,所以想要將目前的gitlab轉(zhuǎn)入docker部署。
gitlab的數(shù)據(jù)還是比較重要的,所以還是得先備份。我是用了阿里云自帶的快照把整個(gè)磁盤(pán)都備份了一下。
PS:目前還沒(méi)有在正式環(huán)境上做這件事,下面所有事情是本地測(cè)試的。
備份還原必須是在同一個(gè)版本下操作的,目前線(xiàn)上最新的備份版本是gitlab-ce:9.0.1的,所以我先要起一個(gè)9.0.1版本的gitlab鏡像。
所有版本鏡像都可以看這里。
我采用的是docker-compose的方式進(jìn)行部署。官方文檔可以看這里。
我的docker-compose.yml如下:
gitlab:
image: 'gitlab/gitlab-ce:9.0.1-ce.0'
restart: always
hostname: 'localhost'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://localhost'
ports:
- '8080:80'
- '443:443'
- '22:22'
volumes:
# - '/srv/gitlab/config:/etc/gitlab'
# - '/srv/gitlab/logs:/var/log/gitlab'
# - '/srv/gitlab/data:/var/opt/gitlab'
- '/Users/Steven/Desktop/gitlab/config:/etc/gitlab'
- '/Users/Steven/Desktop/gitlab/logs:/var/log/gitlab'
- '/Users/Steven/Desktop/gitlab/data:/var/opt/gitlab'
一切就緒,使用docker-compose up -d
啟動(dòng)docker。我是用docker-compose up
啟用的,便于查看輸出。
這時(shí)候打開(kāi)http://localhost:8080
就能看到默認(rèn)的gitlab網(wǎng)頁(yè)了。
我用scp命令下載好了服務(wù)器上的備份1490846041_2017_03_30_gitlab_backup.tar
,這些備份都是在升級(jí)gitlab版本的時(shí)候自動(dòng)備份的,目錄在/var/opt/gitlab/backups/
,我沒(méi)有打開(kāi)自動(dòng)備份,因?yàn)榘⒗镌崎_(kāi)了每日自動(dòng)快照。
下面要做的就是恢復(fù)這些數(shù)據(jù)了。我參考了(這里)[https://gitlab.com/gitlab-org/gitlab-ce/issues/2693]的命令,但是某兩條命令好像有一點(diǎn)問(wèn)題,我稍微改了一下。
# 先把備份的文件拷貝到docker里面,也可以直接拷貝到mapping的volumn指定位置。
docker cp /path/to/file/1490846041_2017_03_30_gitlab_backup.tar docker-container-id:/var/opt/gitlab/backups
# 進(jìn)入docker
docker exec -it docker-container-id bash
# 設(shè)置文件夾權(quán)限
chmod -R 775 /var/opt/gitlab/backups
# 停止兩個(gè)服務(wù),而不是所有服務(wù)
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 從備份中恢復(fù)
gitlab-rake gitlab:backup:restore BACKUP=1490846041_2017_03_30
# 修改文件夾所有者
chown -R git /var/opt/gitlab/gitlab-rails/uploads
# OK了,接下來(lái)是收尾
gitlab-ctl reconfigure
gitlab-ctl start
接下來(lái)刷新http://localhost:8080
就可以發(fā)現(xiàn),原來(lái)gitlab上面的用戶(hù)信息,配置等等都恢復(fù)了。當(dāng)然,除了代碼。
接下來(lái)我我還沒(méi)做的事情是恢復(fù)代碼。我想應(yīng)該只需要把/var/opt/gitlab/*
目錄拷貝一份到/Users/Steven/Desktop/gitlab/data/*
應(yīng)該就沒(méi)啥問(wèn)題了。鑒于代碼文件比較大,目前我還沒(méi)把這個(gè)文件夾拉取到本地測(cè)試,當(dāng)然我后面會(huì)去驗(yàn)證我的想法。
總之大致上是實(shí)現(xiàn)了我們的需求了。