본문으로 건너뛰기

docker 환경으로 GitLab 설치하기

· 약 6분
week
DevOps Engineer @ KartDraw

GitLab을 Docker 컨테이너 환경으로 설치해 보면서, 컨테이너 환경의 장점을 이해 합니다.

GitLab은 Docker 이미지로도 배포가 되기 때문에 패키지 방식보다 쉽고 빠르게 설치할 수 있습니다.

시스템 요구 사항

Docker 기반 설치는 Docker와 Docker Compose가 설치되어야 합니다.

  • Docker & Docke Compose 설치 Amazone Linux 2 환경에서는 다음 명령어로 docker를 설치할 수 있습니다.

    sudo yum update -y
    sudo amazon-linux-extras install docker
    sudo service docker start
    sudo systemctl enable docker
    sudo usermod -a -G docker ec2-user

    #ec2-user에서 정상적으로 docker 실행 여부 확인
    docker version

    다른 OS 환경은 https://docs.docker.com/engine/install/ 를 참고합니다. docker compose 설치는 다음 명령을 실행합니다.

    sudo curl -SL <https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64> -o /usr/local/bin/docker-compose
    sudo chgrp docker /usr/local/bin/docker-compose
    sudo chmod g+x /usr/local/bin/docker-compose

    #docker compose 정상 동작 확인
    docker-compose version

    docker와 docker-compose 버전 정보가 모두 정상 표시된다면, 설치가 완료되었습니다.

Gitab의 컨테이너 이미지는 Docker 허브에 아래와 같이 GitLab CE 및 EE 버전으로 등록되어 있습니다. 각 이미지는 단일 컨테이너에서 모든 서비스를 기동하게 됩니다.

Docker 이미지로 GitLab을 설치하기 앞서 컨테이너의 데이터를 저장할 로컬의 볼륨을 설정해야 합니다. GitLab 컨테이너의 데이터를 영구적으로 저장하기 위한 영역으로 다음의 구성이 필요합니다.

Local 볼륨container 볼륨설명
$GITLAB_HOME/data/var/opt/gitlabGitLab 어플리케이션 데이터 저장
$GITLAB_HOME/logs/var/log/gitlab로그 저장
$GITLAB_HOME/config/etc/gitlabGitLab 설정 파일 저장

먼저 GitLab 홈 디렉토리를 생성합니다.

# gitlab을 설치할 home 디렉토리와 local볼륨 생성
sudo mkdir -p /app/gitlab
sudo chown -R $USER:$USER /app/gitlab

cd /app/gitlab
mkdir -p ./volumes/data ./volumes/logs ./volumes/config

(Optional) SSL 인증서가 있을 경우 다음 경로에 cert 및 key 파일을 복사해 줍니다.

/app/gitlab/volumes/config/ssl/

본 실습에서는 Let’s Encrypt를 사용할 것이기 때문에 별도 인증서가 필요하지는 않습니다.

주의) 아래 작업을 진행하기 전 DNS의 IP가 설치 대상 ec2 정보인지 확인합니다.

GitLab을 Docker Compose로 설치하기 위해서는 Docker Compose 파일을 생성해야 합니다. 다음과 같이 docker-compose.yml 파일을 생성합니다.

cd /app/gitlab
cat << EOF > docker-compose.yml
version: '3.9'

services:
gitlab:
### 이미지 버전 확인
image: 'gitlab/gitlab-ee:15.11.5-ee.0'
container_name: gitlab
restart: always
hostname: '{XX}.git.dt-academy.net'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://{XX}.git.dt-academy.net'
gitlab_rails['time_zone'] = 'Asia/Seoul'
### GitLab NGINX Settings
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80
nginx['ssl_ciphers'] = 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'
nginx['ssl_prefer_server_ciphers'] = 'off'
nginx['ssl_protocols'] = 'TLSv1.2 TLSv1.3'
### Container Registry Settings
registry_external_url 'https://{XX}.registry.dt-academy.net'
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'admin@git.dt-academy.net'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@git.dt-academy.net'
gitlab_rails['gitlab_email_display_name'] = 'GitLab Admin'
### GitLab email server settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_pool'] = true
gitlab_rails['smtp_address'] = 'localhost'
gitlab_rails['smtp_port'] = 25
TZ: 'Asia/Seoul'
ports:
- '80:80'
- '443:443'
volumes:
- './volumes/config:/etc/gitlab'
- './volumes/logs:/var/log/gitlab'
- './volumes/data:/var/opt/gitlab'
- '/etc/localtime:/etc/localtime:ro'
logging:
driver: 'json-file'
options:
max-size: '200m'
max-file: '10'
EOF

Docker Compose를 실행하여 GitLab을 시작합니다.

docker-compose up -d

Docker Compose가 실행되면 다음과 같이 컨테이너 이미지를 다운로드 받고, GitLab 설치가 시작 됩니다.

gitlab-1.png

설치 과정에서 로그를 확인하려면 다음 명령을 실행 합니다.

docker-compose logs -f

설치가 완료되면 컨테이너로 기동된 GitLab의 초기 패스워드를 확인해야 합니다.

docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

GitLab 설치가 완료되면 브라우저를 통해 다음과 같이 GitLab 로그인 화면을 확인할 수 있습니다. 초기 Username은 root 이며, 패스워드는 위에서 확인하였습니다.

gitlab-2.png

GitLab 서비스를 중지 및 시작할 경우 다음 명령을 수행합니다.

#컨테이너 일시 중지 및 시작
docker-compose stop
docker-compose start

#컨테이너 중지 및 삭제 후 컨테이너 기동
docker-compose down
docker-compose up -d

GitLab의 구성 변경이 필요할 경우 docker-compose.yml 을 수정한 후 Docker Compose를 다시 기동하면 됩니다.