正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

アップロード移行Rakeタスク

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

異なるストレージタイプ間でアップロードを移行するためのRakeタスクがあります。

オブジェクトストレージに移行する

GitLabのアップロード用にオブジェクトストレージを設定した後、このタスクを使用して、既存のアップロードをローカルストレージからリモートストレージに移行します。

この処理はバックグラウンドワーカーで実行され、no downtime(ダウンタイムは不要)です。

GitLabでのオブジェクトストレージの使用について、こちらをご覧ください。

オールインワンRakeタスク

GitLabには、すべてのアップロードファイル(アバター、ロゴ、添付ファイル、faviconなど)を1つのステップでオブジェクトストレージに移行するラッパーRakeタスクが用意されています。このラッパータスクは、これらのカテゴリのそれぞれに該当するファイルを1つずつ移行するために、個別の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

以下に示すobjectstgstore=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文字列/シンボルアップローダーがマウントされているモデルの列の名前。

これらのパラメータは、主にGitLabの構造の内部的なものなので、代わりに以下のタスクリストを参照してください。これらの個別のタスクを実行した後、一覧表示されているタイプに含まれていないアップロードを移行するために、オールインワンRakeタスクを実行することをお勧めします。

このタスクは、デフォルトのバッチサイズをオーバーライドするために使用できる環境変数も受け入れます:

変数説明
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, 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]"

ローカルストレージへの移行

何らかの理由でオブジェクトストレージを無効にする必要がある場合は、まず、オブジェクトストレージからデータを移行して、ローカルストレージに戻す必要があります。

Extended downtime is required(長時間のダウンタイムが必要)なため、移行中に新しいファイルがオブジェクトストレージに作成されることはありません。設定変更のためにごくわずかなダウンタイムで、オブジェクトストレージからローカルファイルへの移行を許可する設定は、このイシューで追跡されます。

Additionally,(さらに)、Cloud Native GitLabでは、データが一時的であり、すべてのGitLab Railsアプリケーションコンテナと共有されないため、データをローカルストレージに移行するのは一般に安全ではありません。

オールインワンRakeタスク

GitLabには、すべてのアップロードファイル(アバター、ロゴ、添付ファイル、faviconなど)を1つのステップでローカルストレージに移行するラッパーRakeタスクが用意されています。このラッパータスクは、これらのカテゴリのそれぞれに該当するファイルを1つずつ移行するために、個別の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タスクの実行後、オブジェクトストレージを設定する手順で説明されている変更を元に戻すことで、オブジェクトストレージを無効にできます。