Web

[gitlab] Docker compose 예제 & Tip

Yukart 2025. 3. 26. 19:25
반응형

이번엔 사내 소스형상관리 툴을 SVN에서 Gitlab으로 바꾸게 된 이야기를 해보겠습니다.

GitLab은 소프트웨어 개발 라이프사이클을 관리하는 강력한 도구입니다. Docker Compose를 사용하면 GitLab을 쉽게 설정하고 관리할 수 있습니다. 이 글에서는 Docker Compose 파일의 주요 구성 요소와 설정 옵션에 대해 알아보겠습니다.

 

Docker Compose 파일 설정 설명

services:
  gitlab:
    image: 'gitlab/gitlab-ee:17.9.2-ee.0'
    container_name: gitlab
    restart: always
    hostname: 'gitlab.my.co.kr'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.my.co.kr'
        gitlab_rails['gitlab_shell_ssh_port'] = 22
        prometheus_monitoring['enable'] = false
        postgresql['shared_buffers'] = "512MB"
        puma['per_worker_max_memory_mb'] = 2048
        sidekiq['max_concurrency'] = 10
        gitlab_rails['env'] = {
          'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
        }
        gitaly['env'] = {
          'MALLOC_CONF' => 'dirty_decay_ms:1000,muzzy_decay_ms:1000'
        }
        gitlab_rails['initial_root_password'] = '********'
        gitlab_rails['allow_local_requests'] = true
        gitlab_rails['gitlab_protocol'] = 'http'
        gitlab_rails['gitlab_https'] = false
        gitlab_workhorse['listen_network'] = "tcp"
        gitlab_workhorse['listen_addr'] = "0.0.0.0:8181"

      TZ: 'Asia/Seoul'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
      - '8181:8181'  # GitLab Workhorse 포트 추가
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'

기본 서비스 구성

  • image: 'gitlab/gitlab-ee:17.9.2-ee.0': GitLab Enterprise Edition 버전 17.9.2를 사용합니다.
  • container_name: gitlab: 컨테이너 이름을 'gitlab'으로 지정합니다.
  • restart: always: 도커 데몬이 재시작되거나 컨테이너가 중지될 때 항상 자동으로 재시작합니다.
  • hostname: 'gitlab.my.co.kr': GitLab 서버의 호스트 이름을 설정합니다.

환경 변수 설정

GitLab의 설정은 GITLAB_OMNIBUS_CONFIG 환경 변수를 통해 이루어집니다:

  • external_url 'https:// gitlab.my.co.kr ': GitLab의 외부 URL을 설정합니다.
  • gitlab_rails['gitlab_shell_ssh_port'] = 22: SSH 접속 포트를 22번으로 설정합니다.
  • prometheus_monitoring['enable'] = false: Prometheus 모니터링을 비활성화합니다.
  • postgresql['shared_buffers'] = "512MB": PostgreSQL의 공유 버퍼 크기를 512MB로 설정합니다.
  • puma['per_worker_max_memory_mb'] = 2048: Puma 워커당 최대 메모리를 2GB로 제한합니다.
  • sidekiq['max_concurrency'] = 10: Sidekiq의 최대 동시 작업 수를 10으로 제한합니다.
  • MALLOC_CONF 설정: 메모리 할당자 설정으로, 메모리 사용을 최적화합니다.
  • gitlab_rails['initial_root_password'] = '********': 초기 관리자 비밀번호를 설정합니다.
  • gitlab_rails['allow_local_requests'] = true: 로컬 요청을 허용합니다.
  • gitlab_workhorse['listen_network'] = "tcp" 및 gitlab_workhorse['listen_addr'] = "0.0.0.0:8181": GitLab Workhorse가 모든 인터페이스에서 8181 포트를 통해 TCP 연결을 수신하도록 설정합니다.
  • TZ: 'Asia/Seoul': 서버의 시간대를 한국 시간대로 설정합니다.

포트 매핑

컨테이너의 포트를 호스트 시스템의 포트에 매핑합니다:

  • 80:80: HTTP 트래픽을 위한 포트입니다.
  • 443:443: HTTPS 트래픽을 위한 포트입니다.
  • 22:22: SSH 연결을 위한 포트입니다.
  • 8181:8181: GitLab Workhorse를 위한 포트입니다.

볼륨 설정

GitLab의 데이터를 호스트 시스템에 저장하기 위한 볼륨을 설정합니다:

  • ./config:/etc/gitlab: GitLab 설정 파일을 저장합니다.
  • ./logs:/var/log/gitlab: 로그 파일을 저장합니다.
  • ./data:/var/opt/gitlab: GitLab 데이터를 저장합니다.

주의사항

  1. 보안: 위 설정에서 비밀번호가 평문으로 노출되어 있었으나, 실제 운영 환경에서는 이를 환경 변수나 Docker 시크릿으로 관리하는 것이 좋습니다.
  2. 리소스 관리: 메모리 사용량을 최적화하기 위한 설정들이 포함되어 있습니다. 실제 운영 환경에서는 서버의 사양에 맞게 조정이 필요할 수 있습니다.
  3. 백업 계획: 데이터 보존을 위해 정기적인 백업 계획을 수립하는 것이 중요합니다.
  4. 버전 선택: 버전 선택은 신중히 하시길 권고 드립니다. 취약점 보완된 최신 버전 중 stable한 버전으로 선택하시고, CE보다는 EE가 나중에 무료에서 유료로 전환한다고 했을 때 좀 더 편하게 마이그레이션 할 수 있습니다.
반응형

'Web' 카테고리의 다른 글

XML에 대해 알아보자  (0) 2022.02.04
로드밸런서(Load Balancer)란  (0) 2022.01.13