当前位置:   article > 正文

Centos7.4下gitlab迁移及通过docker启动gitlab服务_gitlab docker 迁移后重启

gitlab docker 迁移后重启

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Centos7.4下gitlab迁移及通过docker启动gitlab服务 - joshua317的博客

目录

0.安装docker并运行

1.查看原有gitlab的版本

2.拉取Gitlab镜像,在docker镜像仓库中,查找对应的版本

3.启动容器

4.备份原有数据

5.拷贝数据

6.在docker运行的git服务器上,登录进入容器

7.Gitlab仓库恢复

8.手动备份

9.使配置生效

10.启动Gitlab服务,在容器中执行

11.定时任务执行备份

12.扩展

12.1 GitLab概述

12.2 GitLab和GitHub的区别

12.3 Git相关概念

12.4 Gitlab的版本:

12.5 GitLab配置

12.6 Gitlab相关目录

12.7 GitLab服务构成

12.8 Gitlab设置中文

12.9 Gitlab备份

12.10 Gitlab相关命令

12.11 GitLab服务修改root密码

12.12 Docker安装

12.13 设置容器开机自启动


背景:

1)原有的gitlab服务器是通过yum install 进行安装,版本为12.9.9

2)新的gitlab服务器要求使用docker运行gitlab服务

3)需要旧的gitlab服务器进行迁移,然后在新的gitlab服务器上通过docker正常运行

解决思路:

1)在新的服务器上安装docker,并启动

2)在新的服务器上拉取gitlab镜像,并运行

3)在旧的服务器上备份gitlab数据,并拷贝到新的服务器上面

4)在新的服务器上的容器里面,停止相关服务,进行数据恢复

5)重新加载配置,使配置生效,并重新启动容器内的gitlab服务

环境:

系统环境:CentOS7.4

  1. # uname -a
  2. Linux gitlab 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  3. # lsb_release -a
  4. LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
  5. Distributor ID: CentOS
  6. Description: CentOS Linux release 7.4.1708 (Core)
  7. Release: 7.4.1708
  8. Codename: Core

0.安装docker并运行

  1. #0 卸载旧版本,较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
  2. yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-engine
  10. #1 安装必要的一些系统工具
  11. yum install -y yum-utils device-mapper-persistent-data lvm2
  12. #2 设置docker仓库
  13. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  14. #3 安装docker-ce
  15. yum install docker-ce docker-ce-cli containerd.io
  16. #启动
  17. systemctl start docker

1.查看原有gitlab的版本

注意:新服务器上的gitlab的版本号必须与创建备份时的gitlab版本号相同。

方式一:

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

方式二:

在gitlab后台中查看,在部署的域名后面加上help

http://xxx.xxx.com/help

2.拉取Gitlab镜像,在docker镜像仓库中,查找对应的版本

在新的服务器上拉取gitlab镜像

镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce/

  1. #拉取镜像
  2. docker pull gitlab/gitlab-ce:12.9.9-ce.0
  3. 查看镜像
  4. # docker images
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. hello-world latest feb5d9fea6a5 9 months ago 13.3kB
  7. gitlab/gitlab-ce 12.9.9-ce.0 82c989350edd 2 years ago 1.92GB

3.启动容器

  1. docker run -itd \
  2. --publish 80:80 \
  3. -v /data/gitlab/etc:/etc/gitlab \
  4. -v /data/gitlab/etc:/etc/gitlab \
  5. -v /data/gitlab/opt:/var/opt/gitlab \
  6. --restart always \
  7. --privileged=true \
  8. --name gitlab \
  9. gitlab/gitlab-ce:12.9.9-ce.0
命令描述
-i以交互模式运行容器,通常与 -t 同时使用命令解释
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d后台运行容器,并返回容器ID
-p 80:80将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口
-v /data/gitlab/etc:/etc/gitlab将容器/etc/gitlab目录挂载到宿主机-v /data/gitlab/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样
--restart always容器自启动
--privileged=true让容器获取宿主机root权限
--name gitlab设置容器名称为gitlab
gitlab/gitlab-ce镜像的名称,这里也可以写镜像ID

4.备份原有数据

