외부 Sidekiq 인스턴스 구성

Tier: Free, Premium, Ultimate Offering: Self-managed

GitLab 패키지에 번들로 제공되는 Sidekiq을 사용하여 외부 Sidekiq 인스턴스를 구성할 수 있습니다. Sidekiq은 Redis, PostgreSQL 및 Gitaly 인스턴스에 연결해야 합니다.

GitLab 인스턴스에서 PostgreSQL, Gitaly 및 Redis에 대한 TCP 액세스 구성

기본적으로 GitLab은 UNIX 소켓을 사용하며 TCP를 통해 통신하도록 설정되어 있지 않습니다. 이를 변경하려면:

  1. GitLab 인스턴스의 /etc/gitlab/gitlab.rb 파일을 편집하고 다음을 추가합니다.

       
    ## PostgreSQL
       
    # 생성된 md5 값을 사용하여 POSTGRESQL_PASSWORD_HASH를 대체합니다.
    postgresql['sql_user_password'] = 'POSTGRESQL_PASSWORD_HASH'
    postgresql['listen_address'] = '0.0.0.0'
    postgresql['port'] = 5432
       
    # Sidekiq 노드를 PostgreSQL의 신뢰할 수 있는 주소로 추가합니다.
    # 다음 예에서 10.10.1.30/32는 Sidekiq 서버의 사설 IP입니다.
    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'] = {
       # ...
       #
       # Gitaly가 모든 네트워크 인터페이스에서 연결을 수락하도록 설정합니다.
       listen_addr: '0.0.0.0:8075',
       auth: {
          ## Gitaly에 네트워크를 통해 액세스하기 때문에 인증 수단으로 Gitaly 토큰을 설정합니다.
          ## 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 구성
       
    redis['bind'] = '0.0.0.0'
    redis['port'] = 6379
    # Redis 인증을 위한 비밀번호
    redis['password'] = '여기에-Redis-비밀번호-입력'
    gitlab_rails['redis_password'] = '여기에-Redis-비밀번호-입력'
       
    
  2. reconfigure를 실행합니다.

    sudo gitlab-ctl reconfigure
    
  3. PostgreSQL 서버를 재시작합니다.

    sudo gitlab-ctl restart postgresql
    

Sidekiq 인스턴스 설정

  1. Sidekiq 서버에 SSH로 로그인합니다.

  2. PostgreSQL, Gitaly 및 Redis 포트에 액세스할 수 있는지 확인합니다.

    telnet <GitLab 호스트> 5432 # PostgreSQL
    telnet <GitLab 호스트> 8075 # Gitaly
    telnet <GitLab 호스트> 6379 # Redis
    
  3. 다음 단계를 사용하여 Linux 패키지를 다운로드하고 설치합니다. 다른 단계는 완료하지 마세요.

  4. GitLab 인스턴스의 /etc/gitlab/gitlab.rb 파일을 복사하고 다음 설정을 추가합니다. 반드시 여러분의 값으로 대체하세요.

   # https://docs.gitlab.com/omnibus/roles/#sidekiq-roles
   roles(["sidekiq_role"])
   
   ##
   ## 노드 간에 링크의 일관성을 유지하려면
   ## Sidekiq 서버의 `external_url`은 사용자가 GitLab에 액세스하는 외부 URL을 나타내야 합니다.
   ## - 애플리케이션 서버에 설정된 `external_url` 또는
   ## - GitLab 애플리케이션 서버로 라우팅되는 외부 로드 밸런서의 URL
   ##
   external_url 'https://gitlab.example.com'
   
   # gitlab-shell API 콜백 URL을 구성합니다. 이 설정이 없으면 `git push`가 실패합니다.
   # 이는 '프론트 도어' GitLab URL이거나 내부 로드 밸런서가 될 수 있습니다.
   gitlab_rails['internal_api_url'] = 'GITLAB_URL'
   gitlab_shell['secret_token'] = 'SHELL_TOKEN'
   
   ########################################
   ####              Redis              ###
   ########################################
   
   ## 모든 센티넬 노드에서 동일해야 합니다.
   redis['master_name'] = 'gitlab-redis' # Redis 클러스터를 설정한 경우 필요
   ## 마스터 노드에 대해 설정한 Redis 인증에 사용되는 동일한 암호입니다.
   redis['master_password'] = '<redis_master_password>'
   
   ### Redis가 기본 Gitlab 인스턴스에서 실행되고 위와 같이 TCP 포트를 열었다면 다음을 추가합니다.
   gitlab_rails['redis_host'] = '<gitlab_host>'
   gitlab_rails['redis_port'] = 6379
   
   #######################################
   ###              Gitaly             ###
   #######################################
   
   ## <gitaly_token>을 설정한 값으로 대체합니다. 자세한 내용은
   ## 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             ###
   #######################################
   
   # <database_host> 및 <database_password>를 대체하세요
   gitlab_rails['db_host'] = '<database_host>'
   gitlab_rails['db_port'] = 5432
   gitlab_rails['db_password'] = '<database_password>'
   ## 자동으로 업그레이드 시 데이터베이스 마이그레이션을 실행하지 않도록 설정
   gitlab_rails['auto_migrate'] = false
   
   #######################################
   ###      Sidekiq 구성                ###
   #######################################
   sidekiq['enable'] = true
   sidekiq['listen_address'] = "0.0.0.0"
   
   ## 사용 가능한 CPU 수와 동일한 수의 Sidekiq 대기열 프로세스 수를 설정합니다.
   sidekiq['queue_groups'] = ['*'] * 4
   
   ## 추천된 대로 각 대기열 프로세스당 Sidekiq 스레드 수를 설정합니다.
   sidekiq['max_concurrency'] = 20
  1. GitLab 인스턴스에서 /etc/gitlab/gitlab-secrets.json 파일을 복사하고 Sidekiq 인스턴스의 해당 파일로 대체합니다.

  2. GitLab을 다시 구성합니다.

    sudo gitlab-ctl reconfigure
    
  3. 프로세스를 완료하고 데이터베이스 마이그레이션을 완료한 후 Sidekiq 인스턴스를 재시작합니다.

여러 Sidekiq 노드를 공유 리포지터리로 구성하기

여러 Sidekiq 노드를 NFS와 같은 공유 파일 리포지터리로 실행하는 경우, 서버 간에 일치하는 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
       
    # 모든 메트릭 서버 로그를 log/sidekiq_exporter.log에 선택적으로 로깅합니다.
    sidekiq['exporter_log_enabled'] = true
    
  2. GitLab을 다시 구성하세요:

    sudo gitlab-ctl reconfigure
    

HTTPS 활성화

HTTPS 대신 HTTP로 메트릭을 제공하려면 수출자 설정에서 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가 활성화된 경우 HTTP와 HTTPS가 동시에 제공될 수 없습니다. 메트릭 서버는 동시에 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를 사용하는 경우, LDAP 구성을 Sidekiq 노드에 추가하고 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 전용
    # 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 그룹을 구성해야 합니다.

관련 주제

Troubleshooting

Sidekiq에 대한 관리자 가이드의 Troubleshooting을 참조하세요.