Digital Ocean Spaces (S3) “无法在未设置凭证的情况下签署请求”

这才是最终奏效的方法:

这些设置必须放在 app.yml 配置文件中,这样 rake 命令才能正确运行。当它们只在 /admin/site_settings/ 区域时,rake 命令无法正确运行。我遇到了一个错误:

错误:请确保在 config/discourse.conf 或环境变量中配置了 S3

这些设置来自此处…… Configure an S3 compatible object storage provider for uploads

具体来说,我使用了非自定义的 Spaces 设置,在每行前面加了两个空格……

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://nyc3.cdn.digitaloceanspaces.com
DISCOURSE_S3_BUCKET: my-files
DISCOURSE_S3_BACKUP_BUCKET: my-files/my-backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

注意:DISCOURSE_S3_REGION 应该字面意思是“whatever”,而不是任何可以被理解为实际 S3 区域的名称(例如 us-west-1)。

还有这些设置,位于 ## Plugins go here areahooks 部分……

after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets

这是我上次遇到问题的地方。一旦设置好并重建后,当我尝试在浏览器中打开我们的论坛时,会出现这个加载屏幕。

这仅仅是因为它正在寻找尚未更新的资产。这时就需要从应用内部运行 rake 命令了……

./launcher enter app

rake s3:upload_assets

运行后,项目数量增加,并且我们的存储桶中出现了一个“assets”文件夹……

然后论坛开始正确加载。这些是我在我的 /admin/site_settings 区域中看到的唯一与 S3 相关的设置……

我运行了这个来上传所有文件,它将 URL 从旧路径更新为新的(非 CDN)路径。

rake uploads:migrate_to_s3 --trace

完成后,项目数量增加了一倍多。

我注意到的唯一一点是,旧帖子的图片路径使用的是 S3 ENDPOINT URL,而新发布的图片使用的是 S3 CDN URL。

https:/my-storage.sfo3.digitaloceanspaces.com/

https:/my-storage.sfo3.cdn.digitaloceanspaces.com/

我不太在意,因为至少所有内容都在使用 S3。

但我尝试运行了……

rake posts:rebake

image

它因内存不足而崩溃了。我尝试运行了这个……

rake posts:rebake_uncooked_posts

它几次因内存不足而重启,然后再次内存不足。我再次运行。最终它完成了所有帖子的烘焙。

一旦它一直运行到 100%,所有链接(新旧帖子)最终都使用了 S3 CDN URL 路径。超过 34062 个项目,存储空间为 65.9 GB(备份小于 9 GB)。

很高兴现在所有内容都通过 S3 运行,包括备份。说到备份,现在可能是运行一个备份的好时机!

希望这对某人有帮助。

祝你好运!

1 个赞