본문 바로가기
Server

[Gitlab] 서버 이전 작업 ( feat. Docker Container )

by 하비삼 2023. 10. 23.

기존 내부에 gitlab-ce(community) 를 온프로미스 서버에 올라간것을 docker continer 로 변경하면서 옮기는 작업을 진행하려고 한다.


현재

   - 서버개발서버에 온프로미스로 gitlab 이 설치됨 백업 정책 X

   - Gitlab 12.0.2 버전 

변경사항

   - 신규 인프라 서버로 Container 변경하여 적용 및 설정파일은 mount volume 화

   - 백업 정책 추가

   - Gitlab 버전 업데이트 (실패 ..)

      - Gitlab 버전을 한번에 매이저를 최신버전으로 업데이트 불가

      - 12.0.2 로 동일한 버전으로 복구 하여 이전 작업 진행

      - 버전 업데이트를 진행 

         - 12.1.17 => 12.10.14 => 13.0.14 => 13.1.11 => 13.8.8 => 13.12.15 => 14.0.12 => 14.3.6 => 14.9.5 => 14.10.5 => 15.0.5 => 15.4.6 => 15.11.13 => 16.1.5 => 16.3.5 => 16.5.0 순으로 진행

         - 버전 업데이트 순서 :  https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=12.0.12&distro=docker&auto=true&edition=ce


신규 서버에 Gitlab Container 올리기

- docker-compose.yml 작성

version: '3.9'  
services:       
  gitlab:
    # image: gitlab/gitlab-ce:latest
    image: gitlab/gitlab-ce:12.0.2-ce.0
    container_name: gitlab
    volumes:
      - /data/data/gitlab/config:/etc/gitlab  # gitlab Config 폴더 Mount
      - /data/data/gitlab/logs:/var/log/gitlab # gitlab Logs 폴더 Mount
      - /data/data/gitlab/data:/var/opt/gitlab # gitlab Data 폴더 Mount
    ports:
      - 9180:80  # 웹 80 전용 외부 포트 9180 -> 내부 포트 80 접근
      - 9143:443  # 웹 443(SSL 전용) 외부 포트 9143 -> 내부 포트 443 접근
      - 9122:22  # SSH 접근 외부 포트 9122 -> 내부 포트 22 접근
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://domain' # 연결될 도메인 
        gitlab_rails['gitlab_shell_ssh_port'] = 22 # 연결될 포트
    restart: always
    networks:
      - default

networks:
  default:
    external:
      name: infra # 내부에 구성된 infra network Brige 를 활용하여 nginx Proxy Pass 활용하여 접근

- /data/data/gitlab 내에 config, logs, data 폴더 생성

$ mkdir /data/data/gitlab/config
$ mkdir /data/data/gitlab/logs
$ mkdir /data/data/gitlab/data

- SSL 443 포트 활용을 위한 도메인 인증서 [ /data/data/gitlab/config/ssl ] 에 추가

( 우선 2중 nginx( container 안에 하나, 밖에 하나.. ) 로 운영... 추후 개발 .. )

- container 실행

$ docker-compose -f docker-compose.yml up -d --build

- 컨테이너가 정상적으로 올라간것을 확인

- 중간중간 오류 발행시 docker logs gitlab 을 통하여 로그 체크하여 해결


GitLab Backup

# gitlab 12.1 및 이전 버전
$ gitlab-rake gitlab:backup:create

# gitlab 12.2 이상 버전
$ gitlab-backup create

gitlab-rake를 활용하여 백업

완료시 [ /var/opt/gitlab/backups ] 폴더에 저장됨

ex) timpstamp_날짜_gitlab버전_gitlab_backup.tar

 

백업 경로 변경

$ vi/etc/gitlab/gitlab.rb

# 아래의 부분을 찾아 수정
gitlab_rails['backup_path'] = '/var/opt/gitlab/backups'

Gitlab Container 에 복구

- 프로세스 중지

$ docker exec -it gitlab bash

$ gitlab-ctl stop puma
$ gitlab-ctl stop sidekiq

# status
$ gitlab-ctl status

- 백업된 tar 파일을 동일 한 경로에 복사 이동

- 복원 실행

$ docker exec -it gitlab bash

# BACKUP 파일명 지정시 타임스템프_날짜_버전 까지만 입력 뒤에 _gitlab_backup.tar 는 제거
# 12.1 및 이전 버전
$ gitlab-rake gitlab:bakcup:restore BACKUP=파일명(타임스템프_날짜_버전) 

# 12.2 이상 버전
$ gitlab-backup restore BACKUP=파일명(타임스템프_날짜_버전)

- 복원 완료 후 중지한 프로세스 재가동 후 git 확인

# gitlab 컨테이너 접근
$ docker exec -it gitlab bash

$ gitlab-ctl start puma
$ gitlab-ctl start sidekiq

# status 확인
$ gitlab-ctl status

# 또는 한번에 전부 재실행
$ gitlab-ctl restart

 


자동 백업 구성

gitlab 컨테이너 안에는 cron 이 없기에 host 크론을 활용하여 실행

# host 에서 docker 명령어로 backup 명령어 실행하여 확인
$ docker exec gitlab-rake gitlab:backup:create

# 크론탭 설정 ( 매일 오전 2시 백업 )
$ crontab -e
0 2 * * * docker exec gitlab-rake gitlab:backup:create CRON=1

gitlab backup 보관주기 설정

# gitlab 컨테이너 접속
$ docker exec -it gitlab bash 

$ vi /etc/gitlab/gitlab.rb

# 초단위 입력 ( 7일 = 604800 )
gitlab_rails['backup_keep_time'] = 604800

환경설정 변경에 따른 재구성 후 재시작

# 컨텐이너 bash 접근
$ docker exec -it gitlab bash

$ gitlab-ctl reconfigure
$ gitlab-ctl restart

또는

$ docker exec gitlab gitlab-ctl reconfigure
$ docker exec gitlab gitlab-ctl restart
반응형