S3 资源在论坛迁移后损坏

您好,

我不得不迁移一个被遗弃的 Discourse 论坛。幸运的是,我们有多位管理员,因此可以执行迁移并下载备份。我们的资源使用了 S3 存储桶,这带来了一些麻烦。在此我提出一个功能请求:

使备份能够包含 S3 资源

我发现(不确定是在重新生成帖子之前还是之后),S3 资源 URL 被重写为内部 URL。因此,我从数据库文件中提取了所有 originaloptimized 的 S3 URL,并(手动)下载了它们。将它们移动到正确位置后,所有缺失的图片都正常显示了。……如果能有一个自动功能来处理这一点就太好了。

目前,我发现了三个问题:

  1. 预览图片损坏,但放大后的图片正常
  1. 预览图片正常,但鼠标悬停无法放大图片
  • /t/microlongrange-openhd-edition/379 … 我在首帖中只能插入两个链接
  1. Gravatar 头像损坏(可能与此无关):

在新发布的帖子中未发现任何问题。

感谢这个优秀的项目,
Limitless Green

这听起来像是配置错误,而不是漏洞。在恢复之前,您是否在新主机上配置了相同的 S3 存储桶?

我已恢复备份,其中也包含配置。完成后(并强制使用 HTTPS),我完全无法从 S3 存储桶获取图片。

现在我已完全移除了 S3 配置。

这难道不是完整的配置覆盖吗?

除非 S3 配置之前是使用 app.yml 中的环境变量配置的……

有一个隐藏设置可以实现这一功能。Discourse 公司(Cdck)会为他们已知计划自行托管的客户启用该设置。

S3 配置最好按照《使用对象存储进行上传(S3 及克隆)》(Configure an S3 compatible object storage provider for uploads) 中的描述,通过环境变量进行设置。

恢复后,我在 s3 upload buckets3 cdn url 中设置了配置。
我无法访问(旧服务器的)app.yml

哦,不错!:grinning: 在哪里?
我在 backup 部分找到的唯一合适的选项是:
grafik
(该选项已被勾选)

我不确定是否表达清楚了:我暂时不需要 S3。但我必须从那里获取资源。没人知道这台服务器会运行多久。:sweat_smile:

如果您无法通过 SSH 访问服务器,则无法更改隐藏设置。

好的。像我这样的情况现在应该怎么做?
什么可能导致图片预览损坏?

如果还来得及(即论坛已有活动数据且您不希望丢失),并且您拥有 S3 凭证,那么我可能会将 S3 凭证放入 app.yml 中,然后重新运行恢复操作。之后,您应该可以设置隐藏选项,执行备份,并在没有 S3 的服务器上恢复该备份。

但我想情况并非如此。而且目前尚不清楚具体问题是什么,因为就连您自己也不完全记得当时具体做了什么。

如果确实有数据缺失(且您拥有 S3 凭证),我可能会尝试使用某种 S3 工具下载所有上传文件,然后修改数据库使其指向这些文件。但我在这方面还不够熟练,无法在此详细说明具体操作步骤。

是的,很遗憾我没有 S3 凭证 :frowning:

我可以复现这些步骤:

  1. 在 Traefik 后面使用 discourse_docker 安装了一个新的 Discourse 论坛
  2. 对旧论坛进行了备份(包括一些旧资源)
  3. 将备份恢复到新论坛
  4. 强制启用 HTTPS
  5. dump.sql(来自备份)中提取资源 URL
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/original\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e original.txt
  • egrep -o 'discuss-openhdfpv.eu-central-1.linodeobjects.com\\/optimized\\/1X\\/[0-9a-z_]{0,}\\.[0-9a-zA-Z]{0,}' ./dump.sql \u003e\u003e optimized.txt
  1. 下载资源:cat optimized.txt | parallel --gnu "wget -nc -P ./optimized/1X/ {}"(original 同理)
  2. 移除了 S3 配置
  3. 运行 rake posts:rebake

如果知道该查找什么,我可以在数据库层面操作 SQL。