gitlab 은 Ruby on rails 로 개발되었는데 직접 설치해서 사용하려면 절차가 매우 번거롭습니다. 제조사에서 docker 로 패키징한 버전을 제공하므로 직접 설치보다는 docker 로 설치하는 방법을 권장합니다.

구성

gitlab 에서 배포하는 docker 이미지는 기본적으로 Web 과 WAS 가 모두 포함되어 있고 Host 의 80, 443 포트를 container 로 매핑하게 되어 있습니다. 

host 에서 gitlab 만 쓴다면 상관이 없겠지만 그렇지 않다면 다른 서비스를 사용할 수 없으므로 기본 구성대신 아래와 같이 host 에 nginx 를 설치하고 Gitlab docker 는 reverse proxy 로 연결할 것입니다.


Application 관점에서 구성도는 다음과 같으며 Reverse Proxy 로 구성했으므로 Host 에 Container 와 Standalone 서비스를 같이 구동하고 가상 호스트를 부여해서 필요시 동시에 서비스 할 수 있습니다.


사전 작업

먼저 docker 엔진을 설치합니다.

sudo apt install docker
BASH

RHEL/CentOS 는 다음 명령어로 설치합니다.

sudo yum install docker
BASH


reverse proxy 로 사용할 nginx 를 설치합니다.

sudo yum install nginx
BASH
sudo apt install nginx
BASH

gitlab 에 대한 가상 호스트 설정을 추가하고 재구동합니다.


서비스를 활성화하고 재구동합니다.

sudo systemctl enable nginx
sudo systemctl restart nginx
BASH


gitlab 설치

먼저 docker volume 으로 사용할 폴더 경로를 정의합니다. 저는 /var 폴더에 docker 볼륨을 매핑해서 사용하므로 아래 경로를 생성합니다.

sudo mkdir -p /var/gitlab/{data,logs,config}
BASH

docker 를 실행하는 계정(아마 root 겠죠.)의 초기화 파일(Ex: .bash_profile)에 다음 내용을 넣어줍니다. podman 을 사용한다면 root 가 아닌 실행 계정의 초기화 파일에 넣어줍니다.

export GITLAB_HOME=/var/gitlab
BASH


container 실행

gitlab community edition 을 설치 & 실행합니다. 환경에 따라 다음 항목들은 수정해야 할수 있습니다.

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 9080:80 --publish 10022: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 \
  gitlab/gitlab-ce:latest
BASH
  • --hostname:  gitlab.example.com 대신 실제 사용하는 도메인으로 변경해 줍니다.
  • --publish 9080:80: gitlab 웹 서비스를 Host의 9080 포트와 container 의 80 포트와 매핑해 줍니다.
  • --publish 12022:22: gitlab 은 SSH 도 지원하므로 외부에 노출할 SSH 포트(12022)와 container 에 매핑할 포트(22) 를 기술합니다. HOST 의 22 번 포트보다는 별도 포트를 사용하는 것을 권장합니다.

Enterprise Edition 을 사용할 경우 마지막 줄의 gitlab-ce 를 gitlab-ee 로 변경하면 됩니다.

SELinux 설정

SELinux 를 사용한다면 volume 폴더를 docker 가 쓸 수 있도록 적절한 context 인 container_file_t를 지정해야 합니다.

sudo semanage fcontext -a  -t container_file_t '/var/gitlab(/.*)?'
BASH

그리고 restorecon 으로 context 를 재설정해 줍니다.

sudo restorecon -R /var/gitlab/
BASH

이제 docker 실행시 volume 에 SELinux context 를 반영하도록 :Z 를 추가해 줍니다.

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 9080:80 --publish 10022: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 \
  gitlab/gitlab-ce:latest
BASH


gitlab 포트 변경

기본 포트를 변경했으면 Clone URL 이 제대로 나오게 하기 위해서는 gitlab docker 이미지에 있는 설정 파일을 변경해 줘야 합니다.

Host 에 nginx 를 설치하고 Reverse Proxy 로 gitlab docker 와 사용할 경우 external_url 에 HTTPS 를 설정하면 제대로 동작하지 않습니다. 대신 Host nginx 에 HTTP 를 HTTPS 로 redirect 하게 설정하면 문제없이 사용할 수 있습니다.


먼저 도커 이미지에 들어갑니다. 

sudo docker exec -it gitlab /bin/bash
BASH


/etc/gitlab/gitlab.rb 를 열어서 SSH 포트로 변경된 값으로 설정해 줍니다.

gitlab_rails['gitlab_shell_ssh_port'] = 10022
BASH
gitlab-ctl reconfigure
BASH


확인

제대로 구동되고 있는지 docker 의 로그를 확인합니다.

sudo docker logs -f gitlab
BASH


구동이 끝났으면 브라우저로 gitlab.example.com 에 연결하면 비밀번호 입력창이 뜹니다.

비밀 번호를 입력난 후에 기본 관리자 id 인 root 와 생성한 비밀 번호를 입력하고 로그인하면 됩니다.


같이 보기

Ref