- CLI 옵션
 - Redis
 - 상대 URL 지원
 - TLS 지원
 authBackend및authSocket의 상호작용- Metadata 옵션
 - 에러 추적
 - 분산 추적
 - 지속적인 프로파일링
 - 관련 주제
 
Workhorse 구성
역사적인 이유로 Workhorse는 다음을 사용합니다:
- 명령줄 플래그
 - 구성 파일
 - 환경 변수
 
새로운 Workhorse 구성 옵션을 구성 파일에 추가하세요.
CLI 옵션
  gitlab-workhorse [OPTIONS]
Options:
  -apiCiLongPollingDuration duration
        실행자가 작업을 요청하는 긴 폴링 지간 (기본값 50ns)
  -apiLimit uint
        1회에 허용된 API 요청 수
  -apiQueueDuration duration
        요청의 최대 대기 지간 (기본값 30초)
  -apiQueueLimit uint
        대기열에 넣을 수 있는 API 요청 수
  -authBackend string
        인증/승인 백엔드 (기본값 "http://localhost:8080")
  -authSocket string
        선택 사항: 다이얼할 authBackend의 Unix 도메인 소켓
  -cableBackend string
        ActionCable 백엔드
  -cableSocket string
        선택 사항: cableBackend에 다이얼할 Unix 도메인 소켓
  -config string
        구성을 로드할 TOML 파일
  -developmentMode
        자산을 Rails 앱에서 제공하는 것을 허용
  -documentRoot string
        정적 파일 콘텐츠 경로 (기본값 "public")
  -listenAddr string
        HTTP 서버를 위한 청취 주소 (기본값 "localhost:8181")
  -listenNetwork string
        청취 '네트워크' (tcp, tcp4, tcp6, unix) (기본값 "tcp")
  -listenUmask int
        Unix 소켓을 위한 Umask
  -logFile string
        로그 파일 위치
  -logFormat string
        사용할 로그 형식, 기본값은 텍스트 (text, json, structured, none) (기본값 "text")
  -pprofListenAddr string
        예: 'localhost:6060'에 대한 pprof 청취 주소
  -prometheusListenAddr string
        예: 'localhost:9229'에 대한 Prometheus 청취 주소
  -propagateCorrelationID X-Request-ID
        존재하는 Correlation-ID를 헤더 X-Request-ID에서 재사용하여 들어오는 요청에서
  -proxyHeadersTimeout duration
        요청을 프록시하는 동안 응답 헤더를 기다리는 시간 (기본값 5분)
  -secretPath string
        authBackend와의 인증에 사용할 비밀 키가 있는 파일 (기본값 "./.gitlab_workhorse_secret")
  -version
        버전을 출력하고 종료
‘인증 백엔드’는 GitLab Rails 애플리케이션을 가리킵니다. 이 이름은 GitLab Workhorse가 git push와 git pull만 처리했을 때의 이름에서 남아 있었습니다.
GitLab Workhorse는 TCP 또는 Unix 도메인 소켓에서 청취할 수 있습니다. 또한 Go의 net/http/pprof 프로파일러 서버를 위한 두 번째 TCP 청취 소켓을 열 수도 있습니다.
GitLab Workhorse는 유효한 TOML 구성 파일을 -config 플래그를 통해 전달하면 Redis 빌드 및 실행자 등록 이벤트를 위해 Redis에서 청취할 수 있습니다. 일반적인 설정에서는 다음만으로 충분합니다 (문자열을 실제 소켓으로 대체):
Redis
GitLab Workhorse는 CI 빌드 요청을 위해 Redis와 통합하여 긴 폴링을 수행합니다. 다음과 같이 구성하십시오:
- TOML 구성 파일에서 Redis 설정 구성
 - CI 빌드 요청의 폴링 동작을 
