使用docker迁移并升级gitlab并添加HTTPS

前言

  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#添加权限

或者:

apt install docker-compose

具体实例可以apt install 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 恢复

0. 安装docker

0.1 如果你过去安装过 docker,先删掉:

sudo apt-get remove docker docker-engine docker.io

0.2 首先安装依赖:

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

0.3 信任 Docker 的 GPG 公钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

0.4 添加软件仓库(使用清华大学的):

sudo add-apt-repository \

  "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \

  $(lsb_release -cs) \

  stable"

0.5 最后安装DOCKER

sudo apt-get update

sudo apt-get install docker-ce

0.6 安装docker-compose

sudo apt install docker-compose

1.  安装gitlab

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'

  restart: always

  hostname: 'git.ahusmart.com'

  environment:

    GITLAB_OMNIBUS_CONFIG: |

      external_url 'https://git.xxxxx.com'

      gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

#https相关设置

      nginx['enable'] = true

      nginx['client_max_body_size'] = '250m'

      nginx['ssl_client_certificate'] = "/etc/gitlab/ssl/ca.cer"

      nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.cer"

      nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.ahusmart.com.key"

      nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"

      nginx['ssl_prefer_server_ciphers'] = "on"

  ports:

    - '80:80'

    - '22:22'

    - '443:443'

  volumes:

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

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

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

    - '/mnt/hdd/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上传到/mnt/sdc/gitlab/config里覆盖,

然后进入容器内:

# docker exec -it <容器名> bash

停止相关服务:

# 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和问题。以后可能还会有更多的坑要遇到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343