外部Sidekiqインスタンスの設定

GitLabパッケージにバンドルされているSidekiqを使用して、外部のSidekiqインスタンスを設定できます。SidekiqはRedis、PostgreSQL、Gitalyインスタンスへの接続を必要とします。

GitLabインスタンスでPostgreSQL、Gitaly、RedisのTCPアクセスを設定します。

デフォルトでは、GitLabはUNIXソケットを使い、TCP経由で通信するように設定されていません。これを変更するには

  1. GitLab インスタンスの/etc/gitlab/gitlab.rb ファイルを編集し、以下を追加します:

       
    ## PostgreSQL
       
    # Replace POSTGRESQL_PASSWORD_HASH with a generated md5 value
    postgresql['sql_user_password'] = 'POSTGRESQL_PASSWORD_HASH'
    postgresql['listen_address'] = '0.0.0.0'
    postgresql['port'] = 5432
       
    # Add the Sidekiq nodes to PostgreSQL's trusted addresses.
    # In the following example, 10.10.1.30/32 is the private IP
    # of the Sidekiq server.
    postgresql['md5_auth_cidr_addresses'] = %w(127.0.0.1/32 10.10.1.30/32)
    postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/32 10.10.1.30/32)
       
    ## Gitaly
       
    gitaly['configuration'] = {
       # ...
       #
       # Make Gitaly accept connections on all network interfaces
       listen_addr: '0.0.0.0:8075',
       auth: {
          ## Set up the Gitaly token as a form of authentication since you are accessing Gitaly over the network
          ## https://docs.gitlab.com/ee/administration/gitaly/configure_gitaly.html#about-the-gitaly-token
          token: 'abc123secret',
       },
    }
       
    gitaly['auth_token'] = ''
    praefect['configuration'][:auth][:token] = 'abc123secret'
    gitlab_rails['gitaly_token'] = 'abc123secret'
       
    ## Redis configuration
       
    redis['bind'] = '0.0.0.0'
    redis['port'] = 6379
    # Password to Authenticate Redis
    redis['password'] = 'redis-password-goes-here'
    gitlab_rails['redis_password'] = 'redis-password-goes-here'
       
    
  2. Runreconfigure

    sudo gitlab-ctl reconfigure
    
  3. PostgreSQL サーバを再起動します:

    sudo gitlab-ctl restart postgresql
    

Sidekiqインスタンスのセットアップ

  1. SidekiqサーバーにSSH接続します。

  2. PostgreSQL、Gitaly、Redisのポートにアクセスできることを確認します:

    telnet <GitLab host> 5432 # PostgreSQL
    telnet <GitLab host> 8075 # Gitaly
    telnet <GitLab host> 6379 # Redis
    
  3. ステップ 1 と 2 を使用して Linux パッケージをダウンロードし、インストールします。他の手順は行わないでください。

  4. GitLabインスタンスから/etc/gitlab/gitlab.rb ファイルをコピーし、以下の設定を追加します。必ずあなたの値に置き換えてください:

########################################
#####        Services Disabled       ###
########################################
#
# When running GitLab on just one server, you have a single `gitlab.rb`
# to enable all services you want to run.
# When running GitLab on N servers, you have N `gitlab.rb` files.
# Enable only the services you want to run on each
# specific server, while disabling all others.
#
gitaly['enable'] = false
postgresql['enable'] = false
redis['enable'] = false
nginx['enable'] = false
puma['enable'] = false
gitlab_workhorse['enable'] = false
prometheus['enable'] = false
alertmanager['enable'] = false
grafana['enable'] = false
gitlab_exporter['enable'] = false
gitlab_kas['enable'] = false

##
## To maintain uniformity of links across nodes, the
## `external_url` on the Sidekiq server should point to the external URL that users
## use to access GitLab. This can be either:
##
## - The `external_url` set on your application server.
## - The URL of a external load balancer, which routes traffic to the GitLab application server.
##
external_url 'https://gitlab.example.com'

# Configure the gitlab-shell API callback URL. Without this, `git push` will
# fail. This can be your 'front door' GitLab URL or an internal load
# balancer.
gitlab_rails['internal_api_url'] = 'GITLAB_URL'
gitlab_shell['secret_token'] = 'SHELL_TOKEN'