在原来的gitlab服务器上备份数据

  1. #通过gitlab-rake命令备份gitlab,该命令会备份gitlab仓库、数据库、用户、用户组、用户密钥、权限等信息
  2. gitlab-rake gitlab:backup:create
  3. #备份后,会在/var/opt/gitlab/backups/生产类似1656991024_2022_07_05_12.9.9_gitlab_backup.tar的备份文件
  4. #此步骤可以不操作,默认备份后的文件存在/var/opt/gitlab/backups/目录下,如果要修改gitlab备份文件存储的路径的话,我们可以修改gitlab.rb文件
  5. vim /etc/gitlab/gitlab.rb
  6. gitlab_rails['backup_path'] = "/data/gitlab/back"

5.拷贝数据

把备份好的数据拷贝到新的服务器上面对应的目录,此处是通过容器挂载的目录,/data/gitlab/opt/backups

scp -r root@192.168.2.87:/var/opt/gitlab/backups/1656991024_2022_07_05_12.9.9_gitlab_backup.tar /data/gitlab/opt/backups/

6.在docker运行的git服务器上,登录进入容器

docker exec -it gitlab /bin/bash

7.Gitlab仓库恢复

  1. #在gitlab容器内部,停止相关数据连接服务
  2. gitlab-ctl stop unicorn
  3. gitlab-ctl stop sidekiq
  4. #恢复gitlab仓库
  5. gitlab-rake gitlab:backup:restore BACKUP=1656991024_2022_07_05_12.9.9

8.手动备份

由于gitlab.rb 和 gitlab-secrets.json 两个文件包含敏感信息。未被备份到备份文件中。需要手动备份

把原有的gitlab项目里面的gitlab.rb 和 gitlab-secrets.json手动拷贝到/data/gitlab/etc目录(挂载目录)下面

  1. #拷贝到/data/gitlab/etc目录(挂载目录)下面
  2. /etc/gitlab/gitlab.rb 配置文件须备份
  3. /etc/gitlab/gitlab-secrets.json 配置文件须备份

9.使配置生效

  1. #在容器中执行gitlab-ctl reconfigure,使其修改配置生效
  2. gitlab-ctl reconfigure

10.启动Gitlab服务,在容器中执行

根据实际情况进行启动或者重启

  1. #启动命令
  2. gitlab-ctl start
  3. #重启命令
  4. gitlab-ctl restart

11.定时任务执行备份

  1. # 每周六凌晨2点备份gitlab数据
  2. 0 2 * * 6 /usr/bin/gitlab-rake gitlab:backup:create
  3. #自定义备份脚本gitlab-bak.sh
  4. #!/bin/bash
  5. backupdir=/var/opt/gitlab/backups
  6. #获取最新的备份文件
  7. newfile=`ls -tl | grep tar | head -n 1 |awk '{print $9}'`
  8. #gitlab备份命令
  9. gitlab-rake gitlab:backup:create
  10. #复制备份文件到另一台机器
  11. scp ${backupdir}/${newfile} root@192.168.3.100:${backupdir}

12.扩展

12.1 GitLab概述

是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

GitLab官网:https://about.gitlab.com/

12.2 GitLab和GitHub的区别

也许在你看到上面GitLab介绍后,你会有个疑问,它怎么和GitHub那么像。没错二者确实有很大的关系和相似之处,可以说GitLab就是个高仿版的GitHub。

相同点:二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。

不同点:GitHub如果要使用私有仓库,是需要付费的。GitLab可以在上面创建私人的免费仓库。GitLab让开发团队对他们的代码仓库拥有更多的控制,总的来说,如果你想远离 GitHub , GitLab 是首选。它可以从不同的来源导入项目和问题,包括 GitHub ,这使得迁移过程无忧无虑。 GitLab 界面设计精良,干净,直观,并且在用户体验和功能方面与 GitHub 相近。

12.3 Git相关概念

1)Git:是一种版本控制系统,是一个命令,是一种工具。 2)Gitlib:是用于实现git功能的开发库。 3)Github:是一个基于git实现的在线代码托管仓库,包含一个网站界面,向互联网开放。 4)Gitlab:是一个基于git实现的在线代码仓库托管软件,一般用于在企业内网搭建,相当于个人版的代码托管仓库。

12.4 Gitlab的版本:

1)Gitlab-ce:社区版(可以免费使用) 2)Gitlab-ee:企业版(收费) 3)GitLab 托管版本。

