GitLabを読み取り専用状態にします。

note
GitLab 13.9以降では、GitLabを読み込み専用状態にする方法として、メンテナンスモードを有効にすることが推奨されています。

場合によっては、GitLabを読み取り専用状態にしたいこともあるでしょう。そうするための設定は、希望する結果によって異なります。

リポジトリを読み込み専用にする

まず最初に、リポジトリに変更が加えられないようにします。それには2つの方法があります:

  • Pumaを停止して内部APIにアクセスできないようにする方法です:

     sudo gitlab-ctl stop puma
    
  • またはRailsコンソールを開きます:

     sudo gitlab-rails console
    

    すべてのプロジェクトのリポジトリを読み取り専用に設定します:

     Project.all.find_each { |project| project.update!(repository_read_only: true) }
    

    これを元に戻す準備ができたら、以下のコマンドを実行してください:

     Project.all.find_each { |project| project.update!(repository_read_only: false) }
    

GitLab UI をシャットダウンします。

GitLab UIをシャットダウンしても構わないのであれば、sidekiqpumaを停止するのが最も簡単な方法です。そうすることで、GitLabに変更が加えられないようにすることができます:

sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop puma

これを元に戻す準備ができたら

sudo gitlab-ctl start sidekiq
sudo gitlab-ctl start puma

データベースを読み取り専用にします。

GitLab UI をユーザーに使用させたい場合は、データベースを読み取り専用にしてください:

  1. 期待通りにいかない場合に備えて、GitLabのバックアップを取っておきましょう。
  2. 管理ユーザーとしてコンソールから PostgreSQL に入ります:

    sudo \
        -u gitlab-psql /opt/gitlab/embedded/bin/psql \
        -h /var/opt/gitlab/postgresql gitlabhq_production
    
  3. gitlab_read_only ユーザを作成します。パスワードはmypasswordに設定されています:

    -- NOTE: Use the password defined earlier
    CREATE USER gitlab_read_only WITH password 'mypassword';
    GRANT CONNECT ON DATABASE gitlabhq_production to gitlab_read_only;
    GRANT USAGE ON SCHEMA public TO gitlab_read_only;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO gitlab_read_only;
    GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO gitlab_read_only;
       
    -- Tables created by "gitlab" should be made read-only for "gitlab_read_only"
    -- automatically.
    ALTER DEFAULT PRIVILEGES FOR USER gitlab IN SCHEMA public GRANT SELECT ON TABLES TO gitlab_read_only;
    ALTER DEFAULT PRIVILEGES FOR USER gitlab IN SCHEMA public GRANT SELECT ON SEQUENCES TO gitlab_read_only;
    
  4. gitlab_read_only ユーザーのハッシュ化されたパスワードを取得し、その結果をコピーします:

    sudo gitlab-ctl pg-password-md5 gitlab_read_only
    
  5. /etc/gitlab/gitlab.rb を編集し、前のステップのパスワードを追加します:

    postgresql['sql_user_password'] = 'a2e20f823772650f039284619ab6f239'
    postgresql['sql_user'] = "gitlab_read_only"
    
  6. GitLabを再設定し、PostgreSQLを再起動します:

    sudo gitlab-ctl reconfigure
    sudo gitlab-ctl restart postgresql
    

読み込み専用の状態に戻す準備ができたら、/etc/gitlab/gitlab.rb に追加した行を削除し、GitLab を再設定して PostgreSQL を再起動します:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart postgresql

すべてが期待通りに動くことを確認したら、データベースからgitlab_read_only ユーザーを削除します。