- GitLab 페이지 요구 사항
- GitLab.com의 GitLab 페이지
- 예시 프로젝트
- 사용자 지정 오류 코드 페이지
- GitLab Pages에서 리디렉션
- 페이지 삭제
- 서브도메인의 서브도메인
- 프로젝트 및 그룹의 GitLab Pages
- Pages용 특정 구성 옵션
- 기본 폴더 사용자 정의
- 알려진 문제점
- 문제 해결
GitLab 페이지 설정
이 문서는 GitLab Pages가 제공하는 옵션과 설정을 탐색하는 사용자 가이드입니다.
우선 GitLab Pages에 대해 익숙해지려면:
- GitLab Pages 소개를 읽어보세요.
- Pages 시작하기를 배우세요.
- 귀하의 GitLab 인스턴스 전체에서 GitLab Pages를 활성화하는 방법은 관리자 문서를 확인하세요.
GitLab 페이지 요구 사항
간단히 말해서, GitLab Pages에 웹사이트를 업로드하기 위해 필요한 것은 다음과 같습니다:
- 인스턴스의 도메인: GitLab Pages에 사용되는 도메인 이름 (관리자에게 문의하세요).
- GitLab CI/CD: 리포지토리의 루트 디렉토리에 특정 작업인
pages
가 포함된.gitlab-ci.yml
파일. - 프로젝트용으로 활성화된 GitLab Runner.
GitLab.com의 GitLab 페이지
만약 귀하의 웹사이트를 호스팅하기 위해 GitLab.com의 GitLab Pages를 사용 중이라면:
- GitLab.com의 GitLab Pages의 도메인 이름은
gitlab.io
입니다. - 사용자 정의 도메인 및 TLS 지원이 활성화되어 있습니다.
- 인스턴스 러너는 기본적으로 활성화되어 있으며 무료로 제공되며 귀하의 웹사이트를 빌드하는 데 사용할 수 있습니다. 원하시면 직접 러너를 가져올 수도 있습니다.
예시 프로젝트
예시 프로젝트의 전체 목록을 보려면 GitLab Pages 그룹을 방문하세요. 기여를 환영합니다.
사용자 지정 오류 코드 페이지
403.html
및 404.html
파일을 public/
디렉토리의 루트에 생성함으로써 자체 403
및 404
오류 페이지를 제공할 수 있습니다. 보통 이는 프로젝트의 루트 디렉토리이지만 정적 생성기 구성에 따라 다를 수 있습니다.
예를 들어, 404.html
의 경우 다양한 시나리오가 있습니다. 예를 들어:
- 프로젝트 페이지(
/project-slug/
하위에 서비스됨)를 사용하여/project-slug/non/existing_file
에 액세스하려고 하는 경우, GitLab Pages는 먼저/project-slug/404.html
, 그 다음/404.html
을 제공하려고 합니다. - 사용자 또는 그룹 페이지(
/
하위에 서비스됨)를 사용하여/non/existing_file
에 액세스하려고 하는 경우, GitLab Pages는/404.html
만을 제공하려고 합니다. - 사용자 정의 도메인을 사용하여
/non/existing_file
에 액세스하려고 하는 경우, GitLab Pages는/404.html
만을 제공하려고 합니다.
GitLab Pages에서 리디렉션
_redirects
파일을 사용하여 사이트의 리디렉션을 구성할 수 있습니다. 자세한 정보는 GitLab Pages용 리디렉션 작성을 참조하세요.
페이지 삭제
페이지를 삭제하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 배포 > 페이지를 선택합니다.
- 페이지 제거를 선택합니다.
서브도메인의 서브도메인
GitLab 인스턴스의 최상위 도메인(*.example.io
)에서 Pages를 사용할 때, 하위 도메인에 HTTPS를 사용할 수 없습니다.
네임스페이스나 그룹 이름에 점(.
)이 포함된 경우(예: foo.bar
), 도메인 https://foo.bar.example.io
는 작동하지 않습니다.
이 제한은 HTTP Over TLS 프로토콜 때문에 발생합니다. HTTP 페이지는 HTTP를 HTTPS로 리디렉트하지 않는 한 작동합니다.
프로젝트 및 그룹의 GitLab Pages
GitLab Pages 웹사이트를 프로젝트에 호스팅해야 합니다. 이 프로젝트는 비공개, 내부, 또는 공개일 수 있으며 그룹 또는 하위 그룹에 속할 수 있습니다.
그룹 웹사이트의 경우, 그룹은 최상위 여야 하며 하위 그룹이 아니어야 합니다.
프로젝트 웹사이트의 경우, 프로젝트를 먼저 생성하고 http(s)://namespace.example.io/project-path
에서 액세스할 수 있습니다.
Pages용 특정 구성 옵션
특정 사용 사례에 대한 GitLab CI/CD 설정 방법을 배우세요.
평범한 HTML 웹사이트용 .gitlab-ci.yml
만약 귀하의 리포지토리에 다음과 같은 파일이 포함되어 있다면:
├── index.html
├── css
│ └── main.css
└── js
└── main.js
그럼 아래의 .gitlab-ci.yml
예제는 프로젝트의 루트 디렉토리에 있는 모든 파일을 public/
디렉토리로 이동합니다. .public
회피책은 cp
가 무한 루프에서 public/
을 자신에게 더 복사하지 않도록 하는 것입니다:
pages:
script:
- mkdir .public
- cp -r * .public
- mv .public public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
정적 사이트 생성기용 .gitlab-ci.yml
단계별 가이드를 위해 이 문서를 참조하세요.
코드가 포함된 리포지토리용 .gitlab-ci.yml
GitLab Pages는 기본적으로 브랜치/태그에 구애받지 않으며 배포는 .gitlab-ci.yml
에서 지정한 내용에 따라 수행됩니다. 특정 커밋이 귀하의 페이지용으로 사용하는 브랜치로 푸시될 때를 위해 pages
작업을 rules:if
로 제한할 수 있습니다.
이러한 방식으로 프로젝트 코드를 main
브랜치에 두고 정적 생성기 사이트를 호스트하기 위해 고립된 브랜치(이름을 pages
로 지정)를 사용할 수 있습니다.
이렇게 빈 브랜치를 다음과 같이 생성할 수 있습니다:
git checkout --orphan pages
이 새로운 브랜치에서 만든 첫 커밋은 부모가 없으며 모든 다른 브랜치와 커밋과 완전히 분리된 새로운 히스토리의 루트입니다. 정적 생성기의 소스 파일을 pages
브랜치에 푸시하세요.
아래는 중요한 부분이 마지막 줄에 지정된 .gitlab-ci.yml
의 복사본입니다:
image: ruby:2.6
pages:
script:
- gem install jekyll
- jekyll build -d public/
artifacts:
paths:
- public
rules:
- if: '$CI_COMMIT_REF_NAME == "pages"'
main
브랜치에 서로 다른 파일이 있는 예시와 Jekyll의 소스 파일이 포함된 pages
브랜치 및 .gitlab-ci.yml
의 예시를 참조하세요.
압축된 에셋 제공
대부분의 현대 브라우저는 파일을 압축된 형식으로 다운로드하는 것을 지원합니다. 이를 통해 파일 크기를 줄여 다운로드 속도를 높일 수 있습니다.
압축되지 않은 파일을 제공하기 전에 Pages는 동일한 파일이 .br
또는 .gz
확장자로 존재하는지 확인합니다. 그리고 브라우저가 압축 파일을 수신하는 것을 지원하고 있다면, 압축을 해제한 파일 대신 해당 버전을 제공합니다.
이 기능을 활용하기 위해서는 업로드하는 아티팩트가 다음 구조를 가져야 합니다:
public/
├─┬ index.html
│ | index.html.br
│ └ index.html.gz
│
├── css/
│ └─┬ main.css
│ | main.css.br
│ └ main.css.gz
│
└── js/
└─┬ main.js
| main.js.br
└ main.js.gz
이는 .gitlab-ci.yml
페이지 작업에 이와 같은 script:
명령을 포함시켜서 달성할 수 있습니다:
pages:
# 기타 지시문
script:
# 먼저 public/ 디렉토리를 빌드합니다
- find public -type f -regex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -exec gzip -f -k {} \;
- find public -type f -regex '.*\.\(htm\|html\|txt\|text\|js\|css\)$' -exec brotli -f -k {} \;
파일을 미리 압축하고 아티팩트에 두 가지 버전을 포함시킴으로써, Pages는 파일을 요청받을 때 압축 및 압축 해제 과정 없이 두 가지 형식으로 모두 제공할 수 있습니다.
모호한 URL 해결
GitLab Pages는 확장자를 포함하지 않은 URL에 대한 파일 제공에 관한 가정을 합니다.
다음과 같이 배포된 페이지 사이트를 고려해보세요:
public/
├── index.html
├── data.html
├── info.html
├── data/
│ └── index.html
└── info/
└── details.html
Pages는 각각의 파일에 여러 가지 다른 URL 경로를 통해 도달할 수 있습니다. 특히, URL이 디렉토리만을 지정할 경우 항상 index.html
파일을 찾게 됩니다. URL이 존재하지 않는 파일을 참조하더라도 URL에 .html
을 추가하면 존재하는 파일을 대신 제공합니다. 위의 Pages 사이트에 대한 몇 가지 예시를 살펴보겠습니다:
URL 경로 | HTTP 응답 |
---|---|
/
|
200 OK : public/index.html
|
/index.html
|
200 OK : public/index.html
|
/index
|
200 OK : public/index.html
|
/data
|
302 Found : /data/ 로 리디렉션
|
/data/
|
200 OK : public/data/index.html
|
/data.html
|
200 OK : public/data.html
|
/info
|
302 Found : /info/ 로 리디렉션
|
/info/
|
404 Not Found 에러 페이지
|
/info.html
|
200 OK : public/info.html
|
/info/details
|
200 OK : public/info/details.html
|
/info/details.html
|
200 OK : public/info/details.html
|
public/data/index.html
이 존재하는 경우, /data
및 /data/
URL 경로 모두에 대해 public/data.html
파일 보다 우선시됩니다.
기본 폴더 사용자 정의
- GitLab 16.1에서
FF_CONFIGURABLE_ROOT_DIR
이라는 Pages 플래그로 도입. 기본값은 비활성화됨.- GitLab 16.1부터 GitLab.com에서 활성화됨.
- GitLab 16.2에서 셀프 매니지드에서 활성화됨.
기본적으로 사이트의 정적 파일을 포함하는 아티팩트 폴더의 이름은 public
이어야 합니다.
다른 값을 사용하려면 .gitlab-ci.yml
의 pages
작업 구성에 publish
속성을 추가하세요.
다음 예시는 대신 dist
라는 폴더를 게시하는 예시입니다:
pages:
script:
- npm run build
artifacts:
paths:
- dist
publish: dist
public
이라는 이름의 폴더가 아닌 다른 이름의 폴더를 사용하는 경우, 아티팩트로서와 publish
속성 하에 배포될 디렉토리를 양쪽에서 모두 명시해야 합니다. 여기서 양쪽 모두 명시해야 하는 이유는 여러 경로를 아티팩트로 정의할 수 있고, GitLab은 어느 경로를 배포해야 하는지 모르기 때문입니다.
알려진 문제점
알려진 문제점 목록은 GitLab의 공개 이슈 트래커를 확인하세요.
문제 해결
GitLab Pages 사이트 URL에 액세스할 때 404 오류
이 문제는 공개 디렉토리에 index.html
파일이 없는 경우에 발생할 가능성이 가장 높습니다. Pages 사이트를 배포한 후 404 오류가 발생하면, 공개 디렉토리에 index.html
파일이 있는지 확인하세요. test.html
과 같은 다른 이름의 파일이 있다면 Pages 사이트에는 여전히 액세스할 수 있지만 전체 경로가 필요합니다. 예를 들어: https//group-name.pages.example.com/project-slug/test.html
.
최신 파이프라인에서 아티팩트 탐색을 통해 공개 디렉토리의 내용을 확인할 수 있습니다.
공개 디렉토리에 나열된 파일은 프로젝트의 Pages URL을 통해 액세스할 수 있습니다.
404 오류는 올바르지 않은 권한과 관련될 수 있습니다. Pages Access Control이 활성화된 경우, Pages URL에 이동하고 404 응답을 받는 경우, 사용자가 사이트를 볼 수 있는 권한을 가지고 있지 않을 수 있습니다. 이를 해결하려면 사용자가 프로젝트 멤버임을 확인하세요.
깨진 상대적 링크
GitLab Pages는 확장자 없는 URL을 지원합니다. 그러나 이슈 #354에 설명된 문제로, 확장자 없는 URL이 슬래시(/
)로 끝나는 경우 페이지의 상대적 링크가 깨집니다.
이 문제를 해결하기 위해:
- Pages 사이트를 가리키는 URL에 확장자가 포함되거나 슬래시를 포함하지 않도록 확인하세요.
- 가능한 경우 사이트에서 절대적 URL만 사용하세요.
Safari에서 미디어 콘텐츠를 재생할 수 없음
Safari는 미디어 콘텐츠를 재생하기 위해 웹 서버가 범위 요청 헤더를 지원해야 합니다. GitLab Pages가 HTTP 범위 요청을 제공하려면 .gitlab-ci.yml
파일에서 다음 두 변수를 사용해야 합니다:
pages:
stage: deploy
variables:
FF_USE_FASTZIP: "true"
ARTIFACT_COMPRESSION_LEVEL: "fastest"
script:
- echo "Deploying pages"
artifacts:
paths:
- public
environment: production
FF_USE_FASTZIP
변수는 ARTIFACT_COMPRESSION_LEVEL
에 필요한 기능 플래그를 활성화합니다.