########################################
####              Redis              ###
########################################

## Must be the same in every sentinel node.
redis['master_name'] = 'gitlab-redis' # Required if you have setup redis cluster
## The same password for Redis authentication you set up for the master node.
redis['master_password'] = '<redis_master_password>'

### If redis is running on the main Gitlab instance and you have opened the TCP port as above add the following
gitlab_rails['redis_host'] = '<gitlab_host>'
gitlab_rails['redis_port'] = 6379

#######################################
###              Gitaly             ###
#######################################

## Replace <gitaly_token> with the one you set up, see
## https://docs.gitlab.com/ee/administration/gitaly/configure_gitaly.html#about-the-gitaly-token
git_data_dirs({
  "default" => {
     "gitaly_address" => "tcp://<gitlab_host>:8075",
     "gitaly_token" => "<gitaly_token>"
  }
})

#######################################
###            Postgres             ###
#######################################

# Replace <database_host> and <database_password>
gitlab_rails['db_host'] = '<database_host>'
gitlab_rails['db_port'] = 5432
gitlab_rails['db_password'] = '<database_password>'
## Prevent database migrations from running on upgrade automatically
gitlab_rails['auto_migrate'] = false

#######################################
###      Sidekiq configuration      ###
#######################################
sidekiq['enable'] = true
sidekiq['listen_address'] = "0.0.0.0"

## Set number of Sidekiq queue processes to the same number as available CPUs
sidekiq['queue_groups'] = ['*'] * 4

## Set number of Sidekiq threads per queue process to the recommend number of 20
sidekiq['max_concurrency'] = 20
  1. GitLabインスタンスから/etc/gitlab/gitlab-secrets.json ファイルをコピーし、Sidekiqインスタンスのファイルを置き換えます。

  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    
  3. プロセスを完了し、データベースのマイグレーションを終えたら、Sidekiqインスタンスを再起動します。

共有ストレージを使用した複数のSidekiqノードの設定

NFSなどの共有ファイルストレージを使用して複数のSidekiqノードを実行する場合、UIDとGIDを指定してサーバー間で一致させる必要があります。UIDとGIDを指定することで、ファイルシステムでの権限問題を防ぐことができます。このアドバイスは、Geo セットアップのアドバイスと同様です。

複数のSidekiqノードをセットアップするには

  1. /etc/gitlab/gitlab.rb を編集します:

    user['uid'] = 9000
    user['gid'] = 9000
    web_server['uid'] = 9001
    web_server['gid'] = 9001
    registry['uid'] = 9002
    registry['gid'] = 9002
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    

外部Sidekiq使用時のコンテナレジストリ設定

コンテナレジストリを使用しており、それがSidekiqとは異なるノード上で実行されている場合は、以下の手順に従ってください。

  1. /etc/gitlab/gitlab.rb を編集し、レジストリURLを設定します:

    gitlab_rails['registry_api_url'] = "https://registry.example.com"
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    
  3. コンテナレジストリがホストされているインスタンスで、registry.key ファイルをSidekiqノードにコピーします。

Sidekiqメトリクスサーバの設定

Sidekiqメトリクスを収集する場合は、Sidekiqメトリクス・サーバーを有効にします。localhost:8082/metrics からメトリクスを利用できるようにするには、以下の手順に従います:

メトリクス・サーバーを設定します:

  1. /etc/gitlab/gitlab.rb を編集します:

    sidekiq['metrics_enabled'] = true
    sidekiq['listen_address'] = "localhost"
    sidekiq['listen_port'] = 8082
       
    # Optionally log all the metrics server logs to log/sidekiq_exporter.log
    sidekiq['exporter_log_enabled'] = true
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    

HTTPSの有効化

GitLab 15.2 で導入されました

