GitLab Dependency Proxy 관리

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

GitLab은 자주 액세스하는 업스트림 이미지에 대한 의존성 프록시로 사용할 수 있습니다.

이 문서는 관리 문서입니다. 의존성 프록시를 사용하는 방법을 알고 싶다면 사용자 가이드를 참조하세요.

GitLab 의존성 프록시:

  • 기본적으로 켜져 있습니다.
  • 관리자가 끌 수 있습니다.

의존성 프록시 끄기

의존성 프록시는 기본적으로 활성화되어 있습니다. 관리자인 경우 의존성 프록시를 끌 수 있습니다. 의존성 프록시를 끄려면 GitLab 설치에 해당하는 지침을 따르세요.

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하고 다음 줄을 추가합니다:

    gitlab_rails['dependency_proxy_enabled'] = false
    
  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 다시 구성합니다.

Helm 차트 (Kubernetes)

설치가 완료된 후, 전역 appConfig를 업데이트하여 의존성 프록시를 끕니다:

global:
  appConfig:
    dependencyProxy:
      enabled: false
      bucket: gitlab-dependency-proxy
      connection: {}
       secret:
       key:

자세한 내용은 Globals를 사용하여 차트 구성을 참조하세요.

직접 컴파일 (소스)
  1. 설치가 완료된 후, config/gitlab.yml에서 dependency_proxy 섹션을 구성합니다. 의존성 프록시를 끄려면 enabledfalse로 설정하세요:

    dependency_proxy:
      enabled: false
    
  2. 변경 사항이 적용되도록 GitLab을 다시 시작합니다.

다중 노드 GitLab 설치

각 Web 및 Sidekiq 노드에 대해 Linux 패키지 설치 지침을 따르세요.

의존성 프록시 켜기

기본적으로 의존성 프록시가 활성화되어 있지만 관리자가 꺼도 됩니다. 매뉴얼으로 끄려면 의존성 프록시 끄기에서 지침을 따르세요.

저장 경로 변경

기본적으로 의존성 프록시 파일은 로컬에 저장되지만 기본 로컬 위치를 변경하거나 객체 리포지터리를 사용할 수 있습니다.

로컬 저장 경로 변경

Linux 패키지 설치의 경우 의존성 프록시 파일은 /var/opt/gitlab/gitlab-rails/shared/dependency_proxy/에, 소스 설치의 경우 shared/dependency_proxy/에 저장됩니다 (Git 홈 디렉터리를 기준으로 함).

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하고 다음 줄을 추가합니다:

    gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy"
    
  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 다시 구성합니다.

직접 컴파일 (소스)
  1. config/gitlab.yml에서 dependency_proxy 섹션을 편집합니다:

    dependency_proxy:
      enabled: true
      storage_path: shared/dependency_proxy
    
  2. 변경 사항이 적용되도록 GitLab을 다시 시작합니다.

객체 리포지터리 사용

로컬 리포지터리를 의존하지 말고 통합된 객체 리포지터리 설정을 사용할 수 있습니다. 이 섹션은 이전 구성 형식을 설명합니다. 마이그레이션 단계가 여전히 적용됩니다.

GitLab과 객체 리포지터리를 사용에 대해 더 읽어보기.

Linux 패키지 (Omnibus)
  1. /etc/gitlab/gitlab.rb 파일을 편집하고 다음 줄을 추가합니다 (필요한 곳은 주석을 해제하세요):

    gitlab_rails['dependency_proxy_enabled'] = true
    gitlab_rails['dependency_proxy_storage_path'] = "/var/opt/gitlab/gitlab-rails/shared/dependency_proxy"
    gitlab_rails['dependency_proxy_object_store_enabled'] = true
    gitlab_rails['dependency_proxy_object_store_remote_directory'] = "dependency_proxy" # The bucket name.
    gitlab_rails['dependency_proxy_object_store_proxy_download'] = false        # Passthrough all downloads via GitLab instead of using Redirects to Object Storage.
    gitlab_rails['dependency_proxy_object_store_connection'] = {
      ##
      ## If the provider is AWS S3, uncomment the following
      ##
      #'provider' => 'AWS',
      #'region' => 'eu-west-1',
      #'aws_access_key_id' => 'AWS_ACCESS_KEY_ID',
      #'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY',
      ##
      ## If the provider is other than AWS (an S3-compatible one), uncomment the following
      ##
      #'host' => 's3.amazonaws.com',
      #'aws_signature_version' => 4             # For creation of signed URLs. Set to 2 if provider does not support v4.
      #'endpoint' => 'https://s3.amazonaws.com' # Useful for S3-compliant services such as DigitalOcean Spaces.
      #'path_style' => false                    # If true, use 'host/bucket_name/object' instead of 'bucket_name.host/object'.
    }
    
  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 다시 구성합니다.

