Rakeタスクのマイグレーションのアップロード
異なるストレージタイプ間でアップロードをマイグレーションするためのRakeタスクがあります。
- すべてのアップロードを
gitlab:uploads:migrate:all
または - 特定のアップロードタイプのみをマイグレーションするには、
gitlab:uploads:migrate
を使用します。
オブジェクトストレージへのマイグレーション
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コンソールを使用して進捗を追跡し、すべてのアップロードが正常にマイグレーションされたことを確認することができます:
-
sudo gitlab-rails dbconsole
GitLab 14.1以前を実行しているLinuxパッケージインストールの場合。 -
sudo gitlab-rails dbconsole --database main
GitLab 14.2 以降を実行している Linux パッケージインストール用。 -
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タスクは、マイグレーションするアップロードを見つけるために3つのパラメータを使用します:
パラメータ | 種類 | 説明 |
---|---|---|
uploader_class | 文字列です。 | マイグレーション元のアップローダーのタイプ。 |
model_class | 文字列です。 | マイグレーションするモデルの型。 |
mount_point | 文字列/記号 | アップローダがマウントされているモデルのカラムの名前。 |
このタスクは、デフォルトのバッチサイズを上書きするための環境変数も受け付けます:
変数 | 種類 | 説明 |
---|---|---|
BATCH | 整数。 | バッチのサイズを指定します。デフォルトは 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, Note, :attachment]"
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, 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]"
# 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]"
ローカルストレージへのマイグレーション
何らかの理由でオブジェクトストレージを無効にする必要がある場合は、まずデータをオブジェクトストレージからローカルストレージにマイグレーションする必要があります。
オールインワンRakeタスク
GitLabは、アップロードされたすべてのファイル(例えば、アバター、ロゴ、添付ファイル、ファビコンなど)をワンステップでローカルストレージにマイグレーションするラッパーRakeタスクを提供します。ラッパータスクは個々のRakeタスクを呼び出して、これらのカテゴリに該当するファイルを一つずつマイグレーションします。
これらのRakeタスクの詳細については、個別のRakeタスクを参照してください。この場合のタスク名はgitlab:uploads:migrate_to_local
です。
アップロードをオブジェクトストレージからローカルストレージにマイグレーションするには、以下のRakeタスクを実行します:
-
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
Rakeタスクを実行した後、オブジェクトストレージを設定する手順で説明した変更を元に戻すことで、オブジェクトストレージを無効にすることができます。