백업·러너 관리·업타임 모니터링까지
⸻
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 등
실제 업계에서 쓰이는 도구를 조합형 자동화로 구성해야만
운영 비용을 줄이고 확장성과 안정성을 동시에 확보할 수 있습니다.
카테고리 없음