직접 컴파일 (소스)
  1. config/gitlab.yml에서 dependency_proxy 섹션을 편집합니다 (필요한 곳은 주석을 해제하세요):

    dependency_proxy:
      enabled: true
      ##
      ## build dependency_proxy are stored (default: shared/dependency_proxy).
      ##
      # storage_path: shared/dependency_proxy
      object_store:
        enabled: false
        remote_directory: dependency_proxy  # The bucket name.
        #  proxy_download: false     # Passthrough all downloads via GitLab instead of using Redirects to Object Storage.
        connection:
        ##
        ## If the provider is AWS S3, use the following
        ##
          provider: AWS
          region: us-east-1
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
          ##
          ## If the provider is other than AWS (an S3-compatible one), comment out the previous 4 lines and use the following instead:
          ##
          #  host: 's3.amazonaws.com'             # default: s3.amazonaws.com.
          #  aws_signature_version: 4             # For creation of signed URLs. Set to 2 if provider does not support v4.
          #  endpoint: 'https://s3.amazonaws.com' # Useful for S3-compliant services such as DigitalOcean Spaces.
          #  path_style: false                    # If true, use 'host/bucket_name/object' instead of 'bucket_name.host/object'.
    
  2. 변경 사항이 적용되도록 GitLab을 다시 시작합니다.

로컬 의존성 프록시 블롭 및 매니페스트를 객체 스토리지로 이관

객체 스토리지 사용하기 후에, 다음 작업을 사용하여 기존의 로컬 스토리지에 있는 의존성 프록시 블롭 및 매니페스트를 원격 스토리지로 이관할 수 있습니다. 처리는 백그라운드 워커에서 이루어지며 다운타임이 필요하지 않습니다.

  • Linux 패키지 설치의 경우:

    sudo gitlab-rake "gitlab:dependency_proxy:migrate"
    
  • 직접 컴파일한 설치의 경우:

    RAILS_ENV=production sudo -u git -H bundle exec rake gitlab:dependency_proxy:migrate
    

모든 의존성 프록시 블롭 및 매니페스트가 성공적으로 이관되었는지 진행 상황을 선택적으로 추적하고 확인할 수 있습니다. PostgreSQL 콘솔을 사용하세요:

  • 버전 14.1 이전의 Linux 패키지 설치의 경우 sudo gitlab-rails dbconsole.
  • 버전 14.2 이후의 Linux 패키지 설치의 경우 sudo gitlab-rails dbconsole --database main.
  • 직접 컴파일한 인스턴스의 경우 sudo -u git -H psql -d gitlabhq_production.

objectstg (여기서 file_store = '2')에 각각의 쿼리에 대한 모든 의존성 프록시 블롭 및 매니페스트의 개수를 확인하세요:

gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM dependency_proxy_blobs;

total | filesystem | objectstg
------+------------+-----------
 22  |          0 |        22

gitlabhq_production=# SELECT count(*) AS total, sum(case when file_store = '1' then 1 else 0 end) AS filesystem, sum(case when file_store = '2' then 1 else 0 end) AS objectstg FROM dependency_proxy_manifests;

total | filesystem | objectstg
------+------------+-----------
 10  |          0 |        10

dependency_proxy 폴더의 디스크에 파일이 없는지 확인하세요:

sudo find /var/opt/gitlab/gitlab-rails/shared/dependency_proxy -type f | grep -v tmp | wc -l

JWT 만료 시간 변경

의존성 프록시는 클라이언트에게 JWT를 발급하여 풀 요청에 사용하는 Docker v2 토큰 인증 흐름을 따릅니다. 토큰 만료 시간은 애플리케이션 설정인 container_registry_token_expire_delay을 통해 구성할 수 있습니다. Rails 콘솔에서 다음과 같이 변경할 수 있습니다:

# JWT 만료 시간을 30분으로 업데이트
ApplicationSetting.update(container_registry_token_expire_delay: 30)

기본 만료 기간 및 GitLab.com의 만료 기간은 15분입니다.

프록시 뒤에 의존성 프록시 사용하기

  1. /etc/gitlab/gitlab.rb 파일을 편집하고 다음 라인을 추가합니다:

    gitlab_workhorse['env'] = {
     "http_proxy" => "http://USERNAME:PASSWORD@example.com:8080",
     "https_proxy" => "http://USERNAME:PASSWORD@example.com:8080"
    
  2. 파일을 저장하고 변경 사항이 적용되도록 GitLab을 다시 구성하세요.