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

我正在尝试为 S3 存储设置 Digital Ocean Spaces。

当我尝试运行备份时,会看到这个……

上传照片时也是一样……

我的设置如下……

……但我不知道如何测试它们是否真的有效。我对这些系统不太了解。这只是为了一个小型的朋友群论坛。

最初我启用了以下内容,但由于在启用这些行时无法重建,我不得不将它们注释掉在 app.yml 中。我不知道现在是否仍然需要它们……

我已从 Digital Ocean Spaces 管理区域手动上传了一个文件,将其设置为公开,并且可以通过浏览器访问它。

我还手动在 DO Spaces 中创建了“*****-backups”文件夹。

这是一个例子,说明我了解得有多少。我被困在这里,不知道为什么。我不知何故退出了某些设置,不确定如何恢复。

image
出于某种原因,通常在 /var/discourse 中的内容现在似乎在 /var/www/discourse 中。

但此时我被卡住了。我在论坛上搜索过,但没有找到任何可以解决问题的内容。我陷入了同样的循环中一天了。这与此类似,但它是实际的 AWS S3 而不是 DO Spaces (S3)…

任何帮助都将不胜感激。谢谢。

1 个赞

您缺少所链接主题中推荐的 use_s3 设置。

您应该从所链接的主题中复制粘贴这些设置,而不是尝试输入它们。您需要冒号而不是等号。

如果您在 /var/www/discourse 看到内容,说明您在容器内。您需要退出才能返回到操作系统。

1 个赞

感谢您的反馈。

这个设置在里面。我猜只是用那个其他命令看不到。我注释掉了 CDN,因为它说有相关问题,所以我想把那个隔离出来。特别是由于我不能 100% 确定 URL 是否正确,因为示例是一个自定义域名而不是默认的 Spaces 域名。也许尝试隔离出来是个坏主意。我尝试了很多方法。
这是完整的设置……

不能 100% 确定,但我很确定我是复制/粘贴的。我通常会这样做。

我在尝试重建时确实遇到了一个错误,所以我回去把这些重新注释掉了……

我将再次尝试启用它们并运行它。

啊,‘exit’

这正是我在找的。谢谢。

在这个 S3 部分我遗漏了什么?

我删除了注释使其生效……

编辑:我刚意识到最后一行有一个拼写错误。不确定我怎么会搞砸的。

我保存并尝试重建,然后我看到了这个……

那个安全警告是新出现的。我运行了它,希望解决这个问题……

chmod o-rwx containers/app.yml

我验证了 Docker 版本……

docker --version

正在研究如何更新它。我以为重建它会更新它,但也许不会。

那没有解决问题。即使将旧的代码注释掉并粘贴了新的代码……

image

我重建时仍然收到错误……

image

“在解析块映射时未找到预期的键,位于第 109 行第 3 列”

我不确定它指的是哪个键。

访问和密钥设置在配置中。我不确定如何测试以确保这些设置确实有效,但它们就在那里。

看起来我很接近了,但是……

重建后,它只是卡在“正在思考”……

image

就这样放了好几个小时。没有变化。

注释掉 CDN 后,我再次收到了“第 109 行”错误。也注释掉了底部区域并重建。我可以进入论坛,但我仍然无法上传任何附件。

重建时,它似乎在这里卡了一段时间。

image
不确定这是否有影响,因为它最终会自行通过而无需任何操作。

当 CDN 和底部区域被注释掉时,我可以让论坛工作,但我仍然存在最初的问题……

不确定我遗漏了什么。

重建后,它只是卡在“正在思考”中。起初我以为它可能正在传输所有内容或在后台工作,所以我让它……

就这样放了好几个小时。没有变化。

我检查了“空间”(Spaces),没有文件上传,所以我想它只是卡在某个地方了。

注释掉了 CDN 后,它又给了我“第 109 行”的错误。

也注释掉了底部区域并重建。我可以进入论坛,但我仍然无法上传任何附件。

重建时,它似乎在这里卡了一会儿,但最终会自行通过,所以我不太确定这是否有任何影响……

