외부 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
    
     # POSTGRESQL_PASSWORD_HASH를 생성된 md5 값으로 교체
     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'] = '여기에_레디스_비밀번호_입력'
     gitlab_rails['redis_password'] = '여기에_레디스_비밀번호_입력'
    
  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. 단계 1 및 2를 사용하여 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`가 실패합니다.
     # 이것은 'front door' 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'] = '<레디스_마스터_비밀번호>'
    
     ### 레디스가 기본 GitLab 인스턴스에서 실행되고 위에서 설명한대로 TCP 포트를 열었을 경우 다음을 추가합니다.
     gitlab_rails['redis_host'] = '<gitlab_호스트>'
     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_호스트>: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 configuration      ###
     #######################################
     sidekiq['enable'] = true
     sidekiq['listen_address'] = "0.0.0.0"
    
     ## 사용 가능한 CPU 수와 동일한 수의 Sidekiq 대기열 프로세스 수를 설정합니다.
     sidekiq['queue_groups'] = ['*'] * 4
    
     ## 각 대기열 프로세스당 Sidekiq 스레드 수를 권장 수인 20으로 설정합니다.
     sidekiq['max_concurrency'] = 20
    
  5. GitLab 인스턴스에서 /etc/gitlab/gitlab-secrets.json 파일을 복사하고 Sidekiq 인스턴스의 파일로 교체합니다.

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

     sudo gitlab-ctl reconfigure
    
  7. 프로세스를 완료하고 데이터베이스 마이그레이션이 완료되었으면 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
    
    # 선택 사항: 모든 메트릭 서버 로그를 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가 활성화되면 앞에서 설명한 것과 동일한 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,
    
    # 기업용 에디션 전용
    # 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 그룹을 구성해야합니다.

관련 주제

문제 해결

Sidekiq를 문제 해결하기위한 관리자 가이드를 참조하십시오.