대규모 참조 아키텍처 백업 및 복원
이 문서는 다음을 설명합니다:
- 일일 백업 구성하기
- 지금 백업하기 (계획됨)
- 백업 복원하기
이 문서는 다음을 사용하는 환경을 위한 것입니다:
- Linux 패키지 (Omnibus) 및 클라우드 기반 하이브리드 참조 아키텍처 60 RPS / 3,000 사용자 이상
- PostgreSQL 데이터를 위한 Amazon RDS
- 객체 저장소를 위한 Amazon S3
- 모든 가능한 것을 저장하기 위한 객체 저장소, 블롭 및 컨테이너 레지스트리를 포함하여
일일 백업 구성하기
PostgreSQL 데이터 백업 구성하기
백업 명령은 pg_dump
를 사용하며, 이는 100GB 이상의 데이터베이스에 적합하지 않습니다. 네이티브하고 강력한 백업 기능을 갖춘 PostgreSQL 솔루션을 선택해야 합니다.
- AWS Backup 구성하기하여 RDS (및 S3) 데이터를 백업하십시오. 최대 보호를 위해 지속적인 백업 및 스냅샷 백업 모두 구성하세요.
- AWS Backup에서 백업을 별도의 지역으로 복사하도록 구성하세요. AWS가 백업을 수행할 때, 백업은 저장된 지역에서만 복원될 수 있습니다.
- AWS Backup이 최소한 한 번 이상 예약된 백업을 수행한 후, 필요에 따라 온디맨드 백업을 생성하세요.
Google Cloud SQL 데이터의 자동 일일 백업을 예약하세요.
일일 백업은 1년 동안 유지될 수 있습니다, 트랜잭션 로그는 기본적으로 7일 동안 유지됩니다.
객체 저장소 데이터 백업 구성하기
객체 저장소, (NFS가 아님)는 GitLab 데이터를 저장하는 데 권장됩니다, 블롭 및 컨테이너 레지스트리를 포함합니다.
AWS Backup을 구성하여 S3 데이터를 백업합니다. 이는 PostgreSQL 데이터의 백업 구성하기와 동시에 수행할 수 있습니다.
- GCS에 백업 버킷 생성하기.
-
스토리지 전송 서비스 작업 생성하기하여 각 GitLab 객체 저장소 버킷을 백업 버킷으로 복사합니다. 이 작업들은 한 번만 생성할 수 있으며, 일일 실행을 예약할 수 있습니다. 그러나 이는 새로운 데이터와 오래된 데이터가 혼합되어, GitLab에서 삭제된 파일도 백업에 남아 있게 됩니다. 이는 복원 후 스토리지를 낭비하지만, 그 외에는 문제가 되지 않습니다. 이 파일들은 GitLab 데이터베이스에 존재하지 않기 때문에 GitLab 사용자에게는 접근할 수 없습니다. 복원 후 이 고아 파일들을 제거할 수 있습니다, 하지만 이 정리 Rake 작업은 파일의 하위 집합에 대해서만 작동합니다.
-
When to overwrite
에서Never
를 선택하세요. GitLab 객체 저장된 파일은 불변 상태로 의도되어 있습니다. 이 선택은 악의적인 행위자가 GitLab 파일을 변형하는 데 성공했을 경우 도움이 될 수 있습니다. -
When to delete
에서Never
를 선택하세요. 백업 버킷을 소스와 동기화하면, 소스에서 파일이 실수로 또는 악의적으로 삭제되면 복구할 수 없습니다.
-
-
또는 객체 저장소를 각 날짜별로 구분된 버킷이나 하위 디렉토리에 백업할 수도 있습니다. 이는 복원 후 고아 파일 문제를 피하고 필요한 경우 파일 버전의 백업을 지원합니다. 하지만 이는 백업 스토리지 비용을 크게 증가시킵니다. 이는 Cloud Scheduler에 의해 트리거되는 Cloud Function이나 크론잡에서 실행되는 스크립트를 통해 수행할 수 있습니다. 부분적인 예는 다음과 같습니다:
# 매 명령어에서 GCP 프로젝트를 지정하지 않도록 설정 gcloud config set project example-gcp-project-name # 스토리지 전송 서비스의 숨겨진 서비스 계정에 백업 버킷에 쓸 수 있는 권한 부여. 정수 123456789012는 GCP 프로젝트 ID입니다. gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.objectAdmin gs://backup-bucket # 스토리지 전송 서비스의 숨겨진 서비스 계정에 소스 버킷의 객체를 나열하고 읽을 수 있는 권한 부여. 정수 123456789012는 GCP 프로젝트 ID입니다. gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-artifacts gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-ci-secure-files gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-dependency-proxy gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-lfs gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-mr-diffs gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-packages gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-pages gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-registry gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-terraform-state gsutil iam ch serviceAccount:project-123456789012@storage-transfer-service.iam.gserviceaccount.com:roles/storage.legacyBucketReader,roles/storage.objectViewer gs://gitlab-bucket-uploads # 각 버킷에 대해 전송 작업을 생성하여 백업 버킷의 하위 디렉토리를 대상으로 설정합니다. today=$(date +%F) gcloud transfer jobs create gs://gitlab-bucket-artifacts/ gs://backup-bucket/$today/artifacts/ --name "$today-backup-artifacts" gcloud transfer jobs create gs://gitlab-bucket-ci-secure-files/ gs://backup-bucket/$today/ci-secure-files/ --name "$today-backup-ci-secure-files" gcloud transfer jobs create gs://gitlab-bucket-dependency-proxy/ gs://backup-bucket/$today/dependency-proxy/ --name "$today-backup-dependency-proxy" gcloud transfer jobs create gs://gitlab-bucket-lfs/ gs://backup-bucket/$today/lfs/ --name "$today-backup-lfs" gcloud transfer jobs create gs://gitlab-bucket-mr-diffs/ gs://backup-bucket/$today/mr-diffs/ --name "$today-backup-mr-diffs" gcloud transfer jobs create gs://gitlab-bucket-packages/ gs://backup-bucket/$today/packages/ --name "$today-backup-packages" gcloud transfer jobs create gs://gitlab-bucket-pages/ gs://backup-bucket/$today/pages/ --name "$today-backup-pages" gcloud transfer jobs create gs://gitlab-bucket-registry/ gs://backup-bucket/$today/registry/ --name "$today-backup-registry" gcloud transfer jobs create gs://gitlab-bucket-terraform-state/ gs://backup-bucket/$today/terraform-state/ --name "$today-backup-terraform-state" gcloud transfer jobs create gs://gitlab-bucket-uploads/ gs://backup-bucket/$today/uploads/ --name "$today-backup-uploads"
- 이러한 전송 작업은 실행 후 자동으로 삭제되지 않습니다. 스크립트에서 오래된 작업을 정리할 수 있습니다.
- 예제 스크립트는 오래된 백업을 삭제하지 않습니다. 원하는 보존 정책에 따라 오래된 백업을 정리할 수 있습니다.
- 데이터 불일치를 줄이기 위해 백업이 Cloud SQL 백업보다 동일한 시점에 수행되거나 그 이후에 이루어지도록 해야 합니다.
Git 리포지토리 백업 구성
Gitaly 서버 측 백업을 수행하도록 cronjob을 설정하세요:
- 모든 Gitaly 노드에 서버 측 백업 대상을 구성합니다.
-
원격(클라우드) 저장소에 백업 업로드를 구성합니다. Gitaly가 모든 Git 데이터를 자체 객체 저장소 버킷에 백업하더라도,
gitlab-backup
명령은 백업 메타데이터를 포함하는tar
파일도 생성합니다. 이tar
파일은 복구 명령에 필요합니다. - 두 버킷 모두를 객체 저장소 데이터의 백업에 추가하세요.
- Puma 또는 Sidekiq를 실행하는 GitLab Rails 노드에 SSH로 접속하세요.
-
Git 데이터의 전체 백업을 수행하세요.
REPOSITORIES_SERVER_SIDE
변수를 사용하고 PostgreSQL 데이터를 건너뜁니다:sudo gitlab-backup create REPOSITORIES_SERVER_SIDE=true SKIP=db
이렇게 하면 Gitaly 노드가 Git 데이터 및 일부 메타데이터를 원격 저장소에 업로드합니다. 업로드, 아티팩트 및 LFS와 같은 Blob은 명시적으로 건너뛸 필요가 없습니다. 왜냐하면
gitlab-backup
명령은 기본적으로 객체 저장소를 백업하지 않기 때문입니다. - 다음 단계에 필요한 백업의 백업 ID를 기록합니다. 예를 들어, 백업 명령이 다음과 같은 출력을 제공하면
2024-02-22 02:17:47 UTC -- Backup 1708568263_2024_02_22_16.9.0-ce is done.
백업 ID는1708568263_2024_02_22_16.9.0-ce
입니다. - 전체 백업이 Gitaly 백업 버킷과 일반 백업 버킷 모두에 데이터를 생성했는지 확인합니다.
-
백업 명령을 다시 실행하고, 이번에는 Git 리포지토리의 증분 백업 및 백업 ID를 지정합니다. 이전 단계의 예제 ID를 사용하면, 명령은 다음과 같습니다:
sudo gitlab-backup create REPOSITORIES_SERVER_SIDE=true SKIP=db INCREMENTAL=yes PREVIOUS_BACKUP=1708568263_2024_02_22_16.9.0-ce
PREVIOUS_BACKUP
의 값은 이 명령에 의해 사용되지는 않지만, 명령에서 필요합니다. 이 불필요한 요구 사항을 제거하기 위한 문제가 있습니다. 문제 429141 참조하세요. - 증분 백업이 성공적으로 완료되었고, 객체 저장소에 데이터가 추가되었는지 확인하세요.
-
cron을 구성하여 매일 백업을 만들도록 합니다.
root
사용자에 대한 crontab을 엽니다:sudo su - crontab -e
-
거기에 매달 매일 2 AM에 백업을 예약하기 위해 다음 행을 추가하세요. 백업 복구에 필요한 증분 수를 제한하기 위해, 매월 첫 번째 날에 Git 리포지토리의 전체 백업을 수행하고, 나머지 날들은 증분 백업을 수행합니다:
0 2 1 * * /opt/gitlab/bin/gitlab-backup create REPOSITORIES_SERVER_SIDE=true SKIP=db CRON=1 0 2 2-31 * * /opt/gitlab/bin/gitlab-backup create REPOSITORIES_SERVER_SIDE=true SKIP=db INCREMENTAL=yes PREVIOUS_BACKUP=1708568263_2024_02_22_16.9.0-ce CRON=1
- 모든 Gitaly 노드에 서버 측 백업 대상을 구성합니다.
-
백업 유틸리티에 대한 객체 저장소 버킷을 구성합니다. Gitaly가 모든 Git 데이터를 자체 객체 저장소 버킷에 백업하더라도,
backup-utility
명령은 백업 메타데이터를 포함하는tar
파일도 생성합니다. 이tar
파일은 복구 명령에 필요합니다. - 두 버킷 모두를 객체 저장소 데이터의 백업에 추가하세요.
-
Git 데이터의 전체 백업을 수행하세요.
--repositories-server-side
옵션을 사용하고, 모든 다른 데이터는 건너뜁니다:kubectl exec <Toolbox pod name> -it -- backup-utility --repositories-server-side --skip db,builds,pages,registry,uploads,artifacts,lfs,packages,external_diffs,terraform_state,pages,ci_secure_files
이렇게 하면 Gitaly 노드가 Git 데이터 및 일부 메타데이터를 원격 저장소에 업로드합니다. 툴박스 포함 도구를 참조하세요.
- 전체 백업이 Gitaly 백업 버킷과 일반 백업 버킷 모두에 데이터를 만들었는지 확인합니다. 증분 리포지토리 백업은 서버 측 리포지토리 백업과 함께
backup-utility
에서 지원되지 않습니다. 차트 문제 3421를 참조하세요. -
cron을 구성하여 매일 백업을 만들도록 합니다. 구체적으로,
gitlab.toolbox.backups.cron.extraArgs
를 설정하여 다음을 포함합니다:--repositories-server-side --skip db --skip repositories --skip uploads --skip builds --skip artifacts --skip pages --skip lfs --skip terraform_state --skip registry --skip packages --skip ci_secure_files
구성 파일의 백업 구성
배포 외부에 구성 및 비밀이 정의되어 있고 이를 배포하는 경우, 백업 전략의 구현은 특정 설정 및 요구 사항에 따라 다릅니다. 예를 들어, AWS Secret Manager에 비밀을 저장하고 다중 지역으로 복제하는 방법과 비밀을 자동으로 백업하는 스크립트를 구성할 수 있습니다.
배포 내에만 구성 및 비밀이 정의된 경우:
-
구성 파일 저장에서는 구성 및 비밀 파일을 추출하는 방법을 설명합니다.
-
이러한 파일은 별도의 더 제한적인 객체 스토리지 계정에 업로드해야 합니다.
백업 복원
GitLab 인스턴스의 백업을 복원합니다.
기본 요구 사항
백업을 복원하기 전에:
-
작동 중인 대상 GitLab 인스턴스를 선택합니다.
-
대상 GitLab 인스턴스가 AWS 백업이 저장된 지역에 있는지 확인합니다.
-
대상 GitLab 인스턴스가 백업 데이터가 생성된 정확히 동일한 버전 및 유형(CE 또는 EE)의 GitLab을 사용하고 있는지 확인합니다. 예: CE 15.1.4.
-
대상 GitLab 인스턴스에 동일한 저장소 스토리지가 구성되어 있는지 확인합니다. 추가 스토리지는 괜찮습니다.
-
새로운 비밀 또는 구성을 사용하고, 복원 중에 예상치 못한 구성 변경을 피하려면:
-
모든 노드에서 Linux 패키지 설치:
-
Helm 차트(Kubernetes) 설치:
-
모든 GitLab Linux 패키지 노드에서 다음을 실행합니다:
sudo gitlab-ctl reconfigure sudo gitlab-ctl start
-
차트를 배포하여 실행 중인 GitLab 인스턴스가 있는지 확인합니다. Toolbox 팟이 활성화되고 실행 중인지 확인하려면 다음 명령을 실행합니다:
kubectl get pods -lrelease=RELEASE_NAME,app=toolbox
-
Webservice, Sidekiq 및 Toolbox 팟을 재시작해야 합니다. 이러한 팟을 재시작하는 가장 안전한 방법은 다음을 실행하는 것입니다:
kubectl delete pods -lapp=sidekiq,release=<helm release name> kubectl delete pods -lapp=webservice,release=<helm release name> kubectl delete pods -lapp=toolbox,release=<helm release name>
-
-
-
대상 GitLab 인스턴스가 여전히 작동하는지 확인합니다. 예를 들면:
-
헬스 체크 엔드포인트로 요청합니다.
-
GitLab 체크 Rake 작업을 실행합니다.
-
-
PostgreSQL 데이터베이스에 연결된 GitLab 서비스를 중지합니다.
-
Puma 또는 Sidekiq를 실행하는 모든 노드에서 Linux 패키지 설치는 다음을 실행합니다:
sudo gitlab-ctl stop
-
Helm 차트 (Kubernetes) 설치:
-
후속 재시작을 위해 데이터베이스 클라이언트의 현재 복제본 수를 기록합니다:
kubectl get deploy -n <namespace> -lapp=sidekiq,release=<helm release name> -o jsonpath='{.items[].spec.replicas}{"\n"}' kubectl get deploy -n <namespace> -lapp=webservice,release=<helm release name> -o jsonpath='{.items[].spec.replicas}{"\n"}' kubectl get deploy -n <namespace> -lapp=prometheus,release=<helm release name> -o jsonpath='{.items[].spec.replicas}{"\n"}'
-
복원 프로세스에 방해가 되지 않도록 데이터베이스 클라이언트를 중지합니다:
kubectl scale deploy -lapp=sidekiq,release=<helm release name> -n <namespace> --replicas=0 kubectl scale deploy -lapp=webservice,release=<helm release name> -n <namespace> --replicas=0 kubectl scale deploy -lapp=prometheus,release=<helm release name> -n <namespace> --replicas=0
-
-
오브젝트 저장소 데이터 복원
각 버킷은 AWS 내에서 별도의 백업으로 존재하며 각 백업은 기존 버킷이나 새 버킷으로 복원할 수 있습니다.
-
버킷을 복원하려면, 올바른 권한이 있는 IAM 역할이 필요합니다:
AWSBackupServiceRolePolicyForBackup
AWSBackupServiceRolePolicyForRestores
AWSBackupServiceRolePolicyForS3Restore
AWSBackupServiceRolePolicyForS3Backup
-
기존 버킷을 사용하는 경우, 액세스 제어 목록을 활성화해야 합니다.
-
복원 작업이 실행되는 동안 PostgreSQL 데이터 복원으로 넘어갈 수 있습니다.
- 백업된 데이터를 GitLab 버킷으로 전송하기 위해 스토리지 전송 서비스 작업을 생성합니다.
- 전송 작업이 실행되는 동안 PostgreSQL 데이터 복원으로 넘어갈 수 있습니다.
PostgreSQL 데이터 복원
-
내장 도구를 사용하여 AWS RDS 데이터베이스를 복원합니다, 이는 새로운 RDS 인스턴스를 생성합니다.
-
새로운 RDS 인스턴스가 다른 엔드포인트를 갖기 때문에, 새 데이터베이스를 가리키도록 GitLab 인스턴스를 재구성해야 합니다:
-
Linux 패키지 설치의 경우, 비포장 PostgreSQL 데이터베이스 관리 서버 사용을 따르세요.
-
Helm 차트 (Kubernetes) 설치의 경우, 외부 데이터베이스로 GitLab 차트 구성하기를 따르세요.
-
-
계속 진행하기 전에 새로운 RDS 인스턴스가 생성되고 사용할 준비가 될 때까지 기다리세요.
- 내장 도구를 사용하여 Google Cloud SQL 데이터베이스를 복원합니다.
-
새 데이터베이스 인스턴스로 복원하는 경우, GitLab을 새 데이터베이스를 가리키도록 재구성합니다:
-
Linux 패키지 설치의 경우, 비포장 PostgreSQL 데이터베이스 관리 서버 사용을 따르세요.
-
Helm 차트 (Kubernetes) 설치의 경우, 외부 데이터베이스로 GitLab 차트 구성하기를 따르세요.
-
- 계속 진행하기 전에 Cloud SQL 인스턴스가 사용할 준비가 될 때까지 기다리세요.
Git 리포지토리 복원
먼저, 오브젝트 저장소 데이터 복원의 일환으로 이미 다음의 작업을 수행했어야 합니다:
- Git 리포지토리의 Gitaly 서버 측 백업이 포함된 버킷을 복원했습니다.
-
*_gitlab_backup.tar
파일이 포함된 버킷을 복원했습니다.
-
GitLab Rails 노드에 SSH로 접속합니다. 이 노드는 Puma 또는 Sidekiq을 실행하는 노드입니다.
-
백업 버킷에서 PostgreSQL 및 오브젝트 저장소 데이터와 정렬된 타임스탬프 기준으로
*_gitlab_backup.tar
파일을 선택합니다. -
/var/opt/gitlab/backups/
에tar
파일을 다운로드합니다. -
복원을 수행하되, 복원할 백업의 ID를 지정하고 이름에서
_gitlab_backup.tar
를 생략합니다:# 이 명령은 GitLab 데이터베이스의 내용을 덮어씁니다! sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce SKIP=db
백업 tar 파일과 설치된 GitLab 버전 간의 불일치가 있을 경우, 복원 명령이 오류 메시지와 함께 중단됩니다.
올바른 GitLab 버전을 설치한 후 다시 시도하세요.
-
GitLab을 재시작하고 확인합니다:
-
모든 Puma 또는 Sidekiq 노드에서 다음을 실행합니다:
sudo gitlab-ctl restart
-
한 Puma 또는 Sidekiq 노드에서 다음을 실행합니다:
sudo gitlab-rake gitlab:check SANITIZE=true
-
-
데이터베이스 값이 복호화될 수 있는지 확인합니다 특히
/etc/gitlab/gitlab-secrets.json
이 복원되었거나 다른 서버가 복원의 대상으로 지정된 경우:
Puma 또는 Sidekiq 노드에서 다음을 실행합니다:
sudo gitlab-rake gitlab:doctor:secrets
-
추가적인 확신을 위해, 업로드된 파일에 대한 무결성 검사를 수행할 수 있습니다:
Puma 또는 Sidekiq 노드에서 다음을 실행합니다:
sudo gitlab-rake gitlab:artifacts:check sudo gitlab-rake gitlab:lfs:check sudo gitlab-rake gitlab:uploads:check
누락되거나 손상된 파일이 발견되었을 경우, 항상 백업 및 복원 과정이 실패했다는 의미는 아닙니다.
예를 들어, 해당 파일이 소스 GitLab 인스턴스에서 누락되거나 손상되었을 수 있습니다. 이전 백업을 교차 확인해야 할 수도 있습니다.
GitLab을 새로운 환경으로 마이그레이션하는 경우, 소스 GitLab 인스턴스에서 동일한 검사를 실행하여 무결성 검사 결과가 기존의 것인지 아니면 백업 및 복원 과정과 관련된 것인지 확인할 수 있습니다.
-
툴박스 팟에 SSH로 접속합니다.
-
백업 버킷에서 PostgreSQL 및 오브젝트 저장소 데이터와 정렬된 타임스탬프 기준으로
*_gitlab_backup.tar
파일을 선택합니다. -
/var/opt/gitlab/backups/
에tar
파일을 다운로드합니다. -
복원을 수행하되, 복원할 백업의 ID를 지정하고 이름에서
_gitlab_backup.tar
를 생략합니다:# 이 명령은 Gitaly의 내용을 덮어씁니다! kubectl exec <Toolbox pod name> -it -- backup-utility --restore -t 11493107454_2018_04_25_10.6.4-ce --skip db,builds,pages,registry,uploads,artifacts,lfs,packages,external_diffs,terraform_state,pages,ci_secure_files
백업 tar 파일과 설치된 GitLab 버전 간의 불일치가 있을 경우, 복원 명령이 오류 메시지와 함께 중단됩니다.
올바른 GitLab 버전을 설치한 후 다시 시도하세요.
-
GitLab을 재시작하고 확인합니다:
-
사전 요구 사항에 적혀있는 복제 수를 사용하여 중지된 배포를 시작합니다:
kubectl scale deploy -lapp=sidekiq,release=<helm release name> -n <namespace> --replicas=<original value> kubectl scale deploy -lapp=webservice,release=<helm release name> -n <namespace> --replicas=<original value> kubectl scale deploy -lapp=prometheus,release=<helm release name> -n <namespace> --replicas=<original value>
-
툴박스 팟에서 다음을 실행합니다:
sudo gitlab-rake gitlab:check SANITIZE=true
-
-
데이터베이스 값이 복호화될 수 있는지 확인합니다 특히
/etc/gitlab/gitlab-secrets.json
이 복원되었거나 다른 서버가 복원의 대상으로 지정된 경우:
툴박스 팟에서 다음을 실행합니다:
sudo gitlab-rake gitlab:doctor:secrets
-
추가적인 확신을 위해, 업로드된 파일에 대한 무결성 검사를 수행할 수 있습니다:
이러한 명령은 모든 행을 반복 처리하기 때문에 오랜 시간이 걸릴 수 있습니다. 따라서 툴박스 팟 대신 GitLab Rails 노드에서 다음 명령을 실행합니다:
sudo gitlab-rake gitlab:artifacts:check sudo gitlab-rake gitlab:lfs:check sudo gitlab-rake gitlab:uploads:check
누락되거나 손상된 파일이 발견되었을 경우, 항상 백업 및 복원 과정이 실패했다는 의미는 아닙니다.
예를 들어, 해당 파일이 소스 GitLab 인스턴스에서 누락되거나 손상되었을 수 있습니다. 이전 백업을 교차 확인해야 할 수도 있습니다.
GitLab을 새로운 환경으로 마이그레이션하는 경우, 소스 GitLab 인스턴스에서 동일한 검사를 실행하여 무결성 검사 결과가 기존의 것인지 아니면 백업 및 복원 과정과 관련된 것인지 확인할 수 있습니다.
복원이 완료되었습니다.