Docker 컨테이너에서 실행되는 GitLab 구성하기

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

이 컨테이너는 공식 Linux 패키지를 사용하므로,
고유한 구성 파일인 /etc/gitlab/gitlab.rb를 사용하여 인스턴스를 구성할 수 있습니다.

구성 파일 편집

GitLab 구성 파일에 접근하려면,
실행 중인 컨테이너의 컨텍스트에서 셸 세션을 시작할 수 있습니다.

  1. 세션 시작:

    sudo docker exec -it gitlab /bin/bash  
    

    또는 편집기에서 직접 /etc/gitlab/gitlab.rb를 열 수 있습니다:

    sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb  
    
  2. 원하는 텍스트 편집기에서 /etc/gitlab/gitlab.rb를 열고 다음 필드를 업데이트합니다:

    1. external_url 필드를
      GitLab 인스턴스의 유효한 URL로 설정합니다.

    2. GitLab에서 이메일을 수신하려면,
      SMTP 설정을 구성합니다. GitLab Docker 이미지는
      기존에 SMTP 서버가 설치되어 있지 않습니다.

    3. 필요에 따라
      HTTPS를 활성화합니다.

  3. 파일을 저장하고 컨테이너를 다시 시작하여 GitLab을 재구성합니다:

    sudo docker restart gitlab  
    

GitLab은 컨테이너가 시작될 때마다 스스로를 재구성합니다.
GitLab에서 더 많은 구성 옵션에 대해서는
구성 문서를 참조하세요.

Docker 컨테이너 미리 구성하기

GitLab Docker 이미지를 미리 구성하려면,
Docker 실행 명령에 환경 변수 GITLAB_OMNIBUS_CONFIG를 추가할 수 있습니다. 이 변수는 모든
gitlab.rb 설정을 포함할 수 있으며, 컨테이너의
gitlab.rb 파일 로딩 전에 평가됩니다. 이 동작은 외부 GitLab URL을 구성하고,
데이터베이스 구성이나 기타 옵션을
Linux 패키지 템플릿에서 가져올 수 있게 해줍니다. GITLAB_OMNIBUS_CONFIG에 포함된 설정은
gitlab.rb 구성 파일에 기록되지 않으며 로드 시 평가됩니다. 여러 설정을 제공하려면,
콜론(;)으로 구분합니다.

다음 예시는 외부 URL을 설정하고, LFS를 활성화하며,
Prometheus에 필요한 최소 shm 크기로 컨테이너를 시작합니다:

sudo docker run --detach \  
  --hostname gitlab.example.com \  
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'; gitlab_rails['lfs_enabled'] = true;" \  
  --publish 443:443 --publish 80:80 --publish 22:22 \  
  --name gitlab \  
  --restart always \  
  --volume $GITLAB_HOME/config:/etc/gitlab \  
  --volume $GITLAB_HOME/logs:/var/log/gitlab \  
  --volume $GITLAB_HOME/data:/var/opt/gitlab \  
  --shm-size 256m \  
  gitlab/gitlab-ee:<version>-ee.0  

docker run 명령을 실행할 때마다,
GITLAB_OMNIBUS_CONFIG 옵션을 제공해야 합니다. GITLAB_OMNIBUS_CONFIG의 내용은
후속 실행 간에 보존되지 않습니다.

GitLab을 공공 IP 주소에서 실행하기

Docker가 귀하의 IP 주소를 사용하고 모든 트래픽을 GitLab 컨테이너로 포워딩하도록 --publish 플래그를 수정할 수 있습니다.

IP 198.51.100.1에서 GitLab을 노출하려면:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \
  --publish 198.51.100.1:443:443 \
  --publish 198.51.100.1:80:80 \
  --publish 198.51.100.1:22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee:<version>-ee.0

그런 다음 http://198.51.100.1/https://198.51.100.1/에서 GitLab 인스턴스에 액세스할 수 있습니다.

다른 포트에 GitLab 노출하기

GitLab은 컨테이너 내에서 특정 포트를 차지합니다.

기본 포트 80 (HTTP), 443 (HTTPS) 또는 22 (SSH)와 다른 호스트 포트를 사용하려면 docker run 명령에 별도의 --publish 지시문을 추가해야 합니다.

예를 들어, 웹 인터페이스를 호스트의 포트 8929에서 노출하고, SSH 서비스를 포트 2424에서 노출하려면:

  1. 다음 docker run 명령을 사용하십시오:

    sudo docker run --detach \
      --hostname gitlab.example.com \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com:8929'; gitlab_rails['gitlab_shell_ssh_port'] = 2424" \
      --publish 8929:8929 --publish 2424:22 \
      --name gitlab \
      --restart always \
      --volume $GITLAB_HOME/config:/etc/gitlab \
      --volume $GITLAB_HOME/logs:/var/log/gitlab \
      --volume $GITLAB_HOME/data:/var/opt/gitlab \
      --shm-size 256m \
      gitlab/gitlab-ee:<version>-ee.0
    

    참고: 포트를 게시하는 형식은 hostPort:containerPort입니다. 수신 포트 노출에 대한 Docker 문서를 참조하십시오.

  2. 실행 중인 컨테이너에 들어갑니다:

    sudo docker exec -it gitlab /bin/bash
    
  3. 편집기로 /etc/gitlab/gitlab.rb 파일을 열고 external_url을 설정합니다:

    # HTTP용
    external_url "http://gitlab.example.com:8929"
    
    또는
    
    # HTTPS용 (https 주의)
    external_url "https://gitlab.example.com:8929"
    

    이 URL에 지정된 포트는 Docker가 호스트에 게시한 포트와 일치해야 합니다.

    추가로, nginx['listen_port']에 NGINX 리슨 포트가 명시적으로 설정되지 않은 경우, external_url이 대신 사용됩니다.

    자세한 내용은 NGINX 문서를 참조하십시오.

  4. SSH 포트를 설정합니다:

    gitlab_rails['gitlab_shell_ssh_port'] = 2424
    
  5. 마지막으로, GitLab을 재구성합니다:

    gitlab-ctl reconfigure
    

위의 예를 따르면, 웹 브라우저가 <hostIP>:8929에서 GitLab 인스턴스에 도달할 수 있으며, 포트 2424를 통해 SSH로 푸시할 수 있습니다.

다른 포트를 사용하는 docker-compose.yml 예제를 Docker compose 섹션에서 확인할 수 있습니다.

여러 데이터베이스 연결 구성

GitLab 16.0부터,

GitLab은 동일한 PostgreSQL 데이터베이스를 가리키는 두 개의 데이터베이스 연결을 기본으로 사용합니다.

어떠한 이유로든 다시 단일 데이터베이스 연결로 전환하고 싶다면:

  1. 컨테이너 내의 /etc/gitlab/gitlab.rb 파일을 편집합니다:

    sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
    
  2. 다음 줄을 추가합니다:

    gitlab_rails['databases']['ci']['enable'] = false
    
  3. 컨테이너를 재시작합니다:

    sudo docker restart gitlab
    

다음 단계

설치를 구성한 후에는 추천하는 다음 단계를 고려하세요, 인증 옵션 및 가입 제한을 포함하여.