美文网首页程序员
使用docker迁移并升级gitlab

使用docker迁移并升级gitlab

作者: Julien_zhang | 来源:发表于2019-07-15 21:12 被阅读18次

前言

  7月份开始进入导师的实验室学习,在看初次接触项目代码时看的头晕目眩,云里雾里。这时学长说给我布置个”小任务“,在Linux平台上使用Docker安装Gitlab,将实验室的gitlab数据迁移到另外一台服务器上,并且完成升级。经过一个多星期的学习和尝试,终于完成,现将过程记录如下。

一.学习基础

刚开始我对Linux的了解仅限于它和windows不同。在学长的指导下,我开始学习基础。

1. Linux基础

工欲善其事,必先利其器。如今在Windows系统下使用Linux系统可以选择不安装VM虚拟机,而是使用Windows自带的WSL功能,其具体介绍这里不再指出。下面给出安装过程。

(1)在控制面板->程序和功能->启用或关闭Windows功能->勾选 “适用于Linux的Windows子系统”

(2)进入Windows自带的应用商店,搜索Ubuntu,然后安装。

这里安装第一个。完成后进入“开始”菜单,打开安装好的Ubuntu。第一次进入系统可能需要一段时间,之后按照提示注册用户,密码。

(3)学习linux的操作基础

我是在C语言中文网http://c.biancheng.net/cpp/html/2726.html上学习了Linux系统的基础知识。一边看一边在Ubuntu上练习,比较简单,因为只用知道如何操作即可。

2. Docker基础

Docker单从功能上来说,跟虚拟机很类似。比如我可以在docker上再安装一个utunbu系统,然后进入这个系统操作。使用docker部署web应用更轻巧,快速。

在docker中,有几个基础概念需要了解。

(1)镜像-image

对于一个纯净的windows,需要你自己下载应用程序。docker也是一样,需要自己安装镜像。镜像就像C++中的class,他提供了一个模板给你使用,你需要用这个镜像来构建自己的容器,你也可以自己修改镜像,然后生成自己的镜像,并提交给官方的镜像仓库中。

(2)容器-container

容器就是使用镜像创建的具体的应用,就像C++中使用class创建的一个具体的实例。可以将其启动、开始、停止删除,而这些容器都是相互隔离、互不可见的。简单地说,容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。

(3)数据卷-volume

使用容器时的数据会在删除容器后一起删除,想要存放数据,就需要给容器挂载一个数据卷,卷是绕过Union文件系统的一个或多个容器中的特殊指定目录。卷旨在保留数据,与容器的生命周期无关。

具体的介绍和操作语句可以到Docker官网文档查询,下面写几个常用的语句:

查看已安装镜像:

docker image ls 

浏览镜像仓库:

docker image search

下载镜像:

docker pull xxx

创建容器:

docker run <选项> <镜像名称>   <命令语句> 

选项:

-i :以交互模式运行容器,通常与 -t同时使用

 -t:为容器重新分配一个伪输入终端。-it则可实现创建后即可持续输入命令

-d:后台运行,返回容器ID 

-p:指定端口映射,格式为:主机(宿主)端口:容器端口 

--name:为容器指定一个名称  

-v: 绑定一个卷

命令语句:/bin/bash :交互模式

查看全部容器:

docker container ls -a

停止容器:

docker stop <容器名称或ID>

移除容器(必须先停止):

docker rm <容器名称或ID>

进入容器:

docker exec -it <名称或ID> bash

详细的教程和实例练习可以参考https://yeasy.gitbooks.io/docker_practice/

3. Docker-compose

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

安装:安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose二进制文件,并为安装脚本添加执行权限

# sudo curl -L https://github.com/docker/compose/releases/download/1.22.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose#下载

# sudo chmod +x /usr/local/bin/docker-compose#添加权限

具体实例可以参考这篇文档:https://yeasy.gitbooks.io/docker_practice/compose/introduction.html

二.迁移Gitlab的服务器

1. 备份

1.0 进入旧服务器的gitlab容器,查找备份设定的备份路径

# cat /etc/gitlab/gitlab.rb | grep'backup_path‘

默认在/var/opt/gitlab/backups

1.1 备份(建议与开发约定时间,停止使用的情况下备份)

(1).停止相关数据连接服务

# gitlab-ctl stop unicorn

ok: down: unicorn: 0s, normally up

# gitlab-ctl stop sidekiq

ok: down: sidekiq: 0s, normally up

(2).备份数据

# gitlab-rake gitlab:backup:creat

需要一点时间,最后生成的文件1552531259_2019_03_14_11.3.0_gitlab_backup.tar其中1552531259_2019_03_14_11.3.0为备份的编号,恢复的时候用到。

(3).备份安全密钥文件(重要)

查找密钥文件目录

# find  / gitlab-secrets.json

找到后也需要备份,否则会出现问题:https://gitlab.com/gitlab-org/gitlab-ce/issues/53465

(4)备份配置文件

在与gitlab-secrets.json文件同一目录下的gitlab.rb文件储存着gitlab的配置信息,如邮箱,网址,端口,内存等,可以备份此文件,从而不需要再次修改。

1.2 下载备份文件

使用WinSCP下载备份文件(数据+密钥+配置文件)到本地windows里

winscp的使用可以参考https://winscp.net/eng/docs/lang:chs

2 恢复

1.0 在新服务器上下载和旧服务器版本相同的Gitlab镜像,旧的版本可以在gitlab网页的管理员控制中心中查看。

然后下载相应的镜像:

# docker pull gitlab/gitlab-ce:11.4.4-ce.0 #注意要在11.4.4后加上-ce.0才是完整的tag

1.1 使用docker-compose搭建旧版本的git服务器

(1) 编写docker-compose

新建一个空目录,在空目录里新建gitlab.yml文件并编辑

# mkdir git-compose

# cd git-compose

# touch gitlab.yml

# vim gitlab.yml

这是我的compose文件:

web:

  image: 'gitlab/gitlab-ce:11.4.4-ce.0'

  restart: always

  hostname: '49.4.68.29' #服务器ip地址

  environment:

    GITLAB_OMNIBUS_CONFIG: |

      external_url 'http://49.4.68.29:8082' #IP地址加端口号

      gitlab_rails['gitlab_shell_ssh_port'] = 2222 #修改ssh端口

      gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"  #设置备份文件路径

  ports: #端口映射

    - '8082:8082'

    - '2222:22'

    - '8443:443'

  volumes: #数据卷挂载

    - '/mnt/sdc/gitlab/config:/etc/gitlab'

    - '/mnt/sdc/gitlab/logs:/var/log/gitlab'

    - '/mnt/sdc/gitlab/data:/var/opt/gitlab'

    - '/mnt/sdc/gitlab/backups:/var/opt/gitlab/backups'

(2)启动容器

在与gitlab-yml同一个目录下运行:

# docker-compose up -d

等待完成即可。

我在这一步犯了几次错误.1:数据卷路径输入错误,虽然不影响,但是强迫症还是让我删掉重新安装   

2:在安装完成之后,测试克隆功能时发现,虽然我在账户设置里添加了ssh密钥,但是还是不能通过ssh的方式克隆,一直提示我输入密码,但无论输入什么密码都不对,在输入3次后提升克隆失败。如图

百度了很多方法都没有用,后来才发现启动时我修改了容器的ssh端口为2222,但是启动时没有加上这一句:

# gitlab_rails['gitlab_shell_ssh_port'] = 2222 #修改ssh端口

而且在后续的配置时也忘记了在/etc/gitlab下的gitlab.rb文件中修改,导致ssh的端口一直是22,理所应当的失败了。所以一定要细心。另外,在服务器的控制台中也要把相应的端口开放,否则无法访问。

安装完成之后即可测试网站功能是否正常,比如clone,push,pull等。

在正常之后,即可开始恢复文件。

1.2  使用winscp将Windows里的数据备份上传的新服务器的/mnt/sdc/gitlab/backups里,将gitlab-secrets.json和gitlab.rb上传到/mnt/sdc/gitlab/config里覆盖,然后进入容器内:

# docker exec -it <容器名> bash

刷新配置:

# gitlab-ctl reconfigure

停止相关服务:

# gitlab-ctl stop unicorn

ok: down: unicorn:0s, normally up

# gitlab-ctl stop sidekiq

ok: down: sidekiq:0s, normally up

恢复文件:

# ls /etc/gitlab/backups

1563006825_2019_07_13_11.4.4_gitlab_backup.tar

把文件名复制下来:注意:复制到11.4.4即可,后面不用,即复制1563006825_2019_07_13_11.4.4

# gitlab-rake gitlab:backup:restore BACKUP=1563006825_2019_07_13_11.4.4

按照提示,都输入yes即可。

刷新配置文件:

# gitlab-ctl reconfigure

重新启动相关服务

# gitlab-ctl start unicorn

ok: run: unicorn: (pid2711)0s

# gitlab-ctl start sidekiq

ok: run: sidekiq: (pid2803)0s

重启服务:

# gitlab-ctl restart

ok: run: alertmanager: (pid4983)1s

ok: run: crond: (pid4993)0s

ok: run: gitaly: (pid5001)1s

ok: run: gitlab-monitor: (pid5014)0s

......

ok: run: gitlab-workhorse: (pid5027)0sok: run: unicorn: (pid5188)0s
登陆WEB页面查看代码是否存在

我因为种种原因,反复移除、创建了几次。注意:在重装时,需要把/mnt/sdc目录下的文件都删除,确保重装的纯净。

这时就可以登上网页查看旧服务器上的仓库是否存在了。

验证(可选):

# gitlab-rake gitlab:check SANITIZE=true

Checking GitLab Shell ...

 GitLab Shell version >= 8.3.3 ? ... OK (8.3.3) 

Repo base directory exists? 

default... yes 

Repo storage directories are symlinks?

 default... noRepo 

....................

 Git user has default SSH configuration? 

... yes

 Active users: ... 17

 Checking GitLab 

.. Finished 

3 升级gitlab版本

停止容器:

# docker container stop gitlab

移除容器:

# docker rm gitlab

把compose文件gitlab.yml中的

# image: gitlab/gitlab-ce:11.4.4-ce.0

修改为

# image: gitlab/gitlab-ce 

在镜像名称后不加tags,系统会默认使用最新版的官方镜像,如果没有则会自动先下载。

启动:

# docker-compose up-d

Creating gitlab ... done

到此,完成了迁移升级的全过程。

三. 总结

这个任务其实感觉很容易,但是对我这个纯小白来说完全是从零开始。感谢学长对我的全程的指导,使我在这次的学习实践中收获很多。很多东西必须亲手敲出来才能遇到问题并解决问题。一定要仔细,否则就会有各种bug和问题。以后可能还会有更多的坑要遇到。

相关文章

网友评论

    本文标题:使用docker迁移并升级gitlab

    本文链接:https://www.haomeiwen.com/subject/mdugkctx.html