InfoGrab Docs

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

요약

다양한 스토리지 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다. GitLab에 대한 업로드를 위해 오브젝트 스토리지를 구성한 후, 이 작업을 사용하여 기존 업로드를 로컬 스토리지에서 원격 스토리지로 마이그레이션합니다.

다양한 스토리지 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다.

오브젝트 스토리지로 마이그레이션#

GitLab에 대한 업로드를 위해 오브젝트 스토리지를 구성한 후, 이 작업을 사용하여 기존 업로드를 로컬 스토리지에서 원격 스토리지로 마이그레이션합니다.

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

GitLab에서 오브젝트 스토리지 사용에 대해 자세히 읽어보세요.

All-in-one Rake 작업#

GitLab은 업로드된 모든 파일(예: 아바타, 로고, 첨부 파일, 파비콘)을 한 번에 오브젝트 스토리지로 마이그레이션하는 래퍼 Rake 작업을 제공합니다. 래퍼 작업은 이러한 각 카테고리에 속하는 파일을 하나씩 마이그레이션하는 개별 Rake 작업을 호출합니다.

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

로컬 스토리지에서 오브젝트 스토리지로 모든 업로드를 마이그레이션하려면 다음을 실행합니다:

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

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

  • Linux 패키지 설치의 경우 sudo gitlab-rails dbconsole --database main.
  • 자체 컴파일 설치의 경우 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 작업#

All-in-one Rake 작업을 이미 실행했다면 이러한 개별 작업을 실행할 필요가 없습니다.

Rake 작업은 세 가지 매개변수를 사용하여 마이그레이션할 업로드를 찾습니다:

매개변수 유형 설명
uploader_class string 마이그레이션할 업로더의 유형.
model_class string 마이그레이션할 모델의 유형.
mount_point string/symbol 업로더가 마운트된 모델의 열 이름.
Note

이러한 매개변수는 주로 GitLab의 구조에 내부적인 것으로, 대신 아래의 작업 목록을 참조하는 것이 좋습니다. 이러한 개별 작업을 실행한 후, 나열된 유형에 포함되지 않은 업로드를 마이그레이션하기 위해 All-in-one Rake 작업을 실행하는 것을 권장합니다.

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

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

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

# gitlab-rake gitlab:uploads:migrate[uploader_class, model_class, mount_point]

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

# Attachments
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :logo]"
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :header_logo]"

# Favicon
gitlab-rake "gitlab:uploads:migrate[FaviconUploader, Appearance, :favicon]"

# Markdown
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]"

# Design Management design thumbnails
gitlab-rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action, :image_v432x230]"

모든 작업에 RAILS_ENV=production을 사용합니다.

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

# Avatars
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]"

# Attachments
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]"

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

# Markdown
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]"

# Design Management design thumbnails
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action]"

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

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

Warning

마이그레이션 중에 오브젝트 스토리지에 새 파일이 생성되지 않도록 장기 다운타임이 필요합니다. 구성 변경을 위한 짧은 다운타임만으로 오브젝트 스토리지에서 로컬 파일로 마이그레이션할 수 있는 구성 설정이 이 이슈에서 추적되고 있습니다.

또한, Cloud Native GitLab에서는 로컬 스토리지가 임시적이고 모든 GitLab Rails 애플리케이션 컨테이너와 공유되지 않기 때문에 일반적으로 로컬 스토리지로 데이터를 마이그레이션하는 것은 안전하지 않습니다.

All-in-one Rake 작업#

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

이러한 Rake 작업에 대한 자세한 내용은 개별 Rake 작업을 참조하세요. 이 경우 작업 이름은 gitlab:uploads:migrate_to_local임을 유의하세요.

오브젝트 스토리지에서 로컬 스토리지로 업로드를 마이그레이션하려면:

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 작업을 실행한 후 오브젝트 스토리지 구성 지침에서 설명한 변경 사항을 되돌려 오브젝트 스토리지를 비활성화할 수 있습니다.

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

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

