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 컨테이너 사전 구성

Docker 실행 명령에 환경 변수 GITLAB_OMNIBUS_CONFIG를 추가하여 GitLab Docker 이미지를 사전 구성할 수 있습니다. 이 변수에는 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의 내용은 연속 실행 사이에 유지되지 않습니다.

공개 IP 주소에서 GitLab 실행

Docker를 사용하여 IP 주소를 지정하고 모든 트래픽을 GitLab 컨테이너로 전달할 수 있습니다.

GitLab을 IP 198.51.100.1에서 노출하려면 다음과 같이 --publish 플래그를 수정하세요.

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

그러면 GitLab 인스턴스를 http://198.51.100.1/https://198.51.100.1/에서 사용할 수 있습니다.

다른 포트에 GitLab 노출

GitLab은 컨테이너 내부에서 특정 포트를 사용합니다.

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

예를 들어, 웹 인터페이스를 호스트의 포트 8929로 노출하고, SSH 서비스를 포트 2424로 노출하려면 다음 docker run 명령을 사용하세요.

  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
    

    참고: 포트를 게시하는 형식은 호스트포트:컨테이너포트입니다. 들어오는 포트 노출에 대한 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 포트가 명시적으로 설정되지 않은 경우, nginx['listen_port']보다는 external_url이 사용됩니다. 자세한 정보는 NGINX 문서를 참조하세요.

  4. SSH 포트를 설정하세요.

    gitlab_rails['gitlab_shell_ssh_port'] = 2424
    
  5. 마지막으로, GitLab을 다시 구성하세요.

    gitlab-ctl reconfigure
    

위의 예제에 따라 웹 브라우저에서 GitLab 인스턴스에 <호스트IP>:8929로 접근하거나 SSH를 사용하여 포트 2424에서 푸시할 수 있습니다.

다른 포트를 사용하는 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
    

다음 단계

설치를 구성한 후에는, 권장되는 다음 단계를 고려해보세요. 이는 인증 옵션과 회원 가입 제한을 포함합니다.