正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLabを読み取り専用状態にする

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

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) }

    読み取り専用にするリポジトリのサブセットのみを設定するには、次を実行します:

    # List of project IDs of projects to set to read-only.
    projects = [1,2,3]
    
    projects.each do |p|
     project =  Project.find p
     project.update!(repository_read_only: true)
     rescue ActiveRecord::RecordNotFound
     puts "Project ID #{p} not found"
    
    end

    これを元に戻す準備ができたら、プロジェクトのrepository_read_onlyfalseに変更します。たとえば、次を実行します:

    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ユーザーを削除します。