본문 바로가기
카테고리 없음

셀프호스팅 GitLab을 위한 엔터프라이즈급 자동화 운영 전략:

by frontier12 2025. 5. 28.


백업·러너 관리·업타임 모니터링까지


1. 왜 SaaS가 아닌 Self-Hosted GitLab인가
• 규제 산업 (금융/헬스케어): 코드 저장소의 클라우드 외부 저장 불가
• 커스터마이징 자유도: LDAP, SSO, 프라이빗 러너, CI 로그 정책 자유 설정 가능
• 비용 측면 이점: 사용자 수 증가 시 GitLab.com EE 대비 선형 비용 구조

하지만 셀프 호스팅의 진짜 도전은 설치가 아닌 운영 자동화입니다.
실리콘밸리 기준 GitLab 셀프호스팅은 단순 설치 후 방치가 아니라
운영/백업/확장/모니터링/러너까지 전면 자동화된 상태를 의미합니다.



2. 설치 자동화: GitLab Omnibus + Terraform + Ansible

2.1 Terraform + AWS 예시

resource "aws_instance" "gitlab" {
  ami           = "ami-0abcdef12345"
  instance_type = "m5.large"
  user_data     = file("gitlab-install.sh")
  tags = {
    Name = "gitlab-prod"
  }
}

• user_data 스크립트로 Omnibus 자동 설치
• 외부 EBS를 /var/opt/gitlab로 마운트해 데이터 이식성 확보

2.2 Ansible 역할 분리 예시

roles/
  gitlab/
    tasks/
      main.yml
      configure.yml
      backup.yml
    templates/
      gitlab.rb.j2

• configure.yml: LDAP, SMTP, 외부 URL 등 설정 자동화
• backup.yml: cron 기반 일일 백업 스케줄 등록



3. GitLab 러너 자동 등록 및 오토스케일링

3.1 GitLab 러너 동적 생성 (Docker + Autoscaler)

[[runners]]
  name = "autoscaler-runner"
  executor = "docker+machine"
  [runners.docker]
    image = "alpine:latest"
  [runners.machine]
    MachineDriver = "amazonec2"
    MachineName = "runner-%s"
    ...

• GitLab CI Job 수요에 따라 러너 EC2 인스턴스 자동 생성/소멸
• 비용 절감 및 병렬성 확보

3.2 고정 러너 자동 등록 (token 사용)

gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.example.com" \
  --registration-token "REG-TOKEN" \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "prod-runner"




4. CI/CD 파이프라인 자동 최적화
• .gitlab-ci.yml 템플릿화 및 공통 Job 분리

include:
  - project: 'infra/ci-templates'
    file: '/templates/docker-build.yml'

• Job cache 공유 설정으로 속도 향상
• 병렬 Job 최대 수량 러너 tag별 분리 관리



5. 백업 자동화 + 스냅샷 복구 전략

5.1 GitLab Backup Cron

0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1

• /etc/gitlab/gitlab.rb에서 백업 대상 구성
• S3 또는 NFS 백업 자동 전송

5.2 파일 시스템 레벨 스냅샷
• AWS EBS 스냅샷 + 태그 기반 정리 Lambda 구성
• Disaster Recovery용 빠른 복구 가능



6. 헬스체크 및 업타임 자동 모니터링

6.1 Prometheus Exporter 연동
• GitLab 내장 Prometheus 활성화
• http_requests_total, ci_pipeline_duration_seconds 등 지표 수집

6.2 Grafana 자동 대시보드 구성

grafana.dashboard.new('GitLab Uptime')
  .addPanel(
    grafana.panel.graph.new('CI Pipeline Duration')
    .addTarget(grafana.prometheus.target.new('avg_over_time(ci_pipeline_duration_seconds[1h])'))
  )




7. 보안 자동화: Access Token 만료 · 2FA 정책 자동 스캔
• Access Token 유효기간 필수 설정 (personal_access_tokens_expiration)
• 주기적으로 LDAP 연동 유효성 확인
• GitLab API를 통해 비밀번호 미설정 계정 자동 감지 스크립트 운영



결론

셀프호스팅 GitLab은 단순 설치로 끝나지 않습니다.
자동화된 구성/백업/확장/보안/모니터링까지 통합적으로 관리하는 엔터프라이즈 운영 전략이 필요합니다.
Terraform + Ansible + GitLab API + Prometheus + Runner Autoscaler 등
실제 업계에서 쓰이는 도구를 조합형 자동화로 구성해야만
운영 비용을 줄이고 확장성과 안정성을 동시에 확보할 수 있습니다.