Appearance

记一次gitlab迁移过程

coderzhouyu2021-07-22 14:11工具 运维gitlab迁移

前提

迁移 gitlab 的前提是两个 gitlab 的版本要一致

  1. 旧服务器环境

CentOS 7.6.1810 + 宝塔面板免费版7.5.1 + gitlab8.5.5中文版

  1. 新服务器环境

CentOS 8.2.2004 + 宝塔面板免费版7.5.1 + gitlab8.5.5中文版

迁移步骤

  1. 备份旧服务器的文件
gitlab-rake gitlab:backup:create
  1. 将备份的数据传到新服务器,备份文件在 /var/opt/gitlab/backups 目录下

  2. 给备份文件 777 权限

  3. 停止新服务器数据链接权限

    gitlab-ctl stop unicorn
    gitlab-ctl stop sidekiq
    
  4. 执行恢复文件代码

    # 提示时输入 yes
    gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
    

迁移时遇到的问题

宝塔面板在 centos8.2 下安装 gitlab 8.5.5 ce 失败

在新环境安装 gitlab 时无法直接通过宝塔面板安装成功,于是手动执行了以下命令

sh /www/server/panel/install/gitlab.sh  install

执行完成后无法在宝塔管理,所以执行手动配置 gitlab

# 执行的过程中要求输入时都输入 yes
gitlab-ctl reconfigure

因为宝塔安装的 gitlab 的 nginx 和 系统中已有的 nginx 有冲突,所以上面的代码无法执行成功时要调整下 gitlab 的 nginx 服务名,具体如下:

vim /opt/gitlab/service/nginx/run

#!/bin/sh
exec 2>&1

cd /var/opt/gitlab/nginx
# 修改这行 
exec chpst -P /opt/gitlab/embedded/sbin/gitlab-web -p /var/opt/gitlab/nginx

都完成之后就可以通过宝塔面板控制 gitlab 的状态了

gitlab 8.5.5 在centos8.2 下的坑

经过一系列操作之后本以为可以愉快玩耍了,结果打开 gitlab 的登录页登录是报 500 错误 !!!

第一时间查看日志

cat /var/log/gitlab/gitlab-rails/production.log


Completed 500 Internal Server Error in 155ms (ActiveRecord: 1.9ms)
BCrypt::Errors::InvalidHash (invalid hash):
  app/controllers/sessions_controller.rb:23:in `new'

这个问题是 gem 依赖的 bcrypt 模块版本在 centos8.2 有bug

解决方法有两种:

  1. 升级 bcrypt
  2. 直接改代码

我是直接改的代码

vim /opt/gitlab/embedded/service/gem/ruby/2.1.0/gems/bcrypt-3.1.10/lib/bcrypt/engine.rb

# 这行代码后加 .gsub(/(\n|\x00).*/, '') 即可
__bc_crypt(secret.to_s, salt).gsub(/(\n|\x00).*/, '')

gitlab 恢复后报 OpenSSL::Cipher::CipherError

这个所幸网上解决方案比较多,我摘抄一个我用的,命令行执行如下代码即可

sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

参考文档

GitLab从旧服务器迁移到新服务器open in new window

gitlab 删除项目报500 OpenSSL::Cipher::CipherErroropen in new window

https://www.oschina.net/question/2946511_2200445

在fedora28上安装gitlab的添坑之路open in new window

Last Updated 2023/10/4 23:12:45