填坑记GitLab 服务器迁移和升级

Posted Ferris

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了填坑记GitLab 服务器迁移和升级相关的知识,希望对你有一定的参考价值。

由于之前采用的是 Docker 部署的 GitLab,所以在升级时,遇见了一些问题,在此记录一下。

1. 旧服务器上 GitLab

Docker Compose:

version: \'2\'
services:
    gitlab:
      image: \'twang2218/gitlab-ce-zh\'
      restart: unless-stopped
      hostname: \'git.xxx.com\'
      environment:
        TZ: \'Asia/Shanghai\'
        GITLAB_OMNIBUS_CONFIG: |
          external_url \'http://git.xxx.com\'
          gitlab_rails[\'time_zone\'] = \'Asia/Shanghai\'
      ports:
        - \'80:80\'
        - \'443:443\'
      volumes:
        - /home/gitlab/config:/etc/gitlab
        - /home/gitlab/data:/var/opt/gitlab
        - /home/gitlab/log:/var/log/gitlab

2. 升级遇见的坑

之前旧版的版本号是 11.0.5 ,现在官方的最新版本是 11.7.0-ce.0 , 由于之前采用的是汉化后的GitLab的修改版本,官方并没有 11.0.5 这个版本号可以下载。然而直接使用新版本的话,会出现各种问题,比如权限问题,版本问题等。

  1. 不能将 gitlab 文件夹直接打包进行转移,会遇见各种权限问题。
  2. 不能直接将 汉化修改版 直接改成 官方新版,会遇见版本不一致问题。

3. 正确服务器迁移的姿势

  1. 在原来的服务器上运行如下命令:

    # 进入到容器中
    docker exec -it home_gitlab_1 bash
    
    # 在容器中执行
    # 停止数据连接服务
    > gitlab-ctl stop unicorn
    > gitlab-ctl stop sidekiq
    
    # 备份数据
    > gitlab-rake gitlab:backup:create

    执行以上命令后,会在宿主机上的 /home/gitlab/data/backups 产生一个 tar 文件,例如: 1548223311_2019_01_23_11.0.5_gitlab_backup.tar

  2. 将这个 tar 文件,传输到新的服务器上
  3. 在新的服务器上,运行原来服务器上的 docker compose 文件

    • 记得修改一下版本号,保持与之前的版本一致(如果镜像有新的版本的话,不写版本号,会下载最新版,就不能进行备份的恢复了)。
    version: \'2\'
    services:
        gitlab:
          image: \'twang2218/gitlab-ce-zh:11.0.5\'
          restart: unless-stopped
          hostname: \'git.xxx.com\'
          environment:
            TZ: \'Asia/Shanghai\'
            GITLAB_OMNIBUS_CONFIG: |
              external_url \'http://git.xxx.com\'
              gitlab_rails[\'time_zone\'] = \'Asia/Shanghai\'
          ports:
            - \'80:80\'
            - \'443:443\'
          volumes:
            - /home/gitlab/config:/etc/gitlab
            - /home/gitlab/data:/var/opt/gitlab
            - /home/gitlab/log:/var/log/gitlab
    # 启动Docker
    docker-compose up -d
  4. 在新的服务器上启动 Docker 后,将备份的 tar 文件拷贝到 /home/gitlab/data/backups 目录下,并将文件权限设置为 777
  5. 进入到新服务器的容器中执行以下命令:

    # 进入到容器中
    docker exec -it home_gitlab_1 bash
    
    # 在容器中执行
    # 停止数据连接服务
    > gitlab-ctl stop unicorn
    > gitlab-ctl stop sidekiq
    
    # 恢复数据
    # BACKUP=时间戳(以 1548223311_2019_01_23_11.0.5_gitlab_backup.tar 为例)
    > gitlab-rake gitlab:backup:restore BACKUP=1548223311_2019_01_23_11.0.5
    
    # 恢复完成后,重启服务
    > gitlab-ctl restart

    服务器迁移算是完成了,如果不进行升级的话,到此结束。

4. GitLab 升级

  1. 同镜像升级

    修改 compose 文件,将镜像升级到与官方版本一致(经查阅 Docker 镜像文档,得知 11.1.4 版本是基于官方 gitlab/gitlab-ce:11.1.4-ce.0 进行汉化修改构建,所以本次升级为 11.1.4 版本)

    version: \'2\'
    services:
        gitlab:
          image: \'twang2218/gitlab-ce-zh:11.1.4\'
          restart: unless-stopped
          hostname: \'git.xxx.com\'
          environment:
            TZ: \'Asia/Shanghai\'
            GITLAB_OMNIBUS_CONFIG: |
              external_url \'http://git.xxx.com\'
              gitlab_rails[\'time_zone\'] = \'Asia/Shanghai\'
          ports:
            - \'80:80\'
            - \'443:443\'
          volumes:
            - /home/gitlab/config:/etc/gitlab
            - /home/gitlab/data:/var/opt/gitlab
            - /home/gitlab/log:/var/log/gitlab
    # 停止之前的 Docker
    docker-compose down
    
    # 检查一下镜像状态
    docker ps
    
    # 替换 compose 文件
    # 启动新的镜像
    docker-compose up -d
    
    # 启动完成后,进入到容器中
    docker exec -it home_gitlab_1 bash
    
    # 停止数据连接服务
    > gitlab-ctl stop unicorn
    > gitlab-ctl stop sidekiq
    
    # 刷新配置
    > gitlab-ctl reconfigure
    
    # 重启服务
    > gitlab-ctl restart
    
    # 重启后,再次进入容器
    docker exec -it home_gitlab_1 bash
    
    # 创建备份
    > gitlab-rake gitlab:backup:create
    
    # 退出容器
    > exit
    
    # 停止docker
    docker-compose down

    将数据备份,拷贝到宿主机的其他地方,比如:/home/gitlab-backup/xxx_11.1.4_gitlab_backup.tar

  2. 跨越到官方镜像(gitlab/gitlab-ce)

    修改 compose 文件,注意版本选择:

    version: \'2\'
    services:
        gitlab:
          image: \'gitlab/gitlab-ce:11.1.4-ce.0\'
          restart: unless-stopped
          hostname: \'git.xxx.com\'
          environment:
            TZ: \'Asia/Shanghai\'
            GITLAB_OMNIBUS_CONFIG: |
              external_url \'http://git.xxx.com\'
              gitlab_rails[\'time_zone\'] = \'Asia/Shanghai\'
          ports:
            - \'80:80\'
            - \'443:443\'
          volumes:
            - /home/gitlab/config:/etc/gitlab
            - /home/gitlab/data:/var/opt/gitlab
            - /home/gitlab/log:/var/log/gitlab
    # 检查 docker 运行状态,是否已经停止了
    docker ps
    
    # 删除 gitlab 文件夹
    rm -rf /home/gitlab
    
    # 替换 compose 文件
    # 启动 docker compose
    docker-compose up -d
    
    # 启动完成后,将备份的 tar 拷贝到 /home/gitlab/data/backups
    cp /home/gitlab-backup/xxx_11.1.4_gitlab_backup.tar /home/gitlab/data/backups
    
    # 设置权限
    chmod 777 /home/gitlab/data/backups/xxx_11.1.4_gitlab_backup.tar
    
    # 进入容器
    docker exec -it home_gitlab_1 bash
    
    # 停止数据连接服务
    > gitlab-ctl stop unicorn
    > gitlab-ctl stop sidekiq
    
    # 恢复数据
    # BACKUP=时间戳(以 xxx_11.1.4_gitlab_backup.tar 为例)
    > gitlab-rake gitlab:backup:restore BACKUP=xxx_11.1.4
    
    # 刷新配置
    > gitlab-ctl reconfigure
    
    # 重启服务
    > gitlab-ctl restart
    
    # 重启后,再次进入容器
    docker exec -it home_gitlab_1 bash
    
    # 创建备份,以备不时之需
    > gitlab-rake gitlab:backup:create
    
    # 退出容器
    > exit
    
    # 停止docker
    docker-compose down

    将数据备份,拷贝到宿主机的其他地方,比如:/home/gitlab-backup/zzz_11.1.4_gitlab_backup.tar

  3. 官方镜像升级

    升级到官方最新版本(11.7.0-ce.0

    修改 compose 文件

    version: \'2\'
    services:
        gitlab:
          image: \'gitlab/gitlab-ce:11.7.0-ce.0\'
          restart: unless-stopped
          hostname: \'git.xxx.com\'
          environment:
            TZ: \'Asia/Shanghai\'
            GITLAB_OMNIBUS_CONFIG: |
              external_url \'http://git.xxx.com\'
              gitlab_rails[\'time_zone\'] = \'Asia/Shanghai\'
          ports:
            - \'80:80\'
            - \'443:443\'
          volumes:
            - /home/gitlab/config:/etc/gitlab
            - /home/gitlab/data:/var/opt/gitlab
            - /home/gitlab/log:/var/log/gitlab
    # 检查 docker 运行状态,是否已经停止了
    docker ps
    
    # 替换 compose 文件
    # 启动 docker compose
    docker-compose up -d
    
    # 进入容器
    docker exec -it home_gitlab_1 bash
    
    # 停止数据连接服务
    > gitlab-ctl stop unicorn
    > gitlab-ctl stop sidekiq
    
    # 刷新配置
    > gitlab-ctl reconfigure
    
    # 重启服务
    > gitlab-ctl restart
    
    # 重启后,再次进入容器
    docker exec -it home_gitlab_1 bash
    
    # 创建备份,以备不时之需
    > gitlab-rake gitlab:backup:create
    
    # 退出容器
    > exit

    将数据备份,拷贝到宿主机的其他地方,比如:/home/gitlab-backup/nnn_11.1.7_gitlab_backup.tar

    Gitlab 服务器迁移和升级全部完成。

2021-07-16 更新:

升级按照官方升级版本路线进行,否则会报错。

https://docs.gitlab.com/ee/up...

gitlab 删除项目报500 OpenSSL::Cipher::CipherError

# 进入镜像
$ docker exec -it gitlab bash

# 进入 DB 控制
> gitlab-rails dbconsole

# 清除 Token
==> UPDATE projects SET runners_token = null, runners_token_encrypted = null; 

2021-07-20 更新:

gitlab 各种报 500

  1. 解决方案:如果有原始的项目文件
    拷贝原项目的密钥记录文件 /etc/gitlab/gitlab-secrets.json 到对应目录位置;
    拷贝原项目的密钥记录文件 /etc/gitlab/gitlab.rb 到对应目录位置

    # 刷新配置
    > gitlab-ctl reconfigure
    # 重启
    > gitlab-ctl restart
  2. 原密钥记录文件无法恢复
    需要重置所有的 Token 记录,关于 Webhooks 也需要重新创建

    > gitlab-rails dbconsole
    
    => DELETE FROM ci_group_variables;
    => DELETE FROM ci_variables;
    # Clear project tokens
    => UPDATE projects SET runners_token = null, runners_token_encrypted = null;
    # Clear group tokens
    => UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
    # Clear instance tokens
    => UPDATE application_settings SET runners_registration_token_encrypted = null;
    # Clear key used for JWT authentication
    # This may break the $CI_JWT_TOKEN job variable:
    # https://gitlab.com/gitlab-org/gitlab/-/issues/325965
    => UPDATE application_settings SET encrypted_ci_jwt_signing_key = null;
    # Clear runner tokens
    => UPDATE ci_runners SET token = null, token_encrypted = null;
    # Clear build tokens
    => UPDATE ci_builds SET token = null, token_encrypted = null;
    # truncate web_hooks table
    => TRUNCATE web_hooks CASCADE;
    => quit;
    
    # 重启
    > gitlab-ctl restart

以上是关于填坑记GitLab 服务器迁移和升级的主要内容,如果未能解决你的问题,请参考以下文章

UiAutomator2.0升级填坑记

UiAutomator2.0升级填坑记

cJSON填坑记

gitlab升级和迁移

Spring Cloud Oauth2 + Security 填坑记

Ueditor在上传图片时,服务器返回502 bad gateway的填坑记