정적 객체용 외부 저장소
GitLab을 구성하여 아카이브 또는 원시 블롭과 같은 저장소 정적 객체를 외부 저장소(예: 콘텐츠 전달 네트워크(CDN))에서 제공하도록 설정합니다.
외부 저장소 구성
정적 객체용 외부 저장소를 구성하려면 다음을 수행합니다:
- 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
- 설정 > 저장소를 선택합니다.
- 저장소 정적 객체용 외부 저장소를 확장합니다.
- 기본 URL과 임의의 토큰을 입력합니다. 외부 저장소를 설정하려면 이 값을
ORIGIN_HOSTNAME
과STORAGE_TOKEN
으로 설정하는 스크립트를 사용합니다. - 변경 사항 저장을 선택합니다.
사용자가 외부 저장소를 우회하고 애플리케이션에 직접 액세스하지 못하도록 이 토큰이 필요합니다. GitLab은 외부 저장소에서 시작된 요청의 X-Gitlab-External-Storage-Token
헤더에 이 토큰이 설정되기를 기대합니다.
비공개 정적 객체 제공
GitLab은 비공개 프로젝트에 속하는 정적 객체 URL에 대해 사용자별 토큰을 추가하여 외부 저장소가 사용자를 대신해서 인증할 수 있도록 합니다.
외부 저장소에서 시작된 요청을 처리할 때 GitLab은 사용자가 요청한 객체에 액세스할 수 있는 사용자를 확인하기 위해 다음을 확인합니다:
-
token
쿼리 매개변수. -
X-Gitlab-Static-Object-Token
헤더.
요청 흐름 예시
다음 예시는 다음 간의 일련의 요청 및 응답을 보여줍니다:
- 사용자.
- GitLab.
- 콘텐츠 전달 네트워크.
외부 저장소 설정
이 절차에서는 외부 저장소로 Cloudflare Workers를 사용하지만, 다른 CDN이나 FaaS(Function as a Service) 시스템도 동일한 원칙을 사용하여 작동해야 합니다.
- 아직 수행하지 않았다면 Cloudflare Worker 도메인을 선택하세요.
-
다음 스크립트에서 첫 번째 두 상수에 대해 다음 값을 설정하세요:
-
ORIGIN_HOSTNAME
: GitLab 설치의 호스트명. -
STORAGE_TOKEN
: 임의의 안전한 토큰입니다. UNIX 기계에서pwgen -cn1 64
를 실행하여 토큰을 얻을 수 있습니다. 이 토큰을 구성 섹션에 설명된 대로 Admin 영역에 저장하세요.const ORIGIN_HOSTNAME = 'gitlab.installation.com' // FIXME: 올바른 값으로 설정 const STORAGE_TOKEN = 'very-secure-token' // FIXME: 올바른 값으로 설정 const CACHE_PRIVATE_OBJECTS = false const CORS_HEADERS = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS', 'Access-Control-Allow-Headers': 'X-Csrf-Token, X-Requested-With', } self.addEventListener('fetch', event => event.respondWith(handle(event))) async function handle(event) { try { let response = await verifyAndHandle(event); // 캐시에서 반환된 응답은 변경할 수 없으므로 // CORS 헤더를 설정하기 위해 다시 만듭니다 response = new Response(response.body, response) response.headers.set('Access-Control-Allow-Origin', '*') return response } catch (e) { return new Response('오류가 발생했습니다!', {status: e.statusCode || 500}) } } // 나머지 코드는 생략합니다.
-
- 이 스크립트로 새 워커를 만듭니다.
-
ORIGIN_HOSTNAME
및STORAGE_TOKEN
의 값을 복사합니다. 해당 값은 정적 객체용 외부 저장소를 구성하기 위해 사용됩니다.