Docker 컨테이너에 GitLab 설치
Offering: GitLab Self-Managed
Docker 컨테이너에 GitLab을 설치하려면 Docker Compose, Docker Engine 또는 Docker Swarm 모드를 사용하세요. 기본적으로 GitLab은 SSH를 통한 Git 상호작용에 포트 22를 사용합니다.
Docker 컨테이너에 GitLab을 설치하려면 Docker Compose, Docker Engine 또는 Docker Swarm 모드를 사용하세요.
사전 요구 사항:
- Docker for Windows가 아닌 작동 중인 Docker 설치가 있어야 합니다. Docker for Windows는 볼륨 권한과 잠재적으로 다른 알 수 없는 문제와 관련한 알려진 호환성 문제가 있어 공식적으로 지원되지 않습니다. Docker for Windows에서 실행하려는 경우 도움말 페이지를 참조하세요. 이 페이지에는 다른 사용자에게 도움을 구할 수 있는 커뮤니티 리소스(IRC 또는 포럼 등) 링크가 포함되어 있습니다.
- Postfix 또는 Sendmail과 같은 메일 전송 에이전트(MTA)가 있어야 합니다. GitLab 이미지에는 MTA가 포함되지 않습니다. 별도의 컨테이너에 MTA를 설치할 수 있습니다. GitLab과 동일한 컨테이너에 MTA를 설치할 수 있지만, 모든 업그레이드 또는 재시작 후에 MTA를 다시 설치해야 할 수 있습니다.
- GitLab Docker 이미지를 Kubernetes에 배포할 계획이 없어야 합니다. 이는 단일 실패 지점을 만들기 때문입니다. Kubernetes에 GitLab을 배포하려면 GitLab Helm Chart 또는 GitLab Operator를 대신 사용하세요.
- Docker 설치에 유효하고 외부에서 접근 가능한 호스트 이름이 있어야 합니다.
localhost를 사용하지 마세요.
SSH 포트 구성#
기본적으로 GitLab은 SSH를 통한 Git 상호작용에 포트 22를 사용합니다. 포트 22를 사용하려면 이 섹션을 건너뛰세요.
다른 포트를 사용하려면 다음 중 하나를 선택할 수 있습니다:
-
지금 서버의 SSH 포트를 변경하세요(권장). 그러면 SSH 클론 URL에 새 포트 번호가 필요하지 않습니다:
ssh://git@gitlab.example.com/user/project.git -
설치 후 GitLab Shell SSH 포트를 변경하세요. 그러면 SSH 클론 URL에 구성된 포트 번호가 포함됩니다:
ssh://git@gitlab.example.com:<portNumber>/user/project.git
서버의 SSH 포트를 변경하려면:
-
편집기로
/etc/ssh/sshd_config를 열고 SSH 포트를 변경하세요:Port = 2424 -
파일을 저장하고 SSH 서비스를 재시작하세요:
sudo systemctl restart ssh -
SSH를 통해 연결할 수 있는지 확인하세요. 새 터미널 세션을 열고 새 포트를 사용하여 서버에 SSH로 접속하세요.
볼륨용 디렉토리 생성#
Gitaly 데이터를 호스팅하는 볼륨에 대한 특정 권장 사항이 있습니다. NFS 기반 파일시스템은 성능 문제를 일으킬 수 있으므로 EFS는 권장되지 않습니다.
구성 파일, 로그 및 데이터 파일을 위한 디렉토리를 만드세요. 디렉토리는 사용자의 홈 디렉토리(예: ~/gitlab-docker) 또는 /srv/gitlab과 같은 디렉토리에 있을 수 있습니다.
-
디렉토리를 생성하세요:
sudo mkdir -p /srv/gitlab -
root이외의 사용자로 Docker를 실행하는 경우 새 디렉토리에 대한 사용자의 적절한 권한을 부여하세요. -
생성한 디렉토리의 경로를 설정하는 새 환경 변수
$GITLAB_HOME을 구성하세요:export GITLAB_HOME=/srv/gitlab -
선택적으로
GITLAB_HOME환경 변수를 셸의 프로파일에 추가하여 이후 모든 터미널 세션에 적용할 수 있습니다:- Bash:
~/.bash_profile - ZSH:
~/.zshrc
- Bash:
GitLab 컨테이너는 영구 데이터를 저장하기 위해 호스트 마운트 볼륨을 사용합니다:
| 로컬 위치 | 컨테이너 위치 | 용도 |
|---|---|---|
$GITLAB_HOME/data |
/var/opt/gitlab |
애플리케이션 데이터 저장. |
$GITLAB_HOME/logs |
/var/log/gitlab |
로그 저장. |
$GITLAB_HOME/config |
/etc/gitlab |
GitLab 구성 파일 저장. |
사용할 GitLab 버전 및 에디션 찾기#
프로덕션 환경에서는 배포를 특정 GitLab 버전에 고정해야 합니다. 사용 가능한 버전을 검토하고 Docker 태그 페이지에서 사용하려는 버전을 선택하세요:
태그 이름은 다음으로 구성됩니다:
gitlab/gitlab-ee:<version>-ee.0
여기서 <version>은 GitLab 버전입니다(예: 16.5.3). 버전은 항상 이름에 <major>.<minor>.<patch>를 포함합니다.
테스트 목적으로 최신 안정 릴리스를 가리키는 latest 태그(예: gitlab/gitlab-ee:latest)를 사용할 수 있습니다.
다음 예시들은 안정적인 Enterprise Edition 버전을 사용합니다. Release Candidate(RC) 또는 nightly 이미지를 사용하려면 대신 gitlab/gitlab-ee:rc 또는 gitlab/gitlab-ee:nightly를 사용하세요.
Community Edition을 설치하려면 ee를 ce로 바꾸세요.
설치#
다음을 사용하여 GitLab Docker 이미지를 실행할 수 있습니다:
Docker Compose를 사용하여 GitLab 설치#
Docker Compose를 사용하면 Docker 기반 GitLab 설치를 구성, 설치 및 업그레이드할 수 있습니다:
-
docker-compose.yml파일을 생성하세요. 예를 들어:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | # Add any other gitlab.rb configuration here, each on its own line external_url 'https://gitlab.example.com' ports: - '80:80' - '443:443' - '22:22' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'[!note]
GITLAB_OMNIBUS_CONFIG변수가 어떻게 작동하는지 알아보려면 Docker 컨테이너 사전 구성 섹션을 참조하세요.다음은 커스텀 HTTP 및 SSH 포트에서 실행 중인 GitLab을 사용하는 또 다른
docker-compose.yml예시입니다.GITLAB_OMNIBUS_CONFIG변수가ports섹션과 일치함을 확인하세요:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2424 ports: - '8929:8929' - '443:443' - '2424:22' volumes: - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab' shm_size: '256m'이 구성은
--publish 8929:8929 --publish 2424:22를 사용하는 것과 같습니다. -
docker-compose.yml과 같은 디렉토리에서 GitLab을 시작하세요:docker compose up -d
Docker Engine을 사용하여 GitLab 설치#
또는 Docker Engine을 사용하여 GitLab을 설치할 수 있습니다.
-
GITLAB_HOME변수를 설정한 경우 요구 사항에 맞게 디렉토리를 조정하고 이미지를 실행하세요:-
SELinux를 사용하지 않는 경우 다음 명령을 실행하세요:
sudo docker run --detach \ --hostname gitlab.example.com \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ --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이 명령은 GitLab 컨테이너를 다운로드하고 시작하며, SSH, HTTP 및 HTTPS에 접근하는 데 필요한 포트를 공개합니다. 모든 GitLab 데이터는
$GITLAB_HOME의 서브디렉토리로 저장됩니다. 컨테이너는 시스템 재시작 후 자동으로 재시작됩니다. -
SELinux를 사용하는 경우 대신 다음을 실행하세요:
sudo docker run --detach \ --hostname gitlab.example.com \ --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'" \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab:Z \ --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \ --shm-size 256m \ gitlab/gitlab-ee:<version>-ee.0이 명령은 Docker 프로세스가 마운트된 볼륨에서 구성 파일을 만들 수 있는 충분한 권한을 가지도록 합니다.
-
-
Kerberos 통합을 사용하는 경우 Kerberos 포트도 공개해야 합니다(예:
--publish 8443:8443). 그렇지 않으면 Kerberos를 사용한 Git 작업이 불가능합니다. 초기화 프로세스는 시간이 걸릴 수 있습니다. 다음으로 이 프로세스를 추적할 수 있습니다:sudo docker logs -f gitlab컨테이너를 시작한 후
gitlab.example.com을 방문할 수 있습니다. Docker 컨테이너가 쿼리에 응답하기 시작하는 데 시간이 걸릴 수 있습니다. -
GitLab URL을 방문하고 사용자 이름
root와 다음 명령의 비밀번호로 로그인하세요:sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
비밀번호 파일은 24시간 후 첫 번째 컨테이너 재시작에서 자동으로 삭제됩니다.
Docker Swarm 모드를 사용하여 GitLab 설치#
Docker Swarm 모드를 사용하면 swarm 클러스터에서 Docker와 함께 GitLab 설치를 구성하고 배포할 수 있습니다.
Swarm 모드에서는 Docker 시크릿과 Docker 구성을 활용하여 GitLab 인스턴스를 효율적이고 안전하게 배포할 수 있습니다. 시크릿은 초기 루트 비밀번호를 환경 변수로 노출하지 않고 안전하게 전달하는 데 사용할 수 있습니다. 구성은 GitLab 이미지를 최대한 일반적으로 유지하는 데 도움이 됩니다.
다음은 시크릿과 구성을 사용하여 4개의 러너가 있는 스택으로 GitLab을 배포하는 예시입니다:
-
docker-compose.yml파일을 생성하세요:services: gitlab: image: gitlab/gitlab-ee:<version>-ee.0 container_name: gitlab restart: always hostname: 'gitlab.example.com' ports: - "22:22" - "80:80" - "443:443" volumes: - $GITLAB_HOME/data:/var/opt/gitlab - $GITLAB_HOME/logs:/var/log/gitlab - $GITLAB_HOME/config:/etc/gitlab shm_size: '256m' environment: GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')" configs: - source: gitlab target: /omnibus_config.rb secrets: - gitlab_root_password gitlab-runner: image: gitlab/gitlab-runner:alpine deploy: mode: replicated replicas: 4 configs: gitlab: file: ./gitlab.rb secrets: gitlab_root_password: file: ./root_password.txt복잡성을 줄이기 위해 이전 예시에서는
network구성을 제외했습니다. 공식 Compose 파일 참조에서 더 많은 정보를 찾을 수 있습니다. -
gitlab.rb파일을 생성하세요:external_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password').gsub("\n", "") -
비밀번호가 포함된
root_password.txt파일을 생성하세요:MySuperSecretAndSecurePassw0rd! -
docker-compose.yml과 같은 디렉토리에 있는지 확인하고 다음을 실행하세요:docker stack deploy --compose-file docker-compose.yml mystack
Docker를 설치한 후 GitLab 인스턴스를 구성해야 합니다.
