# 配置兼容S3的对象存储提供商用于上传

**URL:** <https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916>\
**Category:** Self-Hosting\
**Tags:** cdn, configuring, how-to, reference\
**Created:** [2020年四月22日 22:37 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916 "2020-04-22T22:37:37Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![V1ktor](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/v1ktor/32/232406_2.png) [@V1ktor](https://meta.discourse.org/u/V1ktor)\
**Post date:** [2022年三月25日 15:49 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/268 "2022-03-25T15:49:29Z")

</div>

我想为 Backblaze 补充一点，因为我刚设置好，这可能会为其他人节省一些时间：

> 主应用程序密钥与 S3 API 不兼容。您必须创建一个新的应用程序密钥（[来源](https://help.backblaze.com/hc/en-us/articles/360047425453-Getting-Started-with-the-S3-Compatible-API)）。

我想问 3 个问题来澄清一些事情：

1. 丢失大量 `.map` 文件正常吗？它们似乎都来自 `brotli_asset` 文件夹。服务器和对象存储中都没有它们。
2. 我看到有报告称 `DISCOURSE_S3_BUCKET` 已弃用，应该使用 `DISCOURSE_S3_UPLOADS_BUCKET`。哪个是正确的？
3. 是否有必要添加 `DISCOURSE_ENABLE_S3_UPLOADS: true`？我在其他主题中看到过提到这一点。

谢谢。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2022年三月25日 16:38 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/269 "2022-03-25T16:38:43Z")

</div>

> [@V1ktor](#):
>
> 丢失很多 `.map` 文件是正常的吗？它们似乎都来自 `brotli_asset` 文件夹。服务器和对象存储上都没有它们。

是的，这是我们资产管道中一个已知的错误，将在正在进行的 ember-cli 迁移中得到解决。

> [@V1ktor](#):
>
> 我看到有报告说 `DISCOURSE_S3_BUCKET` 已被弃用，应该使用 `DISCOURSE_S3_UPLOADS_BUCKET`。哪个是正确的？

警告是正确的，我将在 OP 中更新 wiki 指南。

> [@V1ktor](#):
>
> 有必要添加 `DISCOURSE_ENABLE_S3_UPLOADS: true` 吗？我在其他主题中看到过提及。

目前不是强制性的，因为我很确定它会被 `USE_S3` ENV 覆盖，但我需要深入研究代码库才能给出明确的答案。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年三月25日 16:41 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/270 "2022-03-25T16:41:38Z")

</div>

> [@Falco](#):
>
> 目前不是强制性的，

我正在处理一个多站点实例，我尝试从另一个实例恢复数据库，当我只恢复数据库时，主页渲染了 JSON，说它是必需的。但这很可能是一个边缘情况。我一直对 `DISCOURSE_S3_BUCKET` 环境变量感到困惑……

---

<div class="post-metadata">

**Author:** ![cookieman768](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/cookieman768/32/118511_2.png) [@cookieman768](https://meta.discourse.org/u/cookieman768)\
**Post date:** [2022年四月7日 19:20 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/271 "2022-04-07T19:20:59Z")

</div>

> [@cookieman768](#):
>
> 大家好，我是 S3 的新手，所以不太确定该如何表述，但我会尽力而为。我刚开始使用 S3 进行上传和备份，并且我一直在使用 [Discourse Connect](https://meta.discourse.org/t/13045) 来允许登录我网站的其他部分，但现在个人资料图片无法正常显示。我认为这与 CORS 策略有关，但我不知道在哪里可以配置它。我理想情况下希望将其列入白名单，用于 `forum.domain.tld` 和 `domain.tld`——或者所有子域名的通配符也可以。这是我应该在 Discourse 中设置的，还是在哪里设置？我使用的是 Vultr 对象存储，如果这有影响的话。

如果有人有见解，我仍然对此感到好奇，另外我还有一个问题。

如果我想更改我的 Discourse 安装的域名，它将如何影响对象存储访问策略？我需要更改规则，还是 Discourse 会为我处理？

---

<div class="post-metadata">

**Author:** ![TheDarkWizard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thedarkwizard/32/177913_2.png) [@TheDarkWizard](https://meta.discourse.org/u/TheDarkWizard)\
**Post date:** [2022年五月5日 19:44 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/272 "2022-05-05T19:44:07Z")

</div>

@Falco

你看到这个了吗？[Announcing Cloudflare R2 Storage: Rapid and Reliable Object Storage, minus the egress fees](https://blog.cloudflare.com/introducing-r2-object-storage/)

我已经注册了一个测试，期待进行测试。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年五月5日 19:46 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/273 "2022-05-05T19:46:54Z")

</div>

我认识的人里没人见过它。

我很久以前就注册了那个测试，在十月份。它似乎并不是一个真正的产品。

---

<div class="post-metadata">

**Author:** ![TheDarkWizard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thedarkwizard/32/177913_2.png) [@TheDarkWizard](https://meta.discourse.org/u/TheDarkWizard)\
**Post date:** [2022年五月5日 19:49 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/274 "2022-05-05T19:49:02Z")

</div>

有意思。

大约两周前，我收到了一封关于注册测试的电子邮件，这是我了解它的唯一途径。我不关注 Cloudflare 的博客。希望它不会像 Railgun 那样被搁置，尽管 Argo 好用得多。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年五月5日 19:52 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/275 "2022-05-05T19:52:33Z")

</div>

> [@TheDarkWizard](#):
>
> 大约两周前我收到了一封关于注册测试的电子邮件。

也许我错过了什么通知！或者我收到了但我不记得了。（我看到的最近一封包含 r2 的邮件是去年 11 月的“感谢您对 Cloudflare R2 存储早期访问计划感兴趣。我们将与您联系有关您的请求。”……）

---

<div class="post-metadata">

**Author:** ![TheDarkWizard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thedarkwizard/32/177913_2.png) [@TheDarkWizard](https://meta.discourse.org/u/TheDarkWizard)\
**Post date:** [2022年五月5日 19:54 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/276 "2022-05-05T19:54:15Z")

</div>

没关系。我刚回到博客，也注意到了去年九月的日期。考虑到你最近给我发邮件要求我注册（我确实注册了），我以为这是一个比较新的产品公告/产品。说实话，我并不怎么关注 Cloudflare 的新闻。希望它能实现，并且确实不错，他们的范围和关于费用的宣传可能非常有吸引力。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2022年五月5日 19:55 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/277 "2022-05-05T19:55:35Z")

</div>

我一宣布就注册了，我和你一样。

 ![image](https://global.discourse-cdn.com/meta/original/4X/a/8/3/a837030ba3bbe156682ddfe1ebbfa77be5f6ce3d.png)

---

<div class="post-metadata">

**Author:** ![TheDarkWizard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thedarkwizard/32/177913_2.png) [@TheDarkWizard](https://meta.discourse.org/u/TheDarkWizard)\
**Post date:** [2022年五月5日 19:56 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/278 "2022-05-05T19:56:30Z")

</div>

我太兴奋了，我觉得我给 Meta 带来了人们几乎没听说过的东西 xD

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年五月5日 19:59 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/279 "2022-05-05T19:59:39Z")

</div>

确实存在文档：[Getting started guide · Cloudflare R2 docs](https://developers.cloudflare.com/r2/get-started/)

配置起来似乎非常麻烦。

---

<div class="post-metadata">

**Author:** ![TheDarkWizard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thedarkwizard/32/177913_2.png) [@TheDarkWizard](https://meta.discourse.org/u/TheDarkWizard)\
**Post date:** [2022年五月5日 20:03 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/280 "2022-05-05T20:03:19Z")

</div>

我想他们误解了当他们说它应该是一个简单的替换件，可以插入到亚马逊 S3 和其他兼容 S3 的服务中时，他们是什么意思。

---

<div class="post-metadata">

**Author:** ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)\
**Post date:** [2022年五月5日 20:55 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/281 "2022-05-05T20:55:19Z")

</div>

鉴于他们对隧道的处理方式，我猜一旦产品获得足够的关注，他们就会推出一个图形用户界面。让我们拭目以待，看看它如何发展。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年五月9日 16:57 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/282 "2022-05-09T16:57:35Z")

</div>

> [@Falco](#):
>
> ```plaintext
> after_assets_precompile:
> - exec:
> cd: $home
> cmd:
> - sudo -E -u discourse bundle exec rake s3:upload_assets
> 
> ```

我能否提交一个 PR 来创建一个名为 `web.upload-assets.template.yml` 的新模板，其中包含该节，以便其他人可以包含它？将其粘贴到 yml 中有点麻烦。

如果可以，我是否也可以提交一个 PR，将其注释掉包含在 `standalone.yml` 和 `web_only.yml` 中，以便可以轻松包含它？

---

<div class="post-metadata">

**Author:** ![luizjr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/luizjr/32/266739_2.png) [@luizjr](https://meta.discourse.org/u/luizjr)\
**Post date:** [2022年五月16日 12:53 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/283 "2022-05-16T12:53:40Z")

</div>

我正在配置 **Oracle 对象存储** 时遇到困难。  
我在这里没有看到任何指南。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2022年五月16日 16:42 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/284 "2022-05-16T16:42:18Z")

</div>

由于 Oracle Cloud 不是一个很受欢迎的选项，因此没有相关的指南。如果您正在尝试使用它，请尝试从 DigitalOcean 设置开始，然后在此基础上进行操作。

当您成功运行后，可以更新 OP 中的 wiki，添加相关指南。

---

<div class="post-metadata">

**Author:** ![luizjr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/luizjr/32/266739_2.png) [@luizjr](https://meta.discourse.org/u/luizjr)\
**Post date:** [2022年五月25日 16:58 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/285 "2022-05-25T16:58:04Z")

</div>

我已完成配置，但它不起作用，而且我也不明白 CDN 的逻辑。

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2022年五月25日 17:01 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/286 "2022-05-25T17:01:25Z")

</div>

脱离已测试服务的常规路线并非易事。

我强烈建议使用 AWS S3，这也是我们内部使用的服务。

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年五月25日 17:28 UTC](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916/287 "2022-05-25T17:28:34Z")

</div>

> [@luizjr](#):
>
> 我不明白CDN的逻辑

那么你可能没有正确配置。如果你包含了你的设置的详细信息（不含密钥），我们可以提供帮助，并测试CDN是否正确。另外，一个容易忽略的事情是关于将资产推送到S3的顶部说明。这也很难理解。

[上一頁](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916.md?page=2)

[下一頁](https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916.md?page=4)
