[Gitlab] Docker를 이용해 GitLab을 설치해보자

당장은 아니지만 코드 저장소를 내부적으로 운영해야될 상황이 있을거라 생각합니다.
그 저장소가 제 개인적인 저장소가 될지, 회사 내부를 저장소가 될지는 잘 모르겠습니다.
그래서 Gitlab을 직접 설치해보고 정리해두려고 합니다.

GitLab은 위키와 이슈 추적 기능을 갖춘 웹 기반의 데브옵스 시스템입니다.
흔히 우리가 일고있는 Git 저장소로 많이 쓰이는 솔루션중 하나입니다.
과거 GitHub에서는 지원하지 않던 Private 저장소를 지원했기에 인기가 많았지만, 최근 GitHub에서도 Private를 지원하고 있어 이슈 추적 기능을 제외하면 기본기능에서는 많이 흡사합니다.
개인적인 선호는 GitHub이 단연 마음에 들지만 서두에 적은것 처럼 내부적으로 운영할 수 있도록 설치를 지원하는 GitLab에 정말 감사하고있습니다.

내가 직접 저장소를 운영할 수 있다니.. 벌써부터 재밌네요. GitLab 만세!

설치 환경

GitLab은 Ubuntu, Debian, CentOS 8 심지어 Rasberry Pi2의 OS를 지원합니다.
클라우드도 AWS와 GCP는 물론 MS의 Azure까지..
설치 방법으로는 Docker와 소스를 통한 설치등 많은 환경을 지원합니다.

이정도면 깃랩이 아니라 갓랩 아닙니까?

저는 이 중에서 공식적으로 지원하지는 않지만 MacOS에 Docker를 이용해 공부용 맥북에 세팅해보려 합니다.

Docker…. 또커…

GitLab은 커뮤니티 버전(CE)과 엔터프라이즈 버전(EE)이 있는데 저는 커뮤니티 버전의 도커 이미지를 사용해 설치할겁니다.

Docker 이미지 설치 및 운영 방법은 크게 세가지로 아래와 같습니다.

  • Docker Engine
  • Docker Compose
  • Docker Swwarm mode

저는 이 중 Docker Compose를 이용해 설치 할겁니다.
설명이 장황하고 어려워 보이지만 막상 설치 스텝은 얼마 되지 않습니다.
곧 직접 설치한 GitLab에 접속할 수 있을겁니다. :)

선수 조건

Docker Compose를 이용해 설치할 것이기 때문에 Docker와 Docker Compose가 설치되어 있어야 합니다.
Docker 설치 링크
Docker Compose 설치 가이드 링크

설치

docker-compose.yml 작성

저는 gitlab이라는 폴더를 만들어 이곳에서 GitLab의 데이터와 백업등 모든것을 관리할 겁니다.

1
2
$ mkdir gitlab
$ cd gitlab

gitlab 폴더 안에서 docker-compose.yml를 작성해 사용할 docker 이미지와 gitlab 운영에 관련된 환경세팅을 설정할 것입니다.

1
$ vi docker-compose.yml

docker-compose.yml 내용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
web:
image: 'gitlab/gitlab-ce:latest'
# restart: always
container_name: 'gitlab'
hostname: '127.0.0.1'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://xxx.xxx.xxx.xxx' # 프로젝트 생성시 앞에 붙을 도메인 또는 IP
gitlab_rails['gitlab_shell_ssh_port'] = 2224
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80'
- '443:443'
- '10022:22' # port 충돌 방지로 외부 포트 10022를 docker 내부포트 22로 연결
volumes:
- '$GITLAB_HOME/gitlab/config:/etc/gitlab'
- '$GITLAB_HOME/gitlab/logs:/var/log/gitlab'
- '$GITLAB_HOME/gitlab/data:/var/opt/gitlab'
- '$GITLAB_HOME/gitlab/backups:/var/opt/gitlab/backups'

