gitlab从apt-get转docker

原来公司的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网页了。

gitlab从apt-get转docker_第1张图片
屏幕快照 2017-03-30 14.57.15.png

我用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上面的用户信息,配置等等都恢复了。当然,除了代码。

gitlab从apt-get转docker_第2张图片
屏幕快照 2017-03-30 14.58.03.png

接下来我我还没做的事情是恢复代码。我想应该只需要把/var/opt/gitlab/*目录拷贝一份到/Users/Steven/Desktop/gitlab/data/*应该就没啥问题了。鉴于代码文件比较大,目前我还没把这个文件夹拉取到本地测试,当然我后面会去验证我的想法。

总之大致上是实现了我们的需求了。

你可能感兴趣的:(gitlab从apt-get转docker)