在注释掉 CDN 和底部区域的情况下,我可以使论坛工作,但我仍然存在最初的问题……

不确定我遗漏了什么。我放弃了,目前暂时将所有 S3 设置都注释掉了。

附注:有没有更新 Docker 的命令?我想我通常是通过管理区域来完成的,但它没有提示我从 24.0.2 更新。不确定这有多大的问题。我认为当前版本是 24.0.7。

我不确定管理员区域设置是否会覆盖 app.yml 设置,反之亦然,但以防万一,以下是这些设置……

我不清楚 S3 和 CDN URL 是否应该包含存储桶名称。也不确定它们是否应该是相同的链接。

希望有人能注意到一些简单的问题。如果您读到这里,再次感谢!

您在使用社交海洋 CDN 吗?

如果 30 秒内没有加载,那可能就不会加载了。但您不需要等那么久。您可以查看浏览器开发工具中的网络选项卡,看看哪些内容没有加载。

我不确定什么是社交海洋 CDN,但我只是想使用 Spaces 内置的 CDN。

抱歉,那是“Digital Ocean”。

我引用的消息说你不应该这样做,因为它不起作用。

如果我能为您提供更多帮助,我的电子邮件地址在我的个人资料中。

1 个赞

好的。这太奇怪了。

现在什么东西在工作了。我以为我已经注释掉了(禁用了)所有内容,昨天上传了一张图片以确保它再次正常工作。我今天早上检查了它的路径,它正在使用……我猜是 CDN?

https://XXXXXXX-storage.sfo3.digitaloceanspaces.com/optimized/2X/9/9b9fdb3eb27831650752b848363ea2a1a66ce137_2_375x500.jpeg

我检查了 Spaces,里面确实有一些图片……

image
看起来图片现在工作正常了。我唯一能想到的就是我在设置中取消勾选了“S3 使用 IAM 配置文件”。我猜这就是它在寻找但停止寻找的关键。不确定我最初为什么勾选它。可能是因为我真的不知道自己在做什么。:slight_smile:

image

运行备份时仍然有问题,但这可能是 Droplet 空间的问题。看起来它没有足够的空间在本地暂存后再上传。既然它现在似乎至少已连接到 Space,我将单独研究这个问题。

image

谢谢 Jay,这周晚些时候我能再折腾一下这个朋友论坛时再联系你。我现在得去付点账单了。

1 个赞

我等我的另一半准备好的时候有几分钟时间,所以我想检查一下空间。多想了一下,我猜那就是问题所在。我用……检查了一下

df -h

哦,是的,真的满了。运行了……

docker system prune -a

运行了……

./launcher cleanup

再次感谢 Jay。

果然,清理出了 20GB 以上的空间。

我手动运行了备份,成功了!!!

现在我正尝试将所有文件从本地存储迁移到 S3……

rake uploads:migrate_to_s3

祝我好运!:slight_smile:

1 个赞

今天早上开会前检查了一些事情。

Rake 似乎没有工作,或者可能仍在进行中。我暂时还不能确定。空间使用量下降了,但当我手动检查一些旧照片时,它们似乎仍然带有旧的本地 URL。我需要深入研究一下。

不确定 rake 和 reback 有什么区别。我假设一个是迁移文件,另一个是更新帖子中的路径。还有待学习。

/import (1.4GB) 和 /uploads (9.2GB) 仍然占用了大量空间。对于我们的小套餐来说,这太多了。我正试图将这些卸载到更便宜的存储空间,而这些是迄今为止最大的部分。

供任何设置相同的人参考,以下是它对端点 URL 的使用情况……

CDN
https://XXXXXX-storage.sfo3.cdn.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

ORIGIN
https://XXXXXX-storage.sfo3.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

唯一的区别是 URL 中的 .cdn。我需要更新我的设置。

来自 Copilot 的信息……
_________
要更改 Discourse 中的 CDN 链接后重新烘焙(rebake)帖子,您需要运行 rebake rake 任务,以便所有已烹饪(cooked)的帖子 HTML 都使用新的资源 URL 进行更新。

