업로드 마이그레이션 Rake 작업
다른 스토리지 유형 간에 업로드를 마이그레이션하는 Rake 작업이 있습니다.
- 모든 업로드를 마이그레이션하려면
gitlab:uploads:migrate:all
을 사용하거나 - 특정 업로드 유형만 마이그레이션하려면
gitlab:uploads:migrate
를 사용합니다.
객체 스토리지로 마이그레이션
GitLab의 업로드를 객체 스토리지에 구성한 후, 기존 업로드를 로컬 스토리지에서 원격 스토리지로 마이그레이션하려면 이 작업을 사용합니다.
모든 처리는 백그라운드 워커에서 이루어지며 다운타임이 필요하지 않습니다.
GitLab와 함께 객체 스토리지 사용에 대해 더 읽어보세요.
All-in-one 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 콘솔을 사용할 수 있습니다:
- Linux 패키지 설치 시
sudo gitlab-rails dbconsole --database main
. - 소스 코드 컴파일 설치 시
sudo -u git -H psql -d gitlabhq_production
.
아래 store=2
(여기서 store=2
)에서 objectstg
가 모든 아티팩트의 수를 가지고 있는지 확인하십시오:
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
| 문자열 | 마이그레이션할 업로더의 유형. |
model_class
| 문자열 | 마이그레이션할 모델의 유형. |
mount_point
| 문자열/심볼 | 업로더가 장착된 모델의 컬럼 이름. |
참고: 이러한 매개변수는 주로 GitLab의 구조에 대한 내부적인 것이며, 작업 목록을 참조하는 것이 좋습니다. 이러한 개별 작업을 실행한 후에는 목록된 유형에 포함되지 않는 업로드를 마이그레이션하기 위해 all-in-one Rake 작업을 실행하는 것이 좋습니다.
이 작업은 또한 기본 배치 크기를 재정의하는 데 사용할 수있는 환경 변수를 허용합니다:
변수 | 유형 | 설명 |
---|---|---|
BATCH
| 정수 | 배치의 크기를 지정합니다. 기본값은 200입니다. |
다음은 각각의 업로드 유형에 대해 gitlab:uploads:migrate
를 실행하는 방법입니다.
# 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]"
로컬 스토리지로 이전하기
만약 어떠한 이유로 객체 스토리지를 비활성화해야 한다면, 먼저 데이터를 객체 스토리지에서 로컬 스토리지로 이전해야 합니다.
경고: 확장된 다운타임이 필요합니다 따라서 이전 중에 객체 스토리지에 새로운 파일이 생성되지 않습니다. 개별 레일 테스크를 호출하는 래퍼 테스크를 통해 각 카테고리에 속하는 파일을 하나씩 이전하는 방법에 대한 설정을 하여 객체 저장소에서 로컬 파일로 마이그레이션 할 수 있게 하는 설정은 이 이슈에서 추적됩니다.
All-in-one Rake task
GitLab은 일괄 단계로 모든 업로드된 파일(예: 아바타, 로고, 첨부 파일 및 파비콘)을 로컬 스토리지로 이전하는 래퍼 레일 테스크를 제공합니다. 이 래퍼 테스크는 각 카테고리에 속하는 파일을 하나씩 이전하기 위해 개별 레일 테스크를 호출합니다.
이러한 레일 테스크에 대한 자세한 내용은 개별 레일 테스크를 참조하세요.
이 경우의 작업 이름을 기억하세요: 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
레일 테스크를 실행한 후, 객체 스토리지 구성설명을 되돌려 객체 스토리지를 비활성화할 수 있습니다.