업로드 마이그레이션 Rake 작업

Tier: Free, Premium, Ultimate

Offering: Self-managed

업로드 유형 간에 마이그레이션을 위한 Rake 작업이 있습니다.

객체 저장소로 마이그레이션

업로드를 위한 객체 저장소 구성 후에 GitLab으로, 이 작업을 사용하여 기존 업로드를 로컬 저장소에서 원격 저장소로 마이그레이션 할 수 있습니다.

모든 처리는 백그라운드 작업자에서 수행되며 다운타임이 필요 없습니다.

GitLab과 함께 객체 저장소를 사용하는 방법에 대해 더 알아보세요.

원스톱 Rake 작업

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

다음 섹션에서는 이러한 개별 Rake 작업에 대해 설명합니다.

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

  • 리눅스 패키지 installations:

    gitlab-rake "gitlab:uploads:migrate:all"
    
  • 셀프 컴파일 installations:

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

선택적으로 PostgreSQL 콘솔을 사용하여 진행 상황을 추적하고 모든 업로드가 성공적으로 마이그레이션된 것을 확인할 수 있습니다:

  • 리눅스 패키지 installations의 경우: sudo gitlab-rails dbconsole --database main.

  • 셀프 컴파일 installations의 경우: sudo -u git -H psql -d gitlabhq_production.

다음에서 objectstg를 확인하세요(여기서 store=2는 모든 아티팩트의 수):

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를 실행하는 방법을 보여줍니다.

리눅스 패키지 (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]"
셀프 컴파일 (소스)

모든 작업에 대해 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]"

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

어떤 이유로든 오브젝트 스토리지를 비활성화해야 하는 경우, 먼저 데이터를 오브젝트 스토리지를 통해 로컬 스토리지로 마이그레이션해야 합니다.

경고:
연장된 다운타임이 필요합니다 따라서 마이그레이션 동안 오브젝트 스토리지에서 새로운 파일이 생성되지 않습니다. 구성 변경으로 인해 잠깐의 다운타임만으로 오브젝트 스토리지에서 로컬 파일로 마이그레이션할 수 있도록 하는 구성 설정이 이 문제에서 추적되고 있습니다.

올인원 Rake 작업

GitLab은 업로드된 모든 파일(예: 아바타, 로고, 첨부파일 및 파비콘)을 한 번에 로컬 스토리지로 마이그레이션하는 래퍼 Rake 작업을 제공합니다. 래퍼 작업은 이러한 범주 각각에 해당하는 파일을 하나씩 마이그레이션하기 위해 개별 Rake 작업을 호출합니다.

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

오브젝트 스토리지에서 로컬 스토리지로 업로드를 마이그레이션하려면, 다음 Rake 작업을 실행하세요:

  • 리눅스 패키지 설치:

    gitlab-rake "gitlab:uploads:migrate_to_local:all"
    
  • 자체 컴파일 설치:

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

Rake 작업을 실행한 후, 오브젝트 스토리지 구성에 설명된 변경 사항을 취소하여 오브젝트 스토리를 비활성화할 수 있습니다.