백업

Tier: Free, Premium, Ultimate Offering: Self-managed

리눅스 패키지 설치에서의 백업 및 복원 구성

/etc/gitlab의 사본을 보관하거나, 최소한 /etc/gitlab/gitlab-secrets.json의 사본을 안전한 장소에 보관할 것을 권장합니다.

GitLab 애플리케이션 백업을 복원해야 하는 경우 gitlab-secrets.json도 복원해야 합니다.

복원하지 않으면, 2단계 인증을 사용하는 GitLab 사용자가 GitLab 서버에 대한 접근 권한을 잃게 되고, GitLab CI에 저장된 ‘보안 변수’도 손실됩니다.

구성 백업을 애플리케이션 데이터 백업과 같은 장소에 저장하는 것은 권장되지 않습니다. 아래를 참조하세요.

리눅스 패키지 설치에 대한 모든 구성은 /etc/gitlab에 저장됩니다. 구성을 백업하려면 sudo gitlab-ctl backup-etc를 실행하면 됩니다. 이 명령은 /etc/gitlab/config_backup/에 tar 아카이브를 생성합니다. 디렉토리와 백업 파일은 root만 읽을 수 있습니다.

참고:
sudo gitlab-ctl backup-etc --backup-path <DIRECTORY>를 실행하면 지정한 디렉토리에 백업이 저장됩니다. 디렉토리가 존재하지 않으면 생성됩니다. 절대 경로를 사용하는 것이 권장됩니다.

일일 애플리케이션 백업을 생성하려면 root 사용자에 대한 cron 테이블을 편집합니다:

sudo crontab -e -u root

cron 테이블이 편집기로 나타납니다.

/etc/gitlab/의 내용을 포함하는 tar 파일을 생성하는 명령을 입력하세요. 예를 들어, 평일 화요일(2일)부터 토요일(6일)까지 매일 아침 백업이 실행되도록 예약합니다:

15 04 * * 2-6  gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/

참고:
/secret/gitlab/backups/가 존재하는지 확인하세요.

다음과 같이 tar 파일을 추출할 수 있습니다.

# 기존의 /etc/gitlab 이름 변경
sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
# 구성 백업을 위해 아래의 예제 타임스탬프 변경
sudo tar -xf gitlab_config_1487687824_2017_02_21.tar -C /

구성 백업을 복원한 후 sudo gitlab-ctl reconfigure를 실행하는 것을 기억하세요.

참고:
SSH 호스트 키는 /etc/ssh/라는 별도의 위치에 저장됩니다. 전체 머신 복원을 수행해야 하는 경우 이 키들을 백업 및 복원하는 것도 잊지 마세요. 이를 통해 중간자 공격 경고를 피할 수 있습니다.

구성 백업의 백업 시간 제한 (오래된 백업 삭제)

GitLab 구성 백업은 GitLab 애플리케이션 백업에 사용되는 것과 동일한 backup_keep_time 설정을 사용하여 삭제할 수 있습니다.

이 설정을 사용하려면 /etc/gitlab/gitlab.rb를 편집하세요:

## 백업 생명 주기를 7일로 제한 - 604800초
gitlab_rails['backup_keep_time'] = 604800

기본 backup_keep_time 설정은 0이며, 이는 모든 GitLab 구성 및 애플리케이션 백업을 유지합니다.

backup_keep_time이 설정된 후에는 sudo gitlab-ctl backup-etc --delete-old-backups를 실행하여 현재 시간에서 backup_keep_time을 뺀 시간보다 오래된 모든 백업을 삭제할 수 있습니다.

기존 백업을 모두 유지하려면 --no-delete-old-backups라는 매개변수를 제공할 수 있습니다.

경고:
매개변수가 제공되지 않으면 기본값은 --delete-old-backups입니다. 이는 backup_keep_time이 0보다 클 경우, 현재 시간에서 backup_keep_time을 뺀 시간보다 오래된 모든 백업을 삭제합니다.

애플리케이션 데이터에서 구성 백업 분리하기

GitLab 애플리케이션 백업(Git 저장소, SQL 데이터)을 구성 백업(/etc/gitlab)과 같은 장소에 저장하지 마세요.

