Digitalocean块存储 VS amazon S3

我在安装 Discourse 插件并重新构建容器之前,命令行中收到了关于磁盘空间的警告。我不得不运行一些命令来删除 DigitalOcean Droplet 上的一些旧版 Linux 系统,但我的 SSD 使用率仍然超过 50%。

随着我的 Discourse 网站逐渐增长,我开始研究存储解决方案。目前我使用的是每月 5 美元的 DigitalOcean Droplet,并查阅了有关 DigitalOcean 块存储和 Amazon S3 的相关信息。我看到 Discourse 设置中内置了 S3 配置,因此我猜测它更容易设置。

你们网站使用的是什么存储方案?S3 与 DigitalOcean 块存储相比,哪个加载速度更快?哪个选项更便宜?S3 的免费层级难道不会使其比 DigitalOcean 块存储更便宜吗?你们是否同时存储图片和备份?或者,除了 DigitalOcean 和 Amazon,你们是否推荐其他替代方案?

你好,

有许多提供商提供兼容 S3 的存储解决方案,您可以任选其一。我使用过其中几家,可以推荐 DigitalOcean Spaces,它表现非常出色。

如果您已经在 DigitalOcean 上托管服务,我建议使用 Spaces,因为它速度快且可靠。

不过,关于其 CDN 存在一些顾虑,您可能需要考虑使用第三方 CDN。

查看以下主题以获取更多信息:

S3 显然是更成熟、经过更多测试的解决方案,但从价格角度来看,DigitalOcean 的 offerings 可能更适合您的社区。

无论您选择哪种方案,都必须在存储桶前部署 CDN,请务必记住这一点。

Cloudflare 的免费套餐能否作为存储桶前端的 CDN?我已经在域名设置中使用它来提供免费的 DDoS 防护。

我注意到 DigitalOcean 宣传其 Spaces 服务比其他知名提供商更便宜,这确实是个优势。

由于 DigitalOcean Spaces 自带的 CDN 无法与 Discourse 正确配合使用,我考虑直接选择您列表中的其他提供商。这样我就不需要同时为 DigitalOcean Spaces 和独立的 CDN 服务付费了。

我在此发布此内容,因为 Configure an S3 compatible object storage provider for uploads 已设置为一个月后删除所有回复。

DO CDN 实现中缺少 content-encoding 确实令人沮丧,但这仅在 app.yml 中设置_所有_ S3 参数时才会发生。如果这些参数是通过 Web 管理控制台在站点设置中设置的,那么 DO 仅通过 CDN 提供 S3 上传内容,而站点资源仍从源服务器提供。

这似乎是有意为之,因为如果在 app.yml 中设置了 DISCOURSE_S3_CDN_URL 环境变量,它会覆盖资源的 CDN 设置,而仅在站点设置中声明该设置时则不会?

这有点不一致,但它允许仅将 DO CDN 用于 S3 上传,而不会破坏站点:

有两种方法可以实现这一点:

  • 仅在站点设置中声明_所有_ S3 设置
rails c
SiteSetting.s3_upload_bucket="<bucket_name>/<uploads_folder>"
SiteSetting.s3_backup_bucket="<bucket_name>/<backups_folder>"
SiteSetting.enable_s3_uploads=true
SiteSetting.s3_access_key_id="<key>"
SiteSetting.s3_secret_access_key="<secret_key>"
SiteSetting.s3_endpoint="https://<sfo2>.digitaloceanspaces.com"
SiteSetting.s3_cdn_url="https://<bucket_name>.<sfo2>.cdn.digitaloceanspaces.com/<uploads_folder>"
SiteSetting.backup_location="s3"
  • app.yml 中设置除 DISCOURSE_S3_CDN_URL 之外的所有 S3 设置,并在 SiteSetting.s3_cdn_url 中声明 DO CDN
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: <sfo2>
  DISCOURSE_S3_ENDPOINT: https://<sfo2>.digitaloceanspaces.com
  DISCOURSE_S3_ACCESS_KEY_ID: <key>
  DISCOURSE_S3_SECRET_ACCESS_KEY: <secret_key>
#  DISCOURSE_S3_CDN_URL: https://<bucket_name>.<sfo2>.cdn.digitaloceanspaces.com/<uploads_folder>
  DISCOURSE_S3_BUCKET: <bucket_name>/<uploads_folder>
  DISCOURSE_S3_BACKUP_BUCKET: <bucket_name>/<backup_folder>
  DISCOURSE_BACKUP_LOCATION: s3
rails c
SiteSetting.s3_cdn_url="https://<bucket_name>.<sfo2>.cdn.digitaloceanspaces.com/<uploads_folder>"

@falco 如果您同意这一点,我可以更新原始的 wiki 主题。

我认为这不是个好主意。

  1. 所有其他提供商,包括 AWS,都需要 CDN。DigitalOcean 提供一个免费的、但有问题的 CDN,这只是一个可以忽略的小瑕疵,我们可以将其视为标准的对象存储服务。

  2. 我不确定在 yml 文件中设置 S3 CDN URL 与在站点设置中设置该选项会导致不同行为这种实现细节是否值得推广,因为这个问题随时可以修复。

我还没有测试过,但我可以确认它适用于真正的 CDN 服务,如 KeyCDN、Cloudfront、StackPath 等。