アップロード移行Rakeタスク
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
異なるストレージタイプ間でアップロードを移行するためのRakeタスクがあります。
gitlab:uploads:migrate:allですべてのアップロードを移行するか- 特定のアップロードタイプのみを移行するには、
gitlab:uploads:migrateを使用します。
オブジェクトストレージに移行する
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:allPostgreSQLコンソールを使用して、進行状況を追跡し、すべてのアップロードが正常に移行したことを確認できます:
- 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タスク
すでにオールインワン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:allRakeタスクの実行後、オブジェクトストレージを設定する手順で説明されている変更を元に戻すことで、オブジェクトストレージを無効にできます。