간단히 설명하자면 최신 버전의 gitlab ce 이미지를 사용할 것이고 (지금은 주석이지만)오류로 인해 docker container가 내려갈 경우 다시 재시작할 수 있도록 설정했습니다.
호스트 이름은 로컬 호스트인 127.0.0.1, 프로젝트 생성시 외부 접속 가능한 도메인을 설정했습니다.
이외 ports는 외부 port와 docker container 내부 port를 매핑해주는 것이고 외부 22번 포트를 그냥 사용할 경우 ssh와 충돌이 일어나기 때문에 10022를 사용했습니다.
volumes는 실제 로컬 폴더와 docker container 내부의 폴더를 매핑해 주는 것으로 gitlab docker container에서 만들어진 데이터나 파일들을 로컬에서 접근할 수 있게, 또는 반대로도 가능하도록 연결해줍니다.

docker compose 실행

1
2
$ export GITLAB_HOME=$HOME // Linux의 경우 /src
$ docker-compose up -d

정상 실행 확인

GitLab 이미지가 다운되고 done이라고 로그는 찍혀있지만 실제 내부가 완전히 구동되기 까지는 시간이 오래걸립니다.
제 구형 맥북 기준으로 7분정도가 소요되는것으로 확인됐습니다.

그래서 잘 구동되고 있는지 Docker 로그를 확인해야겠네요.

1
$ docker logs -f gitlab

구동이 어느정도 진행되고 프로메테우스 또는 프로덕션 로그가 올라오면 구동에 성공했다고 볼 수 있습니다.

1
2
3
4
5
6
7
==> /var/log/gitlab/gitlab-rails/production.log <==
Started GET "/-/metrics" for 127.0.0.1 at 2020-05-30 05:56:55 +0000
Processing by MetricsController#index as HTML
Completed 200 OK in 13ms (Views: 1.4ms | ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocations: 710)

==> /var/log/gitlab/gitlab-rails/sidekiq_exporter.log <==
[2020-05-30T05:56:59.927+0000] 127.0.0.1 - - [30/May/2020:05:56:59 UTC] "GET /metrics HTTP/1.1" 200 9863 "-" "Prometheus/2.16.0"

이제 컨트롤 + C를 눌러 로그에서 빠져 나옵니다.

docker ps 명령어로 현재 잘 구동되고있는지 확인해줍니다.

1
2
3
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce25f2d0adad gitlab/gitlab-ce:latest "/assets/wrapper" 17 minutes ago Up 17 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:10022->22/tcp gitlab

STATUS에 Up 타임과 healthy로 나온다면 축하드립니다.
구동에 성공했어요!

설치한 GitLab 사이트 접속

이제 웹페이지로 접속 해 봅시다.
브라우저를 실행해 http://127.0.0.1 접속해 봅니다.

화면이 정상적으로 보인다면 root 비밀번호를 설정해야합니다.

sign in에서 root와 설정한 비밀번호로 로그인합니다.

관리자 계정으로 로그인 완료!!

이외 설정

혼자 사용할 때는 회원가입 기능이 필요 없기 때문에 비활성화 시켜놓을 필요가 있습니다.

상단의 Admin Area 아이콘을 눌러 관리자 페이지에 들어갑니다.

좌측 메뉴 Settings > General > Sign-up restrictions > Sign-up enabled 체크 해제 > 하단 Save changes 클릭

회원 가입 기능 비활성화

Admin Area 대쉬보드의 New user를 통해 회원가입을 시킬 수 있습니다.

처음부터 다시 세팅

설치가 제대로 되지 않아 처음부터 다시 세팅하고 싶을 때가 있습니다.

현재 구동중인 GitLab 컨테이너 중지

1
$ docker stop gitlab

GitLab 데이터 파일 삭제

1
$ rm -rf config data logs

백업 파일 삭제

주의! 아래의 명령어는 백업 데이터를 모두 삭제합니다.

1
$ rm -rf backups

세팅 변경 후 재 구동을 진행하면 됩니다.

마무리

실제로 운영하기에는 세부 설정을 더 만져야 하지만 처음부터 설치하는 분들에게 도움이 되었으면 좋겠습니다.