{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

有一个 Rake 任务用于在不同存储类型之间迁移上传。

迁移到对象存储

在为上传到极狐GitLab 配置对象存储后,使用此任务将现有上传从本地存储迁移到远程存储。

所有处理都在后台工作者中完成,并且无需停机

阅读更多关于使用对象存储与极狐GitLab的信息。

一体化 Rake 任务

极狐GitLab 提供一个包装器 Rake 任务,它可以一步将所有上传的文件(例如头像、标识、附件和 favicon)迁移到对象存储。包装器任务调用单个 Rake 任务,逐一迁移每个类别下的文件。

这些单个 Rake 任务在下一节中描述。

要将所有上传从本地存储迁移到对象存储,运行:

{{< tabs >}}

{{< tab title=”Linux 软件包(Omnibus)” >}}

gitlab-rake "gitlab:uploads:migrate:all"

{{< /tab >}}

{{< tab title=”自编译(source)” >}}

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

{{< /tab >}}

{{< /tabs >}}

您可以选择使用 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 任务

如果您已经运行了一体化 Rake 任务,则无需运行这些单个任务。

Rake 任务使用三个参数来查找需要迁移的上传:

参数 类型 描述
uploader_class 字符串 迁移的上传器类型。
model_class 字符串 迁移的模型类型。
mount_point 字符串/符号 上传器挂载的模型列的名称。

{{< alert type=”note” >}}

这些参数主要是极狐GitLab 内部结构的,您可能希望参考下面的任务列表。在运行这些单个任务后,我们建议您运行一体化 Rake 任务以迁移任何未包含在列出类型中的上传。

{{< /alert >}}

该任务还接受一个环境变量,您可以用来覆盖默认批量大小:

变量 类型 描述
BATCH 整数 指定批量的大小。默认值为 200。

以下显示如何为单个上传类型运行 gitlab:uploads:migrate

{{< tabs >}}

{{< tab title=”Linux 软件包(Omnibus)” >}}

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

# 设计管理设计缩略图
gitlab-rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action, :image_v432x230]"

{{< /tab >}}

{{< tab title=”自编译(source)” >}}

对每个任务使用 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, 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]"

# 设计管理设计缩略图
sudo -u git -H bundle exec rake "gitlab:uploads:migrate[DesignManagement::DesignV432x230Uploader, DesignManagement::Action]"

{{< /tab >}}

{{< /tabs >}}

迁移到本地存储

如果您因任何原因需要禁用对象存储,您必须首先将数据从对象存储迁移回本地存储。

{{< alert type=”warning” >}}

需要延长停机时间,以便在迁移期间不会在对象存储中创建新文件。一个允许仅在配置更改的短暂停机期间从对象存储迁移到本地文件的配置设置正在此议题中跟踪。

{{< /alert >}}

一体化 Rake 任务

极狐GitLab 提供一个包装器 Rake 任务,它可以一步将所有上传的文件(例如头像、标识、附件和 favicon)迁移到本地存储。包装器任务调用单个 Rake 任务,逐一迁移每个类别下的文件。

有关这些 Rake 任务的详细信息,请参考单个 Rake 任务。请记住,此情况下的任务名称是 gitlab:uploads:migrate_to_local

要将上传从对象存储迁移到本地存储:

{{< tabs >}}

{{< tab title=”Linux 软件包(Omnibus)” >}}

gitlab-rake "gitlab:uploads:migrate_to_local:all"

{{< /tab >}}

{{< tab title=”自编译(source)” >}}

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

{{< /tab >}}

{{< /tabs >}}

运行 Rake 任务后,您可以通过撤销配置对象存储说明中描述的更改来禁用对象存储。