原来公司的gitlab是通过apt-get安装的,本身gitlab依赖的服务也特别多,所以想要将目前的gitlab转入docker部署。
gitlab的数据还是比较重要的,所以还是得先备份。我是用了阿里云自带的快照把整个磁盘都备份了一下。
PS:目前还没有在正式环境上做这件事,下面所有事情是本地测试的。
备份还原必须是在同一个版本下操作的,目前线上最新的备份版本是gitlab-ce:9.0.1的,所以我先要起一个9.0.1版本的gitlab镜像。
所有版本镜像都可以看这里。
我采用的是docker-compose的方式进行部署。官方文档可以看这里。
我的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
启动docker。我是用docker-compose up
启用的,便于查看输出。
这时候打开http://localhost:8080
就能看到默认的gitlab网页了。
我用scp命令下载好了服务器上的备份1490846041_2017_03_30_gitlab_backup.tar
,这些备份都是在升级gitlab版本的时候自动备份的,目录在/var/opt/gitlab/backups/
,我没有打开自动备份,因为阿里云开了每日自动快照。
下面要做的就是恢复这些数据了。我参考了(这里)[https://gitlab.com/gitlab-org/gitlab-ce/issues/2693]的命令,但是某两条命令好像有一点问题,我稍微改了一下。
# 先把备份的文件拷贝到docker里面,也可以直接拷贝到mapping的volumn指定位置。
docker cp /path/to/file/1490846041_2017_03_30_gitlab_backup.tar docker-container-id:/var/opt/gitlab/backups
# 进入docker
docker exec -it docker-container-id bash
# 设置文件夹权限
chmod -R 775 /var/opt/gitlab/backups
# 停止两个服务,而不是所有服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 从备份中恢复
gitlab-rake gitlab:backup:restore BACKUP=1490846041_2017_03_30
# 修改文件夹所有者
chown -R git /var/opt/gitlab/gitlab-rails/uploads
# OK了,接下来是收尾
gitlab-ctl reconfigure
gitlab-ctl start
接下来刷新http://localhost:8080
就可以发现,原来gitlab上面的用户信息,配置等等都恢复了。当然,除了代码。
接下来我我还没做的事情是恢复代码。我想应该只需要把/var/opt/gitlab/*
目录拷贝一份到/Users/Steven/Desktop/gitlab/data/*
应该就没啥问题了。鉴于代码文件比较大,目前我还没把这个文件夹拉取到本地测试,当然我后面会去验证我的想法。
总之大致上是实现了我们的需求了。