为上传配置与 S3 兼容的对象存储提供商

你好,

我有点卡住了,感到困惑,希望有人能帮帮我。
我最初安装了 Bitnami,但意识到这会给我带来很多麻烦,所以我使用标准安装重新安装了。
我能够恢复我的备份,一切都很好,尽管我从 2.8 升级到了 2.9 beta。

我再次在我的 Google Bucket 上测试了我的备份,它仍然运行得非常好。

请注意,所有 S3 配置都是通过 Web 界面完成的,而不是通过环境变量。

出于 GDPR 原因,我在欧洲创建了一个新的备份存储桶(我们称之为 discourse-backup-eu),现在我已经能够更改环境变量,我设置了 DISCOURSE_S3_ENDPOINT:https://storage.googleapis.com,重建了应用程序,在 Web 界面中更改了备份存储桶名称,重新运行了备份,我非常高兴地看到备份文件出现在我在欧洲的新备份存储桶中。

现在我想让上传文件到另一个存储桶,并避免填满我的虚拟机磁盘空间。

所以我配置了一个新的存储桶(我们称之为 discourse-uploads),将其设置为公共,并将 Storage Legacy Bucket Owner 角色授予了我在该新存储桶上的服务帐户。
然后,我按照此处的说明,向我现有的负载均衡器(我们称之为 https://www.example.com)添加了一个规则,使用启用了 Cloud CDN 的后端存储桶。规则是 /discourse-uploads/* 指向 discourse-uploads 存储桶。

我用存储桶根目录下的一个 test.jpg 测试了我的 CDN,但无法通过 https://www.example.com/discourse-uploads/test.jpg 访问它,我不得不创建了一个名为 discourse-uploads 的子文件夹,将 test.jpg 移到里面,现在我可以通过 https://www.example.com/discourse-uploads/test.jpg 看到我的测试图片。

在 Web UI 中,我更改了“s3 upload bucket”下的虚拟存储桶名称(在设置备份时我被迫将其设置为一个虚拟名称)为 discourse-uploads,将 CDN URL 填为 https://www.example.com/discourse-uploads,并勾选了“enable s3 uploads”。

从那时起,如果我尝试上传图片,我会在浏览器窗口中看到一个弹出窗口,显示“无效参数”(来自一个 422 错误,其 JSON 内容基本相同)。

我尝试重新烘焙所有帖子,但没有效果,我仍然收到错误。

所以我想,我应该尝试使用环境变量而不是 Web UI。

并使用以下配置:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

我重建了应用程序。
然后我无法再打开 discourse,因为没有一个资产被上传到存储桶,并收到 404 错误。
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

我曾认为直接上传到存储桶的子文件夹有点牵强,尽管 OP 建议它有效(至少对于备份存储桶)。

将环境变量更改为
DISCOURSE_S3_BUCKET: discourse-uploads
(考虑到之后我可以玩主机规则来避免上传到子文件夹)

并重建以查看是否有任何东西被上传,但没有任何东西被上传到存储桶,并且 discourse 由于 404 错误仍然无法打开。

所以我的问题是:

  • Web UI 和环境变量会冲突吗?
  • 资产应该何时上传到存储桶?
  • 我该如何调试这个问题?我在日志中看不到任何错误。
  • 是否可以在配置中设置存储桶的子文件夹?
  • 一旦这奏效,之前上传的图片会被传输到存储桶吗?如果我重新烘焙,之前上传的图片的 URL 会是什么样的?

谢谢!

1 个赞