다양한 스토리지 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다. GitLab에 대한 업로드를 위해 오브젝트 스토리지를 구성한 후, 이 작업을 사용하여 기존 업로드를 로컬 스토리지에서 원격 스토리지로 마이그레이션합니다.

다양한 스토리지 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다.

오브젝트 스토리지로 마이그레이션#

GitLab에 대한 업로드를 위해 오브젝트 스토리지를 구성한 후, 이 작업을 사용하여 기존 업로드를 로컬 스토리지에서 원격 스토리지로 마이그레이션합니다.

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

GitLab에서 오브젝트 스토리지 사용에 대해 자세히 읽어보세요.

All-in-one Rake 작업#

GitLab은 업로드된 모든 파일(예: 아바타, 로고, 첨부 파일, 파비콘)을 한 번에 오브젝트 스토리지로 마이그레이션하는 래퍼 Rake 작업을 제공합니다. 래퍼 작업은 이러한 각 카테고리에 속하는 파일을 하나씩 마이그레이션하는 개별 Rake 작업을 호출합니다.

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

로컬 스토리지에서 오브젝트 스토리지로 모든 업로드를 마이그레이션하려면 다음을 실행합니다:

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

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

  • Linux 패키지 설치의 경우 sudo gitlab-rails dbconsole --database main.
  • 자체 컴파일 설치의 경우 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 작업#

All-in-one Rake 작업을 이미 실행했다면 이러한 개별 작업을 실행할 필요가 없습니다.

Rake 작업은 세 가지 매개변수를 사용하여 마이그레이션할 업로드를 찾습니다:

매개변수 유형 설명
uploader_class string 마이그레이션할 업로더의 유형.
model_class string 마이그레이션할 모델의 유형.
mount_point string/symbol 업로더가 마운트된 모델의 열 이름.
Note

이러한 매개변수는 주로 GitLab의 구조에 내부적인 것으로, 대신 아래의 작업 목록을 참조하는 것이 좋습니다. 이러한 개별 작업을 실행한 후, 나열된 유형에 포함되지 않은 업로드를 마이그레이션하기 위해 All-in-one Rake 작업을 실행하는 것을 권장합니다.

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

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

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

# gitlab-rake gitlab:uploads:migrate[uploader_class, model_class, mount_point]

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

# Attachments
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :logo]"
gitlab-rake "gitlab:uploads:migrate[AttachmentUploader, Appearance, :header_logo]"

# Favicon
gitlab-rake "gitlab:uploads:migrate[FaviconUploader, Appearance, :favicon]"

# Markdown
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]"

# Design Management design thumbnails
gitlab-rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action, :image_v432x230]"

모든 작업에 RAILS_ENV=production을 사용합니다.

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

# Avatars
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]"

# Attachments
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]"

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

# Markdown
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]"

# Design Management design thumbnails
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action]"

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

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

Warning

마이그레이션 중에 오브젝트 스토리지에 새 파일이 생성되지 않도록 장기 다운타임이 필요합니다. 구성 변경을 위한 짧은 다운타임만으로 오브젝트 스토리지에서 로컬 파일로 마이그레이션할 수 있는 구성 설정이 이 이슈에서 추적되고 있습니다.

또한, Cloud Native GitLab에서는 로컬 스토리지가 임시적이고 모든 GitLab Rails 애플리케이션 컨테이너와 공유되지 않기 때문에 일반적으로 로컬 스토리지로 데이터를 마이그레이션하는 것은 안전하지 않습니다.

All-in-one Rake 작업#

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

이러한 Rake 작업에 대한 자세한 내용은 개별 Rake 작업을 참조하세요. 이 경우 작업 이름은 gitlab:uploads:migrate_to_local임을 유의하세요.

오브젝트 스토리지에서 로컬 스토리지로 업로드를 마이그레이션하려면:

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 작업을 실행한 후 오브젝트 스토리지 구성 지침에서 설명한 변경 사항을 되돌려 오브젝트 스토리지를 비활성화할 수 있습니다.