본문 바로가기
RaspberryPi

Raspberry Pi 4에 Gitlab 설치

by hyperhand 2021. 12. 14.

개인적으로 갖고 있던 라즈베리파이 4 8G 모델에 소스 관리용으로 gitlab을 설치해보기로 했다. 그냥 git을 설치할까 하다가 보기 편한 웹서버까지 패키징 돼 있어서 한번 사용해보고 싶었다.

예전에 gitlab 설치가 쉽지 않았던 경험이 있었기에 누군가가 만들어놓은 도커 이미지를 이용해 설치를 해보기로 했다.

라즈베리파이에는 현재 64비트 OS가 설치돼 있는 상태다.

 

OS 이미지 경로: https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2021-11-08/

 

 

 

 

 

1. 도커 이미지 다운로드

$ docker pull yrzr/gitlab-ce-arm64v8

 

2. 도커 컨테이너 실행

$ docker run --detach --restart always --name <컨테이너명> -p 8822:22 -p 80:80 -p 443:443 --hostname <호스트명> --env GITLAB_OMNIBUS_CONFIG="nginx['redirect_http_to_https'] = true;" --volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab yrzr/gitlab-ce-arm64v8:latest

3. 설치 후 웹서버에 접속되는 것까지 확인되면 컨테이너에 진입해서 root 비밀번호를 확인해서 root로 일단 접속한 후 사용자 계정을 별도로 생성해서 사용한다. gitlab root 유저 초기 비밀번호는 아래 경로에서 확인할 수 있다.

# cat /etc/gitlab/initial_root_password

gitlab_rails['initial_root_password'] = '<my_strong_password>'

 

 

 

 

 

3. 그런데 이렇게 며칠 사용하다가 갑자기 gitlab 웹서버에 접속이 안되는 문제가 생겼다. Error 502. 문제를 확인하던 가운데 256GB짜리 SD카드가 풀로 차있음을 알게 됐다. 도커나 gitlab 사용이 아직 익숙치 않은 상황에 한참을 삽질하던 끝에 로그가 엄청나게 쌓여 있음을 알게 됐다. 로그는 실행중인 컨테이너 별로 쌓이는 로그 파일과 컨테이너 내 gitlab 자체적으로 쌓이는 로그가 있는데 경로는 다음과 같다.

- 컨테이너별로 쌓이는 로그 경로 확인

$ sudo ls -al $(docker inspect --format='{{.LogPath}}' <컨테이너명>)

 

- gitlab 로그 경로

/var/log/gitlab에 각 서비스 디렉토리 별로 current라는 파일명

 

나같은 경우 컨테이너별 로그 파일 사이즈가 100G가 넘을 만큼 비대해져 있었고 일단은 로그파일 내용을 모두 지우는 임시 조치를 했다.

$ sudo truncate -s 0 $(docker inspect --format='{{.LogPath}}' <컨테이너명>)

 

4. 열심히 구글링과 gitlab 사이트를 통해 로그가 최소한으로 남을 수 있도록 설정을 변경하는 찾아봤다.

- gitlab 설정 변경

# nano /etc/gitlab/gitlab.rb

 

-- 주석 해제 후 편집

gitlab_rails['env'] = {
"SIDEKIQ_LOG_ARGUMENTS" => "0"
#    "SKIP" => "db,uploads,repositories,builds,artifacts,lfs,registry,pages"
}

 

logging['svlogd_size'] = 2 * 1024 * 1024  # 로그 파일이 2M가 됐을때 다음 파일로 기록
logging['svlogd_num'] = 5                    # 로그 파일 최대 5개까지
logging['svlogd_timeout'] = 60 * 60        # 1시간 후에 다음 파일에 기록

 

logging['logrotate_frequency'] = "daily"   # 일단위 로그 파일 기록
logging['logrotate_maxsize'] = 2 * 1024 *1024   # 로그 파일이 2M가 됐을 때 다음 파일로 기록
logging['logrotate_rotate'] = 5                        # 로그 파일은 최대 5개까지
logging['logrotate_compress'] = "compress"      # 로그 파일을 압축시킴

 

5. 위와 같이 설정 변경 후 아래 명령으로 컨테이너 재시작

$ docker restart <컨테이너명>

 

 

 

 

 

6. 그런데 위와 같이 변경해도 컨테이너별 로그 폭증에는 별 효과가 없어서 아래와 같이 아예 컨테이터 실행 옵션에 로그 옵션을 추가했더니 로그가 더 이상 폭주하지 않았다.

- 기존 컨테이너 제거. 이미 몇개 소스를 올려놓은 상태이나 볼륨을 연결해놨었기에 호스트에 그대로 남아있다.

$ docker stop <컨테이너명>

$ docker rm <컨테이너명>

 

- 컨테이너 다시 구동

$ docker run --detach --restart always --name <컨테이너명> --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 -p 8522:22 -p 80:80 -p 443:443 --hostname hyperhand.iptime.org --env GITLAB_OMNIBUS_CONFIG="nginx['redirect_http_to_https'] = true;" --volume $GITLAB_HOME/config:/etc/gitlab --volume $GITLAB_HOME/logs:/var/log/gitlab --volume $GITLAB_HOME/data:/var/opt/gitlab yrzr/gitlab-ce-arm64v8:latest

 

최초 실행했었던 옵션에서 로그 관련 옵션들이 몇개 더 추가됐다. 로그파일이 10M 일때 다음 파일로 갈아타면서 최대 3개까지만 저장되도록 했다.

반응형