从一个S3存储桶迁移到另一个

继续讨论:如何将我的 S3 上传存储桶从一个提供商迁移到另一个?

我试图将数据从 GCP 存储桶迁移到 AWS S3 存储桶。旧系统没有使用 S3 CDN(看来当初设置它的人并不太懂行)。

我使用 s3cmd 将旧的 GCP 存储桶同步到本地文件系统,然后再次使用它将这些资产推送到新的 S3 存储桶。现在系统已按照 使用对象存储进行上传(S3 及克隆) 中的描述,正确配置了 S3 和站点 CDN。

上述链接的主题建议使用 rake posts:remap 来更新帖子(我想我也应该重新烘焙所有帖子?或者至少是那些匹配旧存储桶的帖子?)。

当我执行 posts:remap 时,它只重映射了一个帖子。

 Upload.order(Arel.sql('RANDOM()')).limit(10).pluck(:id, :url)

显示所有这些记录都包含旧存储桶……啊,问题出在这里。我们需要的不是 rake posts:remap,而是如 Change the domain name or rename your Discourse 中描述的 discourse remap

是的,我认为是这样。

我会尽快完成这件事。@Falco,大体步骤如下:

  • 创建新的存储桶及其 CDN,重建容器以使用新的存储桶/CDN,并确保其正常工作。
  • 配置 s3cmd 以连接旧存储桶,并将数据同步到本地。
  • 配置 s3cmd 以连接新存储桶,并将数据同步上传到新存储桶。
  • 执行 discourse remap 旧存储桶域名 新存储桶域名
  • 重新烘焙帖子。

这样对吗?

如果你为旧存储桶和新存储桶使用相同的 CDN,或许可以省去重新烘焙的步骤,但要精确掌握时机似乎有点棘手(在数据进入新存储桶之前不能更改 CDN 源,但你又需要确保在同步过程中没有任何数据被上传到旧存储桶?)——也许只需说明这是可能的即可。

也许在指南中使用官方的 AWS CLI 会更好?

此处请使用 DbHelper.remap

没有必要。

使用相同的 CDN,只需在 CDN 面板中更改 CDN 源,或者使用新的 CDN 并通过 DbHelper.remap 进行重映射。无论哪种方式,都不需要 rebake。

啊,好的。我会看看。……是否有可能让 AWS CLI 与非 AWS 存储桶配合使用?

嘿,Rafael。我快搞定了。我目前的这个操作指南版本指向 aws cligsutil 来将数据从旧环境同步到本地,再从本地同步到新环境(我只是链接到这些工具,并提供一个填好桶名称占位符的命令行命令)。然后使用 DbHelper 来更新表。对于我这个中等规模的站点来说,运行速度相当快。太棒了。

我现在遇到的一个问题是在旧配置中没有设置 s3_cdn_url,因此帖子中的那些图片仍然直接链接到存储桶(而非 CDN)。重新烘焙(rebake)无法解决这个问题。新上传的图片则能正确链接到 CDN。你不能通过设置 DISCOURSE_S3_ENDPOINT: '' 来修复此问题,因为这不起作用;所以在恢复数据库后,我不得不清除 SiteSetting。这倒不算太糟糕,但我折腾了好几次重建才弄清楚这一点。

旧配置中没有定义 S3 CDN。我可以通过重新烘焙所有包含存储桶 URL/主机名的 1250 篇帖子来修复这个问题,但这会导致所有这些图片被下载并重新优化(旧服务器运行的是 2.7.0.beta5,我原以为它应该已经做过一些近期的重新优化了?)。这会让我的这台可怜的 2GB 服务器(Postgres 和 Redis 分别运行在 RDS 和 ElastiCache 上)长时间处于高负载状态(负载平均值达到 10-20)。我想我可能无论如何都需要为这个站点升级一台更大的 EC2 实例,但我还是有点惊讶,这次重新烘焙竟然会让服务器彻底瘫痪(用户体验中出现 500 错误)。

我是否应该改为在这些帖子的 cooked 字段中,手动将存储桶主机名替换为 CDN URL?

@pfaffman 谢谢你指引我到这里。
但我的问题在最后两步变得更加复杂。

当前问题:我的部分图片缺失,取而代之的是显示小图标。如果将鼠标悬停在它们上面,会显示“olds3bucket”地址。但当我点击它们时,它们确实能正确显示为全尺寸,并且此时 URL 栏中显示的是“news3bucket”的路径。

  1. 你主要建议将旧存储桶的数据同步到新存储桶,我已经成功完成了这一步。
  2. 然后在新存储桶的设置中填入 Discourse Web UI 的配置,这一点我过去一年已经在使用了。
  3. 现在你提到要将旧存储桶的 URL“重映射”到新存储桶,然后进行“重新烘焙”。问题就出在这里。当我执行此操作时(或者即使我只是“重新烘焙”,或者甚至是从帖子设置菜单中选择“重新构建 HTML”,无论是否先执行“重映射”步骤),那些原本仅显示为图标的图片会完全消失,取而代之的是一片“空白”。因此我立即进行了还原/恢复。

再次感谢。
(我有一个非常小的网站,情况也类似……)

rclone 是一款优秀的工具,可同步至多个后端。我们目前将其用于备份。

嘿,Jay,

抱歉再次打扰,请问指南有进一步的进展吗?谢谢!