-apiCiLongPollingDuration명령줄 플래그로 제어 
CI 폴링을 사용하지 않고 구성 파일에서 Redis를 활성화할 수 있습니다. 이 구성은 유휴 상태의 Redis Pub/Sub 연결을 유발합니다. 그 반대는 불가능합니다: CI 긴 폴링은 정확한 Redis 구성이 필요합니다.
예를 들어, 구성 파일의 [redis] 섹션은 다음을 포함할 수 있습니다:
[redis]
URL = "unix:///var/run/gitlab/redis.sock"
Password = "내_스촌비_암호"
Sentinel = [ "tcp://sentinel1:23456", "tcp://sentinel2:23456" ]
SentinelMaster = "mymaster"
- 
URL-unix://path/to/redis.sock또는tcp://host:port형식의 문자열 - 
Password- Redis 인스턴스에 암호 보호가 필요한 경우에만 필요 - 
Sentinel- Sentinel을 사용하는 경우 필요 
Sentinel 및 URL 둘 다 제공되는 경우 Sentinel만 사용됩니다.
선택적 필드:
[redis]
DB = 0
MaxIdle = 1
MaxActive = 1
- 
DB- 연결해야 할 데이터베이스. 기본값은0입니다. - 
MaxIdle- 한 번에 Redis 풀에 가능한 최대 대기 연결 수. 기본값은1입니다. - 
MaxActive- 풀이 유지할 수 있는 최대 연결 수. 기본값은1입니다. 
상대 URL 지원
GitLab을 example.com/gitlab와 같은 상대 URL에 마운트하는 경우, authBackend 설정에서 이 상대 URL을 사용하세요:
gitlab-workhorse -authBackend http://localhost:8080/gitlab
TLS 지원
TLS를 사용하는 리스너를 구성하여 들어오는 요청에 사용할 수 있습니다. 서버의 인증서와 일치하는 개인 키가 포함된 파일의 경로를 제공해야 합니다:
[[listeners]]
network = "tcp"
addr = "localhost:3443"
[listeners.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"
certificate 파일에는 서버의 인증서, 중간 파일 및 CA의 인증서가 연결되어 있어야 합니다.
Metrics 엔드포인트도 유사하게 구성할 수 있습니다:
[metrics_listener]
network = "tcp"
addr = "localhost:9229"
[metrics_listener.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"
authBackend 및 authSocket의 상호작용
authBackend와 authSocket 간의 상호작용은 혼란스러울 수 있습니다.
authSocket이 설정된 경우, authBackend의 호스트 부분을 재정의하지만 상대 경로는 재정의하지 않습니다.
표 형태로 정리하면:
authBackend
 | authSocket
 | Workhorse가 연결하는 곳 | Rails 상대 URL | 
|---|---|---|---|
| unset | unset | localhost:8080
 | /
 | 
http://localhost:3000
 | unset | localhost:3000
 | /
 | 
http://localhost:3000/gitlab
 | unset | localhost:3000
 | /gitlab
 | 
| unset | /path/to/socket
 | /path/to/socket
 | /
 | 
http://localhost:3000
 | /path/to/socket
 | /path/to/socket
 | /
 | 
http://localhost:3000/gitlab
 | /path/to/socket
 | /path/to/socket
 | /gitlab
 | 
cableBackend 및 cableSocket에도 동일한 방식으로 적용됩니다.
Metadata 옵션
[metadata] 섹션에 다음 옵션을 포함하세요:
| 설정 | 유형 | 기본 값 | 설명 | 
|---|---|---|---|
zip_reader_limit_bytes
 | 바이트 | 104857600 (100 MB) | zip 리더를 제한하는 선택적인 바이트 수입니다. GitLab 16.9에서 도입되었습니다. | 
예시:
[metadata]
zip_reader_limit_bytes = 209715200 # 200 MB
에러 추적
GitLab-Workhorse는 Sentry를 사용한 원격 에러 추적을 지원합니다.
이 기능을 활성화하려면 GITLAB_WORKHORSE_SENTRY_DSN 환경 변수를 설정하십시오.
또한 GITLAB_WORKHORSE_SENTRY_ENVIRONMENT 환경 변수를 설정하여 Sentry 환경 기능을 사용하여 스테이징, 프로덕션 및 개발을 분리할 수 있습니다.
gitlab_workhorse['env'] = {
    'GITLAB_WORKHORSE_SENTRY_DSN' => 'https://foobar'
    'GITLAB_WORKHORSE_SENTRY_ENVIRONMENT' => 'production'
}
export GITLAB_WORKHORSE_SENTRY_DSN='https://foobar'
export GITLAB_WORKHORSE_SENTRY_ENVIRONMENT='production'
분산 추적
Workhorse는 LabKit을 통해 분산 추적을 지원하며 OpenTracing APIs를 사용합니다.
기본적으로 이진 파일에 추적 구현이 연결되어있지 않습니다. 여러 가지 OpenTracing 공급자를
빌드 태그나 make 변수 BUILD_TAGS를 설정하여 연결할 수 있습니다.
지원되는 공급자의 자세한 내용은 LabKit을 참조하십시오. Jaeger 추적 지원의 예시는 다음과 같습니다: BUILD_TAGS="tracer_static tracer_static_jaeger"를 포함합니다:
make BUILD_TAGS="tracer_static tracer_static_jaeger"
OpenTracing 공급자를 사용하여 Workhorse를 컴파일한 후, 다음과 같이 GITLAB_TRACING 환경 변수로 추적 구성을 설정하세요.
GITLAB_TRACING=opentracing://jaeger ./gitlab-workhorse
상관 ID 전파
사용자가 새 프로젝트를 생성하는 등 HTTP 요청을 할 때, 초기 요청은 Workhorse를 통해 다른 서비스로 라우팅되며
이는 다시 다른 요청을 만들 수 있습니다. 요청이 서비스 전체로 흐를 수 있게 도와주기 위해
Workhorse는 상관 ID라고 불리는 랜덤 값 생성합니다.
Workhorse는 이 상관 ID를 X-Request-Id HTTP 헤더를 통해 전송합니다.
GitLab Shell과 같은 몇몇 GitLab 서비스는 고유의 상관 ID를 생성합니다. 또한 Gitaly 같은 다른 서비스는
원래 요청에서 상관 ID를 전달하는 내부 API 호출을 생성합니다. 이 두 경우 모두, 상관 ID는
X-Request-Id HTTP 헤더를 통해 전달됩니다.
기본적으로, Workhorse는 이 헤더를 무시하고 항상 새 상관 ID를 생성합니다. 이는 디버깅을 어렵게 만들고 새 상관 ID가 완전히 원래 상관 ID와 관련이 없기 때문에 분산 추적이 올바르게 작동하지 않습니다.
Workhorse는 들어오는 상관 ID를 -propagateCorrelationID 명령줄 플래그를 통해 전파하도록 구성할 수 있습니다.
임의 값이 신뢰할 수없는 클라이언트에 의해 생성될 수 없도록 IP 허용 디렉터리과 함께 이 옵션을 사용하는 것이 매우 권장됩니다.
IP 허용 디렉터리은 Workhorse 구성 파일의 trusted_cidrs_for_propagation 옵션에 지정됩니다. 다음과 같이 신뢰할 수있는 CIDR 블록 디렉터리을 지정하세요.
trusted_cidrs_for_propagation = ["10.0.0.0/8", "127.0.0.1/32"]
trusted_cidrs_for_propagation 옵션이 작동하려면 -propagateCorrelationID 플래그를 사용해야 합니다.신뢰할 수 있는 프록시
Workhorse가 NGINX와 같은 리버스 프록시 뒤에 있으면, trusted_cidrs_for_x_forwarded_for 옵션이 필요합니다.
trusted_cidrs_for_x_forwarded_for 옵션을 사용하여 X-Forwarded-For HTTP 헤더를 통해 원본 IP 주소를 신뢰할 수 있는지 여부를 지정하세요. 예를 들어:
trusted_cidrs_for_x_forwarded_for = ["10.0.0.0/8", "127.0.0.1/32"]
지속적인 프로파일링
Workhorse는 LabKit을 통해 연속된 프로파일링을 지원하며 Stackdriver Profiler를 사용합니다. 기본적으로, Stackdriver Profiler 구현은 바이너리에 연결되어 있지만 빌드 태그를 사용하여 제외할 수 있습니다.
예를 들어:
make BUILD_TAGS=""
Workhorse를 연속된 프로파일링으로 컴파일한 후, 프로파일러 구성을 다음과 같이 GITLAB_CONTINUOUS_PROFILING 환경 변수로 설정하세요. 예를 들어:
GITLAB_CONTINUOUS_PROFILING="stackdriver?service=workhorse&service_version=1.0.1&project_id=test-123 ./gitlab-workhorse"
도움말