gitlab-secrets.json 파일(및 아마도 gitlab.rb 파일)에는 SQL 데이터베이스에서 민감한 데이터를 보호하기 위한 데이터베이스 암호화 키가 포함되어 있습니다:

  • GitLab 이중 인증(2FA) 사용자 비밀(‘QR 코드’)
  • GitLab CI ‘보안 변수’

구성 백업을 애플리케이션 데이터 백업과 분리하면, 암호화된 애플리케이션 데이터가 해독하는 데 필요한 키와 함께 손실/유출/도난될 가능성을 줄일 수 있습니다.

애플리케이션 백업 생성하기

저장소 및 GitLab 메타데이터의 백업을 생성하려면, 백업 생성 문서를 따르세요.

백업 생성은 /var/opt/gitlab/backups에 tar 파일을 저장합니다.

GitLab 백업을 다른 디렉토리에 저장하려면, /etc/gitlab/gitlab.rb에 다음 설정을 추가하고 sudo gitlab-ctl reconfigure를 실행하세요:

gitlab_rails['backup_path'] = '/mnt/backups'

Docker 컨테이너에서 GitLab 인스턴스에 대한 백업 생성하기

caution
백업 명령은 성능 이유 또는 Patroni 클러스터와 함께 사용할 경우 PgBouncer를 사용하는 경우 추가 매개변수가 필요합니다.

백업은 명령 앞에 docker exec -t <your container name>를 추가하여 호스트에서 예약할 수 있습니다.

애플리케이션 백업:

docker exec -t <your container name> gitlab-backup

구성 및 비밀 백업:

docker exec -t <your container name> /bin/sh -c 'gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/'
note
이 백업을 컨테이너 외부에 유지하려면 다음 디렉토리에 볼륨을 마운트하세요:
  1. /secret/gitlab/backups.
  2. 모든 애플리케이션 데이터를 위해 /var/opt/gitlab, 여기에는 백업도 포함됩니다.
  3. /var/opt/gitlab/backups (선택 사항). gitlab-backup 도구는 기본적으로 이 디렉토리에 기록합니다.
    이 디렉토리는 /var/opt/gitlab 내부에 있지만, Docker는 이러한 마운트를 정렬합니다 크기 때문에 조화를 이룹니다.

    이 구성은 예를 들어 다음을 가능하게 합니다:

    • 정기 로컬 저장소의 애플리케이션 데이터(두 번째 마운트를 통해).
    • 네트워크 저장소의 백업 볼륨(세 번째 마운트를 통해).

애플리케이션 백업 복원하기

복원 문서를 참조하세요.

비포장 데이터베이스를 사용한 백업 및 복원

비포장 데이터베이스를 사용하는 경우 비포장 데이터베이스 사용에 대한 문서를 참조하세요.

원격(클라우드) 스토리지에 백업 업로드하기

자세한 내용은 백업 문서를 확인하세요.

수동으로 백업 디렉토리 관리

Linux 패키지 설치는 gitlab_rails['backup_path']로 설정된 백업 디렉토리를 생성합니다. 해당 디렉토리는 GitLab을 실행 중인 사용자가 소유하며, 해당 사용자만 접근할 수 있도록 엄격한 권한이 설정되어 있습니다.

이 디렉토리는 백업 아카이브를 보관하며, 이 아카이브는 민감한 정보를 포함하고 있습니다.

일부 조직에서는 백업 아카이브를 외부로 전송하는 등의 이유로 권한을 다르게 설정해야 할 필요가 있습니다.

백업 디렉토리 관리를 비활성화하려면 /etc/gitlab/gitlab.rb에서 다음과 같이 설정하세요:

gitlab_rails['manage_backup_path'] = false

경고:

이 구성 옵션을 설정하면, gitlab_rails['backup_path']에 지정된 디렉토리를 생성하고, user['username']에 지정된 사용자가 올바르게 접근할 수 있도록 권한을 설정하는 것은 전적으로 여러분의 책임입니다. 이를 실패할 경우 GitLab에서 백업 아카이브를 생성할 수 없습니다.