Edited at

GitLabを別サーバに移行した時一部プロジェクトが表示できなくなった時の対処法

More than 3 years have passed since last update.


環境


  • 移行元: Fedora22上のソースからインストールしたGitLab 8.9.3

  • 移行先: CentOS7 (1511)上のGitLab 8.9.3 (omnibus版)


データの移行方法

移行先の環境に公式の手順通りGitLabをインストール後,gitlab-ctl reconfigureしてからgitlab-rake gitlab:backup:restoreで移行元の環境でバックアップしたデータをリストア.

(この辺はあまりちゃんと覚えてない)


現象

GitLabを別サーバに移行後,一部のプロジェクトページを開いた時に500エラーが発生してプロジェクトの情報が見れなくなる.

production.logには以下の様な内容が記録される.


Parameters: {"namespace_id"=>"...", "id"=>"..."}
Completed 500 Internal Server Error in 71ms (ActiveRecord: 5.5ms)

OpenSSL::Cipher::CipherError (bad decrypt):
app/models/project.rb:456:in `import_url'
app/models/project.rb:486:in `external_import?'
app/models/project.rb:478:in `import?'
app/models/project.rb:494:in `import_in_progress?'
app/controllers/projects_controller.rb:93:in `show'
lib/gitlab/middleware/go.rb:16:in `call'


対処法

移行前の環境からdb_key_baseをコピーして持ってくる.


  1. とりあえずgitlab-ctl stopでGitLabを止める.

  2. ソースからの移行の場合は移行元の環境の/home/git/config/gitlab_secrets.ymlにそれっぽいキーがあるのでその値をメモする.(後述の通りomnibus版の場合は/etc/gitlab/gitlab-secrets.jsonにある)

  3. 移行先の環境で/etc/gitlab/gitlab-secrets.jsonを開き,gitlab_cidb_key_baseの値を2.でメモした値に書き換える.

  4. CE版であればgitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"を実行して不要になったデータを削除する? (あまりよくわかってない)


  5. gitlab-ctl startでGitLabを起動する.

これでちゃんと表示されるようになるはず.


参考ページ