12.5 GitLab配置

  1. #配置Gitlab服务的IP地址
  2. vi /etc/gitlab/gitlab.rb
  3. #容器外部挂载的目录是在/data/gitlab/etc/gitlab.rb
  4. ...
  5. external_url 'http://gitlab.joshua317.com' #指定IP,默认是80端口
  6. ...
  7. #配置修改后,进行重启
  8. gitlab-ctl restart

12.6 Gitlab相关目录

1)/var/opt/gitlab/git-data/repositories/:仓库默认存储目录 2)/opt/gitlab: 应用程序代码和相应的依赖程序 3)/var/opt/gitlab:gitlab各个组件的数据目录 gitlab-ctl reconfigure 命令编译后的应用数据和配置文件,不需要人为修改配置 4)/etc/gitlab: 配置文件目录 5)/etc/gitlab/gitlab.rb gitlab的主配置文件 6)/var/log/gitlab:此目录下存放了 gitlab 各个组件产生的日志 7)/var/opt/gitlab/backups/:备份文件生成的目录

12.7 GitLab服务构成

我们可以简单的使用命令去查看gitlab的各个服务

  1. root@6eba08664d96:/# gitlab-ctl status
  2. run: alertmanager: (pid 11796) 4038s; run: log: (pid 310) 7874s
  3. run: gitaly: (pid 11818) 4038s; run: log: (pid 301) 7874s
  4. run: gitlab-exporter: (pid 11842) 4037s; run: log: (pid 297) 7874s
  5. run: gitlab-workhorse: (pid 11849) 4037s; run: log: (pid 318) 7874s
  6. run: grafana: (pid 11874) 4036s; run: log: (pid 320) 7874s
  7. run: logrotate: (pid 19825) 436s; run: log: (pid 298) 7874s
  8. run: nginx: (pid 11901) 4035s; run: log: (pid 311) 7874s
  9. run: postgres-exporter: (pid 11917) 4035s; run: log: (pid 316) 7874s
  10. run: postgresql: (pid 12003) 4035s; run: log: (pid 294) 7874s
  11. run: prometheus: (pid 12012) 4034s; run: log: (pid 303) 7874s
  12. run: redis: (pid 12035) 4034s; run: log: (pid 308) 7874s
  13. run: redis-exporter: (pid 12040) 4033s; run: log: (pid 323) 7874s
  14. run: sidekiq: (pid 12051) 4033s; run: log: (pid 305) 7874s
  15. run: sshd: (pid 12057) 4032s; run: log: (pid 25) 7884s
  16. run: unicorn: (pid 12773) 3910s; run: log: (pid 296) 7874s

Nginx:静态web服务器。 gitlab-shell:用于处理Git命令和修改authorized keys列表。 gitlab-workhorse: 轻量级的反向代理服务器。 logrotate:日志文件管理工具。 postgresql:数据库。 redis:缓存数据库。 sidekiq:用于在后台执行队列任务(异步执行)。 unicorn:An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。 1、Gitlab的工作流程:

GitLab Shell GitLab Shell有两个作用:为GitLab处理Git命令、修改authorized keys列表。 当通过SSH访问GitLab Server时,GitLab Shell会: 限制执行预定义好的Git命令(git push, git pull, git annex) 调用GitLab Rails API 检查权限 执行pre-receive钩子(在GitLab企业版中叫做Git钩子) 执行你请求的动作 处理GitLab的post-receive动作 处理自定义的post-receive动作 当通过http(s)访问GitLab Server时,工作流程取决于你是从Git仓库拉取(pull)代码还是向git仓库推送(push)代码。 如果你是从Git仓库拉取(pull)代码,GitLab Rails应用会全权负责处理用户鉴权和执行Git命令的工作; 如果你是向Git仓库推送(push)代码,GitLab Rails应用既不会进行用户鉴权也不会执行Git命令,它会把以下工作交由GitLab Shell进行处理: 调用GitLab Rails API 检查权限 执行pre-receive钩子(在GitLab企业版中叫做Git钩子) 执行你请求的动作 处理GitLab的post-receive动作 处理自定义的post-receive动作

GitLab Workhorse GitLab Workhorse是一个敏捷的反向代理。它会处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。

12.8 Gitlab设置中文

Gitlab在12版本之后就自带中文了,直接访问"域名+/profile/preferences"页面,下面有Localization设置

