docker 환경으로 GitLab 설치하기
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 versiondocker와 docker-compose 버전 정보가 모두 정상 표시된다면, 설치가 완료되었습니다.
Gitab의 컨테이너 이미지는 Docker 허브에 아래와 같이 GitLab CE 및 EE 버전으로 등록되어 있습니다. 각 이미지는 단일 컨테이너에서 모든 서비스를 기동하게 됩니다.
Docker 이미지로 GitLab을 설치하기 앞서 컨테이너의 데이터를 저장할 로컬의 볼륨을 설정해야 합니다. GitLab 컨테이너의 데이터를 영구적으로 저장하기 위한 영역으로 다음의 구성이 필요합니다.
| Local 볼륨 | container 볼륨 | 설명 |
|---|---|---|
| $GITLAB_HOME/data | /var/opt/gitlab | GitLab 어플리케이션 데이터 저장 |
| $GITLAB_HOME/logs | /var/log/gitlab | 로그 저장 |
| $GITLAB_HOME/config | /etc/gitlab | GitLab 설정 파일 저장 |
먼저 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 설치가 시작 됩니다.

설치 과정에서 로그를 확인하려면 다음 명령을 실행 합니다.
docker-compose logs -f
설치가 완료되면 컨테이너로 기동된 GitLab의 초기 패스워드를 확인해야 합니다.
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
GitLab 설치가 완료되면 브라우저를 통해 다음과 같이 GitLab 로그인 화면을 확인할 수 있습니다. 초기 Username은 root 이며, 패스워드는 위에서 확인하였습니다.

GitLab 서비스를 중지 및 시작할 경우 다음 명령을 수행합니다.
#컨테이너 일시 중지 및 시작
docker-compose stop
docker-compose start
#컨테이너 중지 및 삭제 후 컨테이너 기동
docker-compose down
docker-compose up -d
GitLab의 구성 변경이 필요할 경우 docker-compose.yml 을 수정한 후 Docker Compose를 다시 기동하면 됩니다.