HTTP ではなく HTTPS 経由でメトリクスを提供するには、Exporter 設定で TLS を有効にしてください:

  1. /etc/gitlab/gitlab.rb を編集して、以下の行を追加します(または、以下の行を見つけてコメントを外します):

    sidekiq['exporter_tls_enabled'] = true
    sidekiq['exporter_tls_cert_path'] = "/path/to/certificate.pem"
    sidekiq['exporter_tls_key_path'] = "/path/to/private-key.pem"
    
  2. ファイルを保存し、変更を有効にするためにGitLab を再設定してください。

TLS を有効にすると、上記と同じportaddress が使用されます。メトリクス・サーバーは、HTTPとHTTPSの両方を同時に提供することはできません。

ヘルス・チェックの設定

ヘルスチェックプローブを使用してSidekiqを観察する場合は、Sidekiqヘルスチェックサーバーを有効にしてください。ヘルスチェックをlocalhost:8092

  1. /etc/gitlab/gitlab.rb を編集します:

    sidekiq['health_checks_enabled'] = true
    sidekiq['health_checks_listen_address'] = "localhost"
    sidekiq['health_checks_listen_port'] = 8092
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    

ヘルスチェックの詳細については、Sidekiqヘルスチェックページを参照してください。

LDAPとユーザーまたはグループの同期の設定

ユーザーとグループの管理にLDAPを使用する場合、SidekiqノードにLDAP設定とLDAP同期ワーカーを追加する必要があります。LDAP設定とLDAP同期ワーカーがSidekiqノードに適用されていない場合、ユーザーとグループは自動的に同期されません。

GitLabのLDAP設定の詳細については、こちらを参照してください:

Sidekiqの同期ワーカーでLDAPを有効にするには:

  1. 編集/etc/gitlab/gitlab.rb

    gitlab_rails['ldap_enabled'] = true
    gitlab_rails['prevent_ldap_sign_in'] = false
    gitlab_rails['ldap_servers'] = {
    'main' => {
    'label' => 'LDAP',
    'host' => 'ldap.mydomain.com',
    'port' => 389,
    'uid' => 'sAMAccountName',
    'encryption' => 'simple_tls',
    'verify_certificates' => true,
    'bind_dn' => '_the_full_dn_of_the_user_you_will_bind_with',
    'password' => '_the_password_of_the_bind_user',
    'tls_options' => {
       'ca_file' => '',
       'ssl_version' => '',
       'ciphers' => '',
       'cert' => '',
       'key' => ''
    },
    'timeout' => 10,
    'active_directory' => true,
    'allow_username_or_email_login' => false,
    'block_auto_created_users' => false,
    'base' => 'dc=example,dc=com',
    'user_filter' => '',
    'attributes' => {
       'username' => ['uid', 'userid', 'sAMAccountName'],
       'email' => ['mail', 'email', 'userPrincipalName'],
       'name' => 'cn',
       'first_name' => 'givenName',
       'last_name' => 'sn'
    },
    'lowercase_usernames' => false,
       
    # Enterprise Edition only
    # https://docs.gitlab.com/ee/administration/auth/ldap/ldap_synchronization.html
    'group_base' => '',
    'admin_group' => '',
    'external_groups' => [],
    'sync_ssh_keys' => false
    }
    }
    gitlab_rails['ldap_sync_worker_cron'] = "0 */12 * * *"
    
  2. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    

SAMLグループ同期のためのSAMLグループの設定

SAMLグループ同期を使用する場合、すべてのSidekiqノードでSAMLグループを設定する必要があります。

Ruggedの無効化

Rugged、libgit2 の Ruby バインディングへの呼び出しは、Sidekiq プロセス(GVL)ロックし、そのワーカー上のすべてのジョブの進行をブロックします。Sidekiq によって実行される Rugged 呼び出しが遅い場合、バックグラウンドタスクの処理に大きな遅延が発生する可能性があります。

デフォルトでは、GitリポジトリデータがローカルストレージまたはNFSマウント上に保存されている場合、Ruggedが使用されます。NFSを使用する場合はRuggedの使用を推奨しますが、ローカルストレージを使用する場合はRuggedを無効にするとSidekiqのパフォーマンスが向上します:

sudo gitlab-rake gitlab:features:disable_rugged

トラブルシューティング

Sidekiqのトラブルシューティングについては管理者ガイドをご覧ください。