12.9 Gitlab备份

如果是生产环境,备份是必须的。需要备份的文件:配置文件和数据文件。

1)备份配置文件

tar -czvf $(date "+etc-gitlab-%s.tar").tar.gz /etc/gitlab/

2)备份数据文件 默认数据备份目录是/var/opt/gitlab/backups,手动创建备份文件:

gitlab-rake gitlab:backup:create

Bash

Copy

3)设置备份数据上传到oss

  1. ### 1 修改/etc/gitlab/gitlab.rb配置文件,修改如下内容:
  2. gitlab_rails['backup_upload_connection'] = {
  3. 'provider' => 'aliyun',
  4. 'aliyun_accesskey_id' => '有权限访问存储桶的用户key',
  5. 'aliyun_accesskey_secret' => '有权限访问存储桶的密钥',
  6. 'aliyun_oss_endpoint' => 'http://oss-cn-shanghai-internal.aliyuncs.com',
  7. 'aliyun_oss_bucket' => 'my-backup', //OSS桶
  8. 'aliyun_oss_location' => 'shanghai' //此行内容不关键,但必须要有
  9. }
  10. gitlab_rails['backup_upload_remote_directory'] = 'gitlab' //存储gitlab备份的桶子目录
  11. ### 2 执行gitlab-ctl reconfigure让上步的配置生效
  12. gitlab-ctl reconfigure
  13. ### 3 执行gitlab-rake gitlab:backup:create,等命令成功结束后,到阿里云的OSS桶中检查,就会发现备份文件已经自动上传了。
  14. gitlab-rake gitlab:backup:create
  15. ### 4 进一步将gitlab备份命令加入到crontab中,实现每日自动备份上传到阿里云,这样就可以将代码安全的有一个异地备份了。在gitlab.rb中修改gitlab_rails['backup_keep_time'] = 86400 这行的值,可以控制gitlab本地备份目录中保存历史文件的时间长度,这样可避免本地的文件过多将磁盘空间耗尽。
  16. 另外,一般代码库的备份文件都不会小了,为了节省阿里云上面存储桶的存储成本,可以给存储桶设置文件的生命周期,比如超过30天的文件转入冷存储设备或删除,以降低存储成本。
  17. 至此,一个自动化的gitlab代码云端备份就大功造成了。

4)添加定时任务

  1. #添加定时任务
  2. crontab -e
  3. # 每周六凌晨2点备份gitlab数据
  4. 0 2 * * 6 /usr/bin/gitlab-rake gitlab:backup:create
  5. #重启定时任务
  6. service crond restart

12.10 Gitlab相关命令

  1. #1 帮助命令
  2. gitlab-ctl --help
  3. #2 重新加载gitlab配置文件:
  4. gitlab-ctl reconfigure
  5. #3 重新启动gitlab:
  6. gitlab-ctl restart
  7. #4 停止服务
  8. gitlab-ctl stop
  9. #5 查看某个组件的日志
  10. gitlab-ctl tail nginx
  11. #6 查看所有组件运行状态
  12. gitlab-ctl status
  13. #7 数据备份
  14. gitlab-rake gitlab:backup:create

12.11 GitLab服务修改root密码

  1. # 进入容器内部
  2. docker exec -it gitlab /bin/bash
  3. # 进入控制台
  4. gitlab-rails console -e production
  5. # 查询id为1的用户,id为1的用户是超级管理员
  6. user = User.where(id:1).first
  7. # 修改密码为joshua317
  8. user.password='joshua317'
  9. # 保存
  10. user.save!
  11. # 退出
  12. exit

12.12 Docker安装

  1. #0 卸载旧版本,较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
  2. yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-engine
  10. #1 安装必要的一些系统工具
  11. yum install -y yum-utils device-mapper-persistent-data lvm2
  12. #2 设置docker仓库
  13. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  14. #3 安装docker-ce
  15. yum install docker-ce docker-ce-cli containerd.io
  16. #启动
  17. systemctl start docker

12.13 设置容器开机自启动

  1. docker ps -qa docker update --restart=always 容器ID/容器名
  2. docker update --restart=always 56f0b18af626

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Centos7.4下gitlab迁移及通过docker启动gitlab服务 - joshua317的博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/758830
推荐阅读
相关标签
  

闽ICP备14008679号