Uploads migrate Rake tasks

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

다른 저장소 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다.

개체 저장소로 마이그레이션하기

GitLab의 업로드를 개체 저장소로 마이그레이션하려면 업로드를 위해 개체 저장소를 구성한 후 이 작업을 사용하여 기존 업로드를 로컬 저장소에서 원격 저장소로 마이그레이션하세요.

모든 처리는 백그라운드 워커에서 이루어지며 다운타임이 필요하지 않습니다.

GitLab과 함께 개체 저장소 사용에 대해 더 알아보세요.

전체 Rake 작업

GitLab은 모든 업로드 파일(예: 아바타, 로고, 첨부 파일 및 파비콘)을 한 단계로 개체 저장소로 마이그레이션하는 래퍼 Rake 작업을 제공합니다. 래퍼 작업은 각 카테고리에 속하는 파일을 순차적으로 마이그레이션하기 위해 개별 Rake 작업을 호출합니다.

이러한 개별 Rake 작업은 다음 섹션에 설명되어 있습니다.

로컬 저장소에서 개체 저장소로 모든 업로드를 마이그레이션하려면 다음을 실행하세요:

  • Linux 패키지 설치:

    gitlab-rake "gitlab:uploads:migrate:all"
    
  • 소스 컴파일 설치:

    sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:migrate:all
    

선택적으로 모든 업로드가 성공적으로 마이그레이션되었는지 추적하고 확인하기 위해 PostgreSQL 콘솔을 사용할 수 있습니다:

  • GitLab 14.1 및 이전 버전을 실행하는 Linux 패키지 설치: sudo gitlab-rails dbconsole
  • GitLab 14.2 및 이후 버전을 실행하는 Linux 패키지 설치: sudo gitlab-rails dbconsole --database main
  • 소스 컴파일 설치: sudo -u git -H psql -d gitlabhq_production

아래 구문에서 store=2 (여기서 store=2objectstg를 나타냄)의 모든 아티팩트 수를 확인하세요:

gitlabhq_production=# SELECT count(*) AS total, sum(case when store = '1' then 1 else 0 end) AS filesystem, sum(case when store = '2' then 1 else 0 end) AS objectstg FROM uploads;

total | filesystem | objectstg
------+------------+-----------
   2409 |          0 |      2409

uploads 폴더에 디스크에 파일이 없는지 확인하세요:

sudo find /var/opt/gitlab/gitlab-rails/uploads -type f | grep -v tmp | wc -l

개별 Rake 작업

이미 전체 Rake 작업을 실행했다면 이러한 개별 작업을 실행할 필요가 없습니다.

이 Rake 작업은 마이그레이션할 업로드를 찾기 위해 세 가지 매개변수를 사용합니다:

매개변수 유형 설명
uploader_class 문자열 마이그레이션할 업로더 유형.
model_class 문자열 마이그레이션할 모델 유형.
mount_point 문자열/심볼 업로더가 마운트된 모델의 컬럼 이름.

참고: 이러한 매개변수는 주로 GitLab의 구조 내부에 사용되는 것이며 작업 목록을 참조하는 것이 좋습니다. 이러한 개별 작업을 실행한 후에는 나열된 유형에 포함되지 않은 업로드를 마이그레이션하기 위해 전체 Rake 작업을 실행하는 것이 좋습니다.

이 작업은 기본 배치 크기를 재정의하는 데 사용할 수 있는 환경 변수도 허용합니다:

변수 유형 설명
BATCH 정수 배치 크기 지정. 기본값은 200입니다.

다음은 각 업로드 유형에 대해 gitlab:uploads:migrate를 실행하는 방법을 보여줍니다.

Linux 패키지 (Omnibus)
# gitlab-rake gitlab:uploads:migrate[uploader_class, model_class, mount_point]

# 아바타
gitlab-rake "gitlab:uploads:migrate[AvatarUploader, Project, :avatar]"
gitlab-rake "gitlab:uploads:migrate[AvatarUploader, Group, :avatar]"
gitlab-rake "gitlab:uploads:migrate[AvatarUploader, User, :avatar]"

# 첨부 파일
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Note, :attachment]"
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :logo]"
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :header_logo]"

# 파비콘
gitlab-rake "gitlab:uploads:migrate[FaviconUploader, Appearance, :favicon]"

# 마크다운
gitlab-rake "gitlab:uploads:migrate[FileUploader, Project]"
gitlab-rake "gitlab:uploads:migrate[PersonalFileUploader, Snippet]"
gitlab-rake "gitlab:uploads:migrate[NamespaceFileUploader, Snippet]"
gitlab-rake "gitlab:uploads:migrate[FileUploader, MergeRequest]"

# 디자인 관리 디자인 썸네일
gitlab-rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action, :image_v432x230]"
소스 컴파일 (source)

모든 작업에 대해 RAILS_ENV=production을 사용하세요.

# sudo -u git -H bundle exec rake gitlab:uploads:migrate

# 아바타
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AvatarUploader, Project, :avatar]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AvatarUploader, Group, :avatar]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AvatarUploader, User, :avatar]"

# 첨부 파일
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AttachmentUploader, Note, :attachment]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :logo]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :header_logo]"

# 파비콘
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[FaviconUploader, Appearance, :favicon]"

# 마크다운
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[FileUploader, Project]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[PersonalFileUploader, Snippet]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[NamespaceFileUploader, Snippet]"
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[FileUploader, MergeRequest]"

# 디자인 관리 디자인 썸네일
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action]"

로컬 스토리지로 마이그레이션

로컬 스토리지로의 데이터 이전이 필요한 경우 객체 저장소를 비활성화해야 합니다.

경고: 확장된 다운타임이 필요합니다 때문에 마이그레이션 중에는 객체 저장소에 새 파일이 생성되지 않습니다. 객체 저장소에서 로컬 파일로의 이전을 허용하는 설정은 구성 변경을 위한 잠깐의 다운타임만 필요로 하는 라벨로써 이 이슈에서 추적됩니다.

단일 레이크 작업

GitLab은 모든 업로드된 파일(예: 아바타, 로고, 첨부 파일 및 파비콘)을 로컬 스토리지로 한 단계에 전체 이전하는 wrapper 레이크 작업을 제공합니다. 이 wrapper 작업은 각각의 카테고리에 속하는 파일을 마이그레이션하기 위해 개별 레이크 작업을 호출합니다.

이러한 레이크 작업에 대한 자세한 내용은 개별 레이크 작업을 참조하세요. 이 경우 레이크 작업 이름은 gitlab:uploads:migrate_to_local입니다.

객체 저장소에서 로컬 스토리지로 업로드를 마이그레이션하려면 다음의 레이크 작업을 실행하세요:

  • Linux 패키지 설치:

    gitlab-rake "gitlab:uploads:migrate_to_local:all"
    
  • 직접 컴파일한 설치:

    sudo RAILS_ENV=production -u git -H bundle exec rake gitlab:uploads:migrate_to_local:all
    

레이크 작업을 실행한 후, 객체 저장소 구성을 되돌려 객체 저장소를 비활성화할 수 있습니다.