遇到的问题
最近我对我的Gitlab
服务进行了数据迁移并进行了相应的升级操作,但是在之后的使用过程中发现一些旧项目中的部分功能配置会出现异常情况,例如点击项目中的CI/CE就会出现500报错网页。
问题的原因
导致这样的原因的罪魁祸首是db_key_base
参数出现了问题。
具体来说,db_key_base
是一个64位随机字符串,它用于为应用程序生成安全的密钥,并在将敏感数据写入数据库之前对其进行加密。这种加密方式使用了先进的AES-256算法,可确保数据在传输或存储过程中不被窃取或篡改。
而Gitlab默认的备份机制在配备数据的过程中并不会对Gitlab.rb
和Gitlab-secrets.json
文件进行备份,导致了相关Gitlab
相关服务出现异常情况。
Gitlab.rb
配置了gitlab
的域名、邮件发送信息、白名单等相关信息。
Gitlab-secrets.json
文件存储了Gitlab
的db secret
信息。
解决方案
🚩 服务恢复方案一
如果在数据迁移的时候旧数据还在,可以找到gitlab-secrets.json
并替换到新的Gitlab
服务器中然后重启服务。
第一步 重新加载配置文件
1 | gitlab-ctl reconfigure |
第二步 重启Gitlab服务
1 | gitlab-ctl restart |
🚩 服务恢复方案二
重置所有的密钥和token。
第一步 进入Rails控制台
1 | gitlab-rails console |
这个命令输入后需要等一会,这个取决于你的服务器性能,一般会登上三十多秒才能出现
irb(main):001:0>
,之后就可以进行下一步输入了
第二步 将相关加密Token设置为null值
在irb(main):001:0>
中输入重置命令
1 | Ci::Runner.all.update_all(token_encrypted: nil) |
输入之后在输入exit
退出Rails
控制台。
第三步 进入数据库控制台
需要注意的是,在使用gitlab-rails dbconsole时,请务必非常小心。因为您将直接操作GitLab使用的数据库,所以错误的SQL语句有可能导致数据丢失或损坏。
1 | gitlab-rails dbconsole |
第四步 重置SQL数据库中的Token
1 | gitlab-psql -d gitlabhq_production |
然后依次输入一下命令
1 | UPDATE projects SET runners_token = null, runners_token_encrypted = null; |
然后输入\q
或者exit
退出。
第五步 重启Gitlab服务
1 | gitlab-ctl restart |
至此整个Gitlab已经恢复正常。