반응형
시리즈 : GitLab + Terraform + Ansible 으로 VM 프로비저닝 자동화하기
1. [Rocky Linux 기반 GitLab Docker 설치하기]
2. [Terraform 기초 - Docker Provider로 배우기]
3. [GitLab Runner + Terraform으로 VM 자동 프로비저닝]
4. [Terraform 디스크 문제와 xe 명령어 전환] (예정)
5. [GitHub vs GitLab CI/CD 실전 비교] (예정)
🔹 들어가며
좋은 기회로 팀 내 리소스 자동화 툴을 생성하는 사이드 프로젝트를 진행하게 되었습니다.
본격적인 프로덕션 환경을 구축하기 전에, Docker 기반 테스트 환경에서 GitLab 구성한 내용들을 정리해보았습니다.
🔹 GitLab vs GitHub
| 구분 | GitLab | GitHub |
| 온프레미스 비용 | CE 무료 | Enterprise Server 유료 |
| Self-Hosted | 무료로 가능 | 유료 라이선스 필요 |
| CI/CD | GitLab CI 내장 | GitHub Actions 내장 |
| Runner | Self-hosted 가능 | Self-hosted 가능 |
왜 Docker로 테스트하는가?
- 빠른 구축/철거: 실험 후 완전히 제거하고 재시작 가능
- 격리된 환경: 호스트 시스템에 영향 없이 설정 테스트
- 구성 문서화: docker-compose.yml이 설치 문서 역할
🔹 설치 과정
환경
- 서버: Rocky Linux 9.7
- Docker: 29.1.5
- Docker Compose: 5.0.2
작업 순서
1. Docker 설치
# 기존 컨테이너 런타임 제거 (Podman 등)
sudo dnf remove -y podman runc
# Docker 공식 저장소 추가 및 설치
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 서비스 시작
sudo systemctl start docker
sudo systemctl enable docker
2. GitLab 구성
# 데이터 디렉토리 생성
sudo mkdir -p /home/gitlab/{config,logs,data}
# docker-compose.yml 구성정보
cat /home/gitlab/docker-compose.yml
services:
gitlab:
image: gitlab/gitlab-ce:latest #현 gitlab 최신 이미지 설치
container_name: gitlab
restart: always #컨테이너 자동 재시작 설정
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://[IP]' # IP정보 가림처리
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# 메모리 최적화
puma['worker_processes'] = 2
sidekiq['concurrency'] = 10
prometheus_monitoring['enable'] = false
ports: # 호스트 포트 포워딩
- '80:80'
- '443:443'
- '2222:22'
volumes: #호스트 볼륨 연결
- '/home/gitlab/config:/etc/gitlab'
- '/home/gitlab/logs:/var/log/gitlab'
- '/home/gitlab/data:/var/opt/gitlab'
shm_size: '256m'
주요 설정:
- gitlab_shell_ssh_port: 호스트 SSH(22)와 충돌 방지
- puma/sidekiq: 테스트 환경이므로 최소 리소스 설정
- prometheus: 모니터링 비활성화로 메모리 절약
- puma 역할: GitLab의 웹 애플리케이션 서버. 사용자의 HTTP 요청을 처리 (웹 페이지 로딩, API 호출 등)
- worker_processes(동시 요청을 처리할 수 있는 프로세스 개수) 2으로 제한. 기본 설정값은 4
- 사용자 수에 따른 파라미터 조정 필요.
- sidekiq 역할: GitLab의 백그라운드 작업 처리 엔진
- concurrency(동시에 처리할 수 있는 백그라운드 작업 수) 10으로 제한. 기본 설정값은 25
3. 방화벽 설정 및 시작
# 방화벽 포트 오픈
sudo firewall-cmd --permanent --add-port={80,443,2222}/tcp
sudo firewall-cmd --reload
# GitLab 시작
cd /home/gitlab
docker compose up -d
# 상태 확인 (3~5분 소요, healthy 될 때까지 대기)
docker ps
4. 초기 비밀번호 확인
# root 계정 초기 비밀번호 확인 (24시간 후 삭제됨)
docker exec gitlab cat /etc/gitlab/initial_root_password | grep Password:
GitLab은 처음 실행 시 root 계정의 임시 비밀번호를 자동 생성합니다.
초기 패스워드는 24시간 후 자동 삭제되며, 로그인 후 반드시 비밀번호 변경이 필요합니다.
5. 접속 및 로그인
- URL: http://[IP]
- 계정: root
- 비밀번호: (위에서 확인한 값)
🔹 검증
# 컨테이너 상태
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
619244202fd8 gitlab/gitlab-ce:latest "/assets/init-contai…" 19 hours ago Up 19 hours (healthy) 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:2222->22/tcp, [::]:2222->22/tcp gitlab
# 컨테이너 리소스 사용량
$ docker stats gitlab --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
619244202fd8 gitlab 0.34% 3.518GiB / 31.08GiB 11.32% 423kB / 449kB 5.28MB / 2.7GB 205
# GitLab 서비스 상태
# 호스트 서버에서 확인
$ docker exec gitlab gitlab-ctl status
or
#컨테이너 접속 후 확인
$ docker exec -it [container_id] bash
$ gitlab-ctl status
run: gitaly: (pid 1184) 66745s; run: log: (pid 548) 66847s
run: gitlab-kas: (pid 804) 66836s; run: log: (pid 820) 66835s
run: gitlab-workhorse: (pid 1157) 66746s; run: log: (pid 958) 66770s
run: logrotate: (pid 13992) 2060s; run: log: (pid 497) 66857s
run: nginx: (pid 1173) 66746s; run: log: (pid 1064) 66763s
run: postgresql: (pid 572) 66842s; run: log: (pid 782) 66839s
run: puma: (pid 875) 66784s; run: log: (pid 889) 66781s
run: redis: (pid 500) 66854s; run: log: (pid 509) 66853s
run: sidekiq: (pid 896) 66778s; run: log: (pid 918) 66775s
run: sshd: (pid 40) 66866s; run: log: (pid 39) 66866s
모든 서비스가 run 상태여야 정상입니다.
🔹 트러블슈팅
메모리 부족 시:
docker exec gitlab vi /etc/gitlab/gitlab.rb
# puma['worker_processes'] = 1
# sidekiq['concurrency'] = 5
docker exec gitlab gitlab-ctl reconfigure
docker restart gitlab
초기 비밀번호 분실 시:
#gitlab 콘솔 접속
sudo gitlab-rails console
#비밀번호 변경할 ID(root) 찾기
user = User.find_by_username [변경할 사용자ID]
gitlab(prod)> new_password='new_password'
=> "new_password"
gitlab(prod)> user.password=new_password
=> "new_password"
gitlab(prod)> user.password_confirmation=new_password
=> "new_password"
#설정 저장
gitlab(prod)> user.save!
=> true
위처럼 gitlab CLI 명령어로 변경하거나, 기존 패스워드를 입력하여 웹페이지에서 패스워드를 변경할 수 있다.
🔹 다음 계획
- Terraform/Ansible 연동
- GitLab Runner 설치 (미정)
🔹 마치며
이번에도 Docker Hub를 통해 손쉽게 GitLab 테스트 환경을 구축할 수 있어 좋았습니다. GitHub는 몇 번 테스트를 해보았지만 GitLab은 처음이라, 이 두 서비스의 공통점과 차이점은 어떤것이 있을지 시간을 들여 알아가는 것도 재미있을 것 같습니다.
다음 편에서는 Terraform, Ansible을 CI/CD 파이프라인에 추가하여 서비스 간 연동이 어떻게 되는지 공부한 내용들을 정리해보겠습니다.
다음 글 : [Terraform 기초 - Docker Provider로 배우기]
감사합니다!
반응형
'기술 공부 > DevOps' 카테고리의 다른 글
| GitLab Runner 설치 및 Terraform 파이프라인 구성 (0) | 2026.01.31 |
|---|---|
| Terraform 기초 다시 시작하기 - Docker Provider 컨테이너 자동화 (0) | 2026.01.25 |
| Windows에서 Git & GitHub 연동하기 - 실전 가이드 (0) | 2026.01.15 |
| VirtualBox NAT 네트워크 설정과 SSH 포트포워딩 트러블슈팅 (0) | 2025.12.25 |
| VirtualBox 새 파티션 LVM 디스크 확장 (0) | 2025.12.14 |