teward
(Thomas Ward)
2021 年1 月 21 日 00:35
1
利用 MinIO 服务器实现 S3 兼容的对象存储
MinIO 是一款原生支持云环境的 S3 兼容对象存储服务器解决方案,既易于部署在本地服务器、VPS 或云服务器上,也可作为 Amazon AWS S3 或其他系统的替代方案。只要配置得当,它即可与 Discourse 完美兼容。
本部分假设您的环境已满足以下条件:
您已拥有一个配置完整的 MinIO 服务器实例。
您已在 MinIO 配置中启用了域名支持(Domain Support)。
您已为 MinIO 正确配置了 DNS,确保存储桶子域名能正确解析到 MinIO 服务器。
MinIO 服务器上已存在名为 discourse-data 的存储桶,并已将其策略设置为“公开”(public)。
MinIO 服务器上已存在名为 discourse-backups 的存储桶,该存储桶为私有存储桶,用于存放上传内容(不可公开访问,这是新存储桶的默认策略)。
您的 S3 CDN URL 已正确配置为指向相应存储桶并缓存请求,如本文档前述内容所述。
如果您已具备上述所有要求,即可开始使用。
示例配置如下:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3
这将为您提供一个基础的 MinIO 配置,以 MinIO 服务器替代 Amazon S3。
4 个赞
Falco
(Falco)
2021 年1 月 21 日 00:40
2
很高兴得知 MinIO 现在可以很好地与子域名风格的存储桶配合使用,并再次与 Discourse 兼容。
您能否编辑 使用对象存储进行上传(S3 及克隆) 维基页面,以添加 MinIO 的使用说明?
3 个赞
teward
(Thomas Ward)
2021 年1 月 21 日 00:43
3
它已同时支持子域名和路径风格的存储桶一段时间了。然而,DNS 配置组件是最棘手 的部分——它需要特殊的通配符 DNS 规则才能正常工作,或者需要一个能主动感知所有实际存储桶的自定义 DNS 服务器。我曾在 bind9 中通过通配符区域实现过这一点,但在 Cloudflare 或其他平台中尝试时,子域名风格的配置会严重报错。
如果您认为上述内容适合放入该章节,我很乐意添加。但这将包含一个“注意事项”部分——我很希望能先得到您关于措辞等方面的修改建议或审查。(另外请注意,我没有包含 CDN URL,因为我的部署环境中并未使用 CDN(因为$$$不是我可以随意试验的资源)。
3 个赞
Falco
(Falco)
2021 年1 月 21 日 00:47
4
那些仅为了 Discourse 而运行 MinIO 的用户,也可以手动创建这两个 Discourse 存储桶对应的 DNS 条目,对吧?
本主题中提到的注意事项应该就足够了。配置 MinIO 完全不在本论坛的讨论范围内,但既然 MinIO 已经正常运行,让 Discourse 使用它确实是一个有效的用例。
2 个赞
teward
(Thomas Ward)
2021 年1 月 21 日 00:54
5
没错。但正如你所说,配置不在讨论范围内,因此我只需说明存储桶子域名路径必须能够解析(具体的 DNS 配置将留给该实例的 ${ADMINS} 处理)。
2 个赞
teward
(Thomas Ward)
2021 年1 月 21 日 01:06
6
没错,我已经相应地编辑了维基。不过,据我所知,MinIO 并不运营云服务,因此我在维基目录开头将“服务名称”留空。如果您需要,请自行调整。
2 个赞
teward
(Thomas Ward)
2021 年1 月 21 日 01:11
8
不客气!
我也做了调整,Provider 已设为自托管,但 MinIO 部分仍保留链接。这应该能解决我目前未能找到其云托管方案的问题。(如果你愿意,现在可以关闭此线程,因为它已整合到 Wiki 帖子中。)
3 个赞
teward
(Thomas Ward)
2021 年1 月 22 日 05:56
9
此外还发现(感谢 MinIO 的开源代码和出色的文档!)CORS 默认已应用于所有 MinIO HTTP 操作动词,因此无需安装 CORS 规则,它们已存在。同时更新了自托管 MinIO 部分,并对一些语法进行了微调。
感谢 @Falco 在追踪我在应用构建/重建期间发现的问题方面提供的帮助,以及关于 StackPath CDN 配置的基础指导(因为我希望进行完全功能测试,而且我本来就在其他地方使用 StackPath CDN,所以通过 CDN 堆栈验证了所有功能均正常运行!)
2 个赞
ceelian
(Christian)
2022 年11 月 4 日 14:51
10
我不知道如何设置强制路径样式。当我通过 S3 设置配置 2.6.8 版本和 minio 时,它总是将存储桶名称添加到 S3 端点的前面,而它应该将其作为路径附加到 S3 端点之后。
从 GitHub 上的配置示例来看,s3_force_path_style 选项似乎已被删除。我是否遗漏了什么?谢谢。
teward
(Thomas Ward)
2022 年11 月 4 日 15:06
11
@ceelian
Discourse 使用 S3 的 DNS 模式,而不是路径模式。它已经这样很久了,这就是为什么我在操作指南或 S3 存储操作指南页面中没有指定任何关于路径模式的内容。你也应该学会如何发新帖,而不是为了不相关的事情去挖坟。
1 个赞
ceelian
(Christian)
2022 年11 月 4 日 16:37
12
@teward 感谢您的反馈。抱歉,我习惯了 GitHub issue 的写法 我将开一个新帖讨论我们如何使用 discourse S3 的路径模式。
teward
(Thomas Ward)
2022 年11 月 4 日 16:39
13
供参考:你不能。我不认为路径模式还受支持,这就是为什么强制 Discourse 使用路径模式的选项已消失的原因。这也是为什么我在 S3 兼容对象存储操作指南中最初添加的部分(https://meta.discourse.org/t/configure-an-s3-compatible-object-storage-provider-for-uploads/148916#minio-storage-server-9 )现在在注意事项和要求下说明:
您已在 MinIO 配置中启用域名支持,用于域名驱动的存储桶 URL。这是强制性的,不是一个选项,Discourse 不支持基于路径的存储桶路径。
很久以前,当我第一次使用 Discourse 时,他们有这个选项,然后它被删除了,我不得不停止使用 MinIO 作为后端。现在,由于 MinIO 有关于如何使 DNS 模式工作的文档(即像 S3 那样的存储桶[.]服务器[.]com 路径),当您正确配置 MinIO 时,它就可以工作。(感谢工作人员/版主/系统将我的信任级别提高到可以编辑维基本身了)。
2 个赞
此主题在上次回复后 24 小时自动关闭。不再允许回复。