以下是过程:


1. 进入容器

Shell

cd /var/discourse

./launcher enter app

显示更多行


2. 运行 rebake 任务

Shell

rake posts:rebake

显示更多行

这将:

  • 使用当前设置(包括您的新 s3_cdn_url)重新渲染所有帖子。

  • 更新已烹饪的 HTML,使图片和上传指向 CDN。


可选:加速

如果您的网站规模很大,可以分批运行:

Shell

rake posts:rebake[1000]

显示更多行

这会一次重新烘焙 1000 个帖子。


3. 验证

检查一些带有图片或上传的帖子,以确认它们现在使用的是 CDN URL。

_________
看起来正在运行。我稍后回来查看。

image

去做甜甜圈了。

这会运行重新烘焙,但不是一次只运行 1,000 个。它只是全部运行,并忽略了 [1000] 部分。也许我的语法不太正确。

提醒自己也提醒其他人。我正在菜单中查找此 URL,因为我记反了(.cdn.sfo3. 而不是反过来——这显然破坏了 SSL)。搜索时找不到该设置。然后我找到了一个我已经打开的窗口。我更新了它并尝试保存,得到了这个……

image

我忘记了,一旦设置在 app.yml 中添加,它们就会从管理员设置菜单中消失。现在我记起来了。

重新烘焙似乎奏效了,只是 URL 有误。现在正在更新。

但我的 Space 存储中的文件仍然少于 50 个,所以文件 rake 似乎没有起作用。:thinking:

好的。我认为这是一个小小的突破。我终于弄清楚了这个问题是什么……

“在第 106 行第 3 列解析块映射时未找到预期的键”

查看了一些帖子后,我看到了这个……

我打开了我的文件,果然,有空格。

我确信我添加它们时没多想。我删除了它们。我认为它主要指的是“hooks:”之前的那一个。

它重建成功了。感谢 @RGJ

但是,它仍然不喜欢某些东西。

我仍然没有看到“Spaces”中的项目计数增加,所以它似乎还没有将 /uploads 文件上传到 ‘S3’。这让我很困惑,所以我很高兴这个问题解决了。但我又回到了加载屏幕。

此外,启用该选项后,我只会看到加载屏幕。

我把它注释掉了……

再次重建。结果一样。

注释掉 Spaces S3 设置。

再次重建。

工作正常

  • 论坛加载
  • 图片加载
    • 使用 Spaces 的新图片 - 不是 CDN
    • 使用本地存储的旧图片

不工作

  • 文件未上传到 Spaces
  • 图片加载未使用的 CDN 链接
  • 如果 DISCOURSE_S3 和 after_assets_precompile 没有被注释掉,论坛在浏览器中会一直停留在加载界面

没有其他想法了。一直在原地打转。

我得让这个问题放一放了。至少现在新的上传和备份都将发送到 Spaces,所以空间问题暂时不会再成为问题了。

看起来已经解决了!

将 S3 CDN URL 更新为… https://XXXXX.sfo3.cdn.digitaloceanspaces.com

该设置可以使路径正确,但让我有点困惑的是,存储桶名称需要包含在 S3 CDN URL 中,但不能包含在 S3 URL 中,因此它们在处理方式上似乎不一致。

然后我运行了…

rake uploads:migrate_to_s3 --trace

之前,在 Spaces CP 中显示了 200 多件物品,但后来我注意到…

4361 件物品 49.3 GiB…

…然后刷新后…

4640 件物品 49.4 GiB…

…它活了!!!

我还运行了这个…

rake posts:rebake

…但在我意识到它仍在上传之前就运行了,所以我想等它停止上传后再重新烘焙它们。

我需要让它运行一段时间。我会照做,如果还有其他清理工作再回来报告。

尽管项目数量的增加速度放缓了,但它仍在上传和增长。它在一夜之间又增加了 125 个项目,并且墓碑文件夹也第一次出现了。

为其他正在研究此问题的新手记录一下。

这才是最终奏效的方法:

这些设置必须放在 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 个赞