GitLab Dependency Proxy 관리
- 도입됨 GitLab Premium 11.11에서.
- 이동됨 GitLab Premium에서 GitLab Free로 13.6에서.
GitLab은 자주 접근하는 업스트림 이미지를 위한 의존성 프록시로 사용할 수 있습니다.
이 문서는 관리 문서입니다. 의존성 프록시를 사용하는 방법을 배우고 싶다면, 사용자 가이드를 참고하세요.
GitLab Dependency Proxy:
- 기본적으로 활성화되어 있습니다.
- 관리자가 끌 수 있습니다.
의존성 프록시 끄기
의존성 프록시는 기본적으로 활성화되어 있습니다. 관리자인 경우 의존성 프록시를 끌 수 있습니다. 의존성 프록스를 끄려면 GitLab 설치에 해당하는 지침을 따르세요.
-
/etc/gitlab/gitlab.rb
를 편집하고 다음 줄을 추가합니다:gitlab_rails['dependency_proxy_enabled'] = false
-
파일을 저장하고 GitLab 재구성하여 변경 사항을 반영합니다.
설치가 완료된 후, 글로벌 appConfig
를 업데이트하여 의존성 프록시를 끕니다:
global:
appConfig:
dependencyProxy:
enabled: false
bucket: gitlab-dependency-proxy
connection: {}
secret:
key:
자세한 내용은 Globals를 사용하여 차트 구성하기를 참조하세요.
-
설치가 완료된 후,
config/gitlab.yml
의dependency_proxy
섹션을 구성합니다.
enabled
를false
로 설정하여 의존성 프록시를 꺼주세요:dependency_proxy: enabled: false
-
GitLab 재시작하여 변경 사항을 반영합니다.
다중 노드 GitLab 설치
각 Web 및 Sidekiq 노드에 대해 Linux 패키지 설치에 대한 단계를 따르세요.
의존성 프록시 켜기
의존성 프록시는 기본적으로 활성화되어 있지만, 관리자가 끌 수 있습니다. 수동으로 끄려면 의존성 프록시 끄기에서 지침을 따르세요.
저장소 경로 변경
기본적으로 의존성 프록시 파일은 로컬에 저장되지만, 기본 로컬 위치를 변경하거나 객체 저장소를 사용할 수도 있습니다.
로컬 저장소 경로 변경
Linux 패키지 설치의 의존성 프록시 파일은 /var/opt/gitlab/gitlab-rails/shared/dependency_proxy/
에 저장되며, 소스 설치의 경우 Git 홈 디렉토리에 상대적으로 shared/dependency_proxy/
에 저장됩니다.
-
/etc/gitlab/gitlab.rb
를 편집하고 다음 줄을 추가합니다:gitlab_rails['dependency_proxy_storage_path'] = "/mnt/dependency_proxy"
-
파일을 저장하고 GitLab 재구성하여 변경 사항을 반영합니다.
-
config/gitlab.yml
의dependency_proxy
섹션을 편집합니다:dependency_proxy: enabled: true storage_path: shared/dependency_proxy
-
GitLab 재시작하여 변경 사항을 반영합니다.
객체 저장소 사용하기
로컬 저장소에 의존하는 대신, 통합 객체 저장소 설정을 사용할 수 있습니다.
이 섹션은 이전 구성 형식을 설명합니다. 마이그레이션 단계는 여전히 적용됩니다.
GitLab과 함께 객체 저장소 사용에 대해 더 읽어보세요.
-
/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" # 버킷 이름. gitlab_rails['dependency_proxy_object_store_proxy_download'] = false # 리디렉션 대신 GitLab을 통해 모든 다운로드를 수행합니다. gitlab_rails['dependency_proxy_object_store_connection'] = { ## ## 제공자가 AWS S3인 경우, 다음의 주석을 해제합니다 ## #'provider' => 'AWS', #'region' => 'eu-west-1', #'aws_access_key_id' => 'AWS_ACCESS_KEY_ID', #'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY', ## ## 제공자가 AWS가 아닌 경우(호환 S3인 경우), 다음의 주석을 해제합니다 ## #'host' => 's3.amazonaws.com', #'aws_signature_version' => 4 # 서명된 URL 생성을 위한 것입니다. 제공자가 v4를 지원하지 않으면 2로 설정합니다. #'endpoint' => 'https://s3.amazonaws.com' # DigitalOcean Spaces와 같은 S3 호환 서비스에 유용합니다. #'path_style' => false # true인 경우 'host/bucket_name/object'를 사용하고, 그렇지 않으면 'bucket_name.host/object'를 사용합니다. }
-
파일을 저장하고 GitLab을 재구성하여 변경 사항을 적용합니다.
-
config/gitlab.yml
의dependency_proxy
섹션을 편집합니다 (필요한 곳에서 주석 해제):dependency_proxy: enabled: true ## ## 빌드 종속성이 저장되는 위치 (기본값: shared/dependency_proxy). ## # storage_path: shared/dependency_proxy object_store: enabled: false remote_directory: dependency_proxy # 버킷 이름. # proxy_download: false # 리디렉션 대신 GitLab을 통해 모든 다운로드를 수행합니다. connection: ## ## 제공자가 AWS S3인 경우, 다음을 사용합니다 ## provider: AWS region: us-east-1 aws_access_key_id: AWS_ACCESS_KEY_ID aws_secret_access_key: AWS_SECRET_ACCESS_KEY ## ## 제공자가 AWS가 아닌 경우(호환 S3인 경우), 이전 4줄의 주석을 해제하고 대신 다음을 사용합니다: ## # host: 's3.amazonaws.com' # 기본값: s3.amazonaws.com. # aws_signature_version: 4 # 서명된 URL 생성을 위한 것입니다. 제공자가 v4를 지원하지 않으면 2로 설정합니다. # endpoint: 'https://s3.amazonaws.com' # DigitalOcean Spaces와 같은 S3 호환 서비스에 유용합니다. # path_style: false # true인 경우 'host/bucket_name/object'를 사용하고, 그렇지 않으면 'bucket_name.host/object'를 사용합니다.
-
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 만료 변경
의존성 프록시는 Docker v2 토큰 인증 흐름을 따르며, 클라이언트에
풀 요청을 위해 사용할 JWT를 발급합니다. 토큰 만료 시간은 애플리케이션 설정 container_registry_token_expire_delay
를 사용하여
구성할 수 있습니다. Rails 콘솔에서 변경할 수 있습니다:
# JWT 만료를 30분으로 업데이트
ApplicationSetting.update(container_registry_token_expire_delay: 30)
기본 만료 시간과 GitLab.com의 만료 시간은 15분입니다.
프록시 뒤에서 의존성 프록시 사용하기
-
/etc/gitlab/gitlab.rb
를 편집하고 다음 줄을 추가합니다:gitlab_workhorse['env'] = { "http_proxy" => "http://USERNAME:PASSWORD@example.com:8080", "https_proxy" => "http://USERNAME:PASSWORD@example.com:8080" }
-
파일을 저장하고 변경 사항을 적용하려면 GitLab 재구성을 실행합니다.