非LinuxパッケージインストールからLinuxパッケージインストールへのアップグレード

Linux以外のパッケージインストールからのアップグレードはGitLabではテストされていません。

gitlab.ymlpuma.rbsmtp_settings.rb などのファイルの設定は失われますのでご注意ください。の設定は、/etc/gitlab/gitlab.rbで行ってください。

マイグレーションを始める前に、全く同じバージョンのGitLab に移行していることを確認してください。Linux パッケージを使用するようにインストールを変換するには、以下の手順に従います:

  1. 現在のインストールからバックアップを作成します:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
    
  2. Linux パッケージを使って GitLab をインストールします。
  3. バックアップファイルを新しいサーバーのディレクトリ/var/opt/gitlab/backups/ にコピーします。
  4. 新しいインストールでバックアップを復元します(詳細な手順):

    # This command will overwrite the contents of your GitLab database!
    sudo gitlab-backup restore BACKUP=<FILE_NAME>
    

    データベースやGitデータのサイズにもよりますが、リストアには数分かかります。

  5. Linux パッケージのインストールでは、すべての設定が/etc/gitlab/gitlab.rb に保存されているため、新しいインストールを設定します。個々の設定は、gitlab.ymlpuma.rbsmtp_settings.rb などのファイルから手動で移動する必要があります。利用可能なすべてのオプションについては、gitlab.rb テンプレート を参照してください。
  6. 設定を完了するには、古いインストールから新しいインストールにシークレットをコピーします。GitLab は、データベースの暗号化やセッションの暗号化など、複数の目的でシークレットを使用します。Linux のパッケージ・インストールでは、すべてのシークレットは単一のファイル/etc/gitlab/gitlab-secrets.json に置かれますが、ソース・インストールでは、シークレットは複数のファイルに置かれます:
    1. まず、Rails に関連するシークレットを復元する必要があります。/home/git/gitlab/config/secrets.yml (セルフコンパイルインストール) のdb_key_basesecret_key_baseotp_key_base の値を、/etc/gitlab/gitlab-secrets.json (Linux パッケージインストール) の同等の値にコピーします。
    2. 次に、/home/git/gitlab-shell/.gitlab_shell_secret (GitLab ソース) の内部を、/etc/gitlab/gitlab-secrets.json (Linux パッケージインストール) の GitLab Shell のsecret_token にコピーします。以下のようになります:

      {
        "gitlab_workhorse": {
          "secret_token": "..."
        },
        "gitlab_shell": {
          "secret_token": "..."
        },
        "gitlab_rails": {
          "secret_key_base": "...",
          "db_key_base": "...",
          "otp_key_base": "...",
        }
        ...
      }
      
  7. 変更を適用するためにGitLabを再設定します:

    sudo gitlab-ctl reconfigure
    
  8. /home/git/gitlab-shell/.gitlab_shell_secret をマイグレーションした場合は、Gitalyを再起動する必要があります

    sudo gitlab-ctl restart gitaly
    

非LinuxパッケージのPostgreSQLからバックアップを使用したLinuxパッケージのインストールへのアップグレード

非Linuxパッケージのインストールからバックアップを作成し、Linuxパッケージのインストールでこれを復元することでアップグレードします。その際、GitLabのバージョンが全く同じであることを確認してください(例えば、6.7.3)。バックアップを作成する前に、非Linuxパッケージのインストールをアップグレードする必要があるかもしれません。

アップグレードしたら、チェックタスクを実行してください:

sudo gitlab-rake gitlab:check

No such file or directory @ realpath_rec - /home/git のようなエラーが表示されたら、このワンライナーを実行して Git フックのパスを修正してください:

find . -lname /home/git/gitlab-shell/hooks -exec sh -c 'ln -snf /opt/gitlab/embedded/service/gitlab-shell/hooks $0' {} \;

これは、gitlab-shell/home/git にあると仮定しています。

非LinuxパッケージのPostgreSQLからLinuxパッケージのインプレースインストールへのアップグレード

自分でコンパイルしたインストールを Linux パッケージにインプレースしてアップグレードすることもできます。以下では、Ubuntu で PostgreSQL を使っていて、現在の GitLab のバージョンにマッチする Linux パッケージがあるものとします。また、GitLabのソースインストールはデフォルトのパスとユーザーをすべて使っているものとします。

まず、GitLab、Redis、NGINXを停止して無効にします。

# Ubuntu
sudo service gitlab stop
sudo update-rc.d gitlab disable

sudo service nginx stop
sudo update-rc.d nginx disable

sudo service redis-server stop
sudo update-rc.d redis-server disable

設定管理システムを使ってサーバー上のGitLabを管理している場合は、GitLabとその関連サービスも忘れずに無効にしてください。また、以下の手順では、既存の Git ユーザー (/home/git) のホームディレクトリが/var/opt/gitlab に変更されることに注意しましょう。

次に、新しいセットアップ用にgitlab.rb ファイルを作成します:

sudo mkdir /etc/gitlab
sudo tee -a /etc/gitlab/gitlab.rb <<'EOF'
# Use your own GitLab URL here
external_url 'http://gitlab.example.com'

# We assume your repositories are in /home/git/repositories (default for source installs)
git_data_dirs({ 'default' => { 'path' => '/home/git' } })

# Re-use the PostgreSQL that is already running on your system
postgresql['enable'] = false
# This db_host setting is for Debian PostgreSQL packages
gitlab_rails['db_host'] = '/var/run/postgresql/'
gitlab_rails['db_port'] = 5432
# We assume you called the GitLab DB user 'git'
gitlab_rails['db_username'] = 'git'
EOF

Linux パッケージをインストールし、インストールを再設定します:

sudo gitlab-ctl reconfigure

まだ終わっていません!gitlab-ctl reconfigure の実行によって Git ユーザーのホーム・ディレクトリが変更されたため、OpenSSH は authorized_keys ファイルを見つけられなくなっています。次のコマンドでkeysファイルを再構築してください:

sudo gitlab-rake gitlab:shell:setup

これで、GitLab サーバーに HTTP と SSH でアクセスできるようになり、リポジトリとユーザーも以前と同じになりました。

GitLab のウェブインターフェイスにログインできたら、次はサーバーを再起動して古いサービスが Linux パッケージのインストールに干渉しないようにします。

LDAPのような特別な機能を使う場合は、設定をgitlab.rb設定のドキュメントを参照してください。