pfaffman
(Jay Pfaffman)
1
继续讨论:如何将我的 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 源,但你又需要确保在同步过程中没有任何数据被上传到旧存储桶?)——也许只需说明这是可能的即可。
Falco
(Falco)
2
也许在指南中使用官方的 AWS CLI 会更好?
此处请使用 DbHelper.remap。
没有必要。
使用相同的 CDN,只需在 CDN 面板中更改 CDN 源,或者使用新的 CDN 并通过 DbHelper.remap 进行重映射。无论哪种方式,都不需要 rebake。
pfaffman
(Jay Pfaffman)
3
啊,好的。我会看看。……是否有可能让 AWS CLI 与非 AWS 存储桶配合使用?
pfaffman
(Jay Pfaffman)
4
嘿,Rafael。我快搞定了。我目前的这个操作指南版本指向 aws cli 和 gsutil 来将数据从旧环境同步到本地,再从本地同步到新环境(我只是链接到这些工具,并提供一个填好桶名称占位符的命令行命令)。然后使用 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?
Bathinda
(Bathinda Helper)
5
@pfaffman 谢谢你指引我到这里。
但我的问题在最后两步变得更加复杂。
当前问题:我的部分图片缺失,取而代之的是显示小图标。如果将鼠标悬停在它们上面,会显示“olds3bucket”地址。但当我点击它们时,它们确实能正确显示为全尺寸,并且此时 URL 栏中显示的是“news3bucket”的路径。
- 你主要建议将旧存储桶的数据同步到新存储桶,我已经成功完成了这一步。
- 然后在新存储桶的设置中填入 Discourse Web UI 的配置,这一点我过去一年已经在使用了。
- 现在你提到要将旧存储桶的 URL“重映射”到新存储桶,然后进行“重新烘焙”。问题就出在这里。当我执行此操作时(或者即使我只是“重新烘焙”,或者甚至是从帖子设置菜单中选择“重新构建 HTML”,无论是否先执行“重映射”步骤),那些原本仅显示为图标的图片会完全消失,取而代之的是一片“空白”。因此我立即进行了还原/恢复。
再次感谢。
(我有一个非常小的网站,情况也类似……)
darix
(Darix)
6
rclone 是一款优秀的工具,可同步至多个后端。我们目前将其用于备份。