为上传配置与 S3 兼容的对象存储提供商

Scaleway 有什么改动吗?它在我 48 小时前还能用,但现在不能用了。

1 个赞

您的账单付了吗?有什么问题?有图片能显示吗?它们都消失了还是您就是无法添加新的?

1 个赞

您能增加一些支持吗?例如,中国的腾讯云对象存储(COS)对中国用户来说更方便,而且腾讯云的COS在全球各地都有CDN节点,访问速度非常快。

你试过吗?它工作正常吗?

我在测试环境中使用了一下,但是目前只能备份到腾讯云 COS,希望 discourse 官方能够增加对腾讯云 COS 的支持,方便国内开发者。

1 个赞

我想你需要分享你做了什么以及遇到了什么错误或问题。这样别人才可能提出如何让它工作的建议。你可以看看其他的例子,看看是否能用它们来让它工作。

我认为他们不太可能在核心中进行更改来支持它。

1 个赞

Backblaze:

  • 我已在我的账户中设置了一个 B2 存储桶
  • app.ymlenv 部分添加了详细信息
  • 运行 ./launcher rebuild app

……但我在 Discourse 实例仪表板中没有看到任何确认这些设置已生效的提示。我应该在哪里查看?

1 个赞

您好,

我已成功测试并使用了 Cloudflare R2 进行上传和备份。详细帖子请参见 Cloudflare R2: Navigating Setup and Handling Configuration Errors - #40 by kamaljain

恳请您在您的终端进行测试,并将“与 Discourse 兼容”一项评审为“是”,以支持 Cloudflare R2。实际上,它比 S3 更简单且更经济,如果存储量小于 10GB 甚至免费。

2 个赞

我也在多站点上测试了一个设置,并且也认为它有效。

我看到了一些让我怀疑你是否能获得备份列表的东西。我会尝试检查我的设置。

1 个赞

我可以看到备份已列出。尚未尝试恢复。

1 个赞

嗨,兄弟,我可以和你聊聊吗?我在配置 MinIO 时遇到了一些问题。
谢谢。

iDrive 配置

只是想报告一下,使用 iDrive 的 E2 版本 s3 存储,使用以下设置可以完美运行:

yaml 文件中的 ENV 设置

确保您的存储桶在 iDrive 的设置中至少具有 PublicRead 权限。

这些是我为共享 uploadsbackups 的一个存储桶使用的设置。

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: your-region
DISCOURSE_S3_ENDPOINT: https://your-idrive-endpoint.dev
DISCOURSE_S3_ACCESS_KEY_ID: your-access-key
DISCOURSE_S3_SECRET_ACCESS_KEY: your-secret-key
DISCOURSE_S3_CDN_URL: https://your-custom-cdn-url.com/uploads
DISCOURSE_S3_BUCKET: your-bucket-name/uploads
DISCOURSE_S3_BACKUP_BUCKET: your-bucket-name/backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

默认情况下,iDrive 具有“与所有源共享此区域中的所有内容”…因此,无论源如何,它都应该开箱即用。如果您愿意,可以将其锁定到您自己的域。

我使用 Cloudflare 源证书创建一个指向 iDrive 端点的 CNAME。


同步现有附件

重建

更改这些 ENV 设置后,请重建应用程序。


上传和重新烘焙

然后进入容器并运行

rake uploads:migrate_to_s3

观察它上传,然后运行

rake posts:rebake_uncooked_posts

退出容器


添加到 yaml 文件的 hooks 部分

hooks 部分

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

这可以确保在附件上传到 iDrive 后,js/css 等内容也会上传到 iDrive,否则您会在浏览器中看到大量控制台错误,因为它们都丢失了。


重建

在资产命令执行后再次重建。


一切应该都正常了!

2 个赞

也许应该将 Hetzner 的对象存储服务加入到表格中?

2 个赞

我设法使用了 Contabo 进行文件上传。旧的(已迁移的)文件和新的上传都运行正常。在我的例子中,存储桶 URL 是 https://eu2.contabostorage.com/mybucket。诀窍是将 EU2 设置为存储桶名称,将 https://contabostorage.com/mybucket 设置为端点。唯一的问题是,在加载网站时,它还会从存储桶请求其他文件,例如插件的 js,但由于文件不可用而无法加载。好吧,我明白了,这是因为我将 CDN URL 设置为与存储桶相同。这对我来说还不算很清楚,有人能告诉我如何设置吗?据我所知,我需要创建一个指向主域(discourse 服务器)的 cname 地址,并使用 cloudflare 代理它,这是正确的吗?

1 个赞

你漏掉了这部分:

1 个赞

我确定我做到了,但也许我犯了一个错误。最后,我恢复了一个备份,所以我有点凭记忆……但随后,我想,为什么不建议将 CDN 设置为存储桶?它会引起什么问题?明天再试。\n谢谢

1 个赞

我不认为您描述的问题是由于您将 CDN URL 设置为存储桶 URL(也就是说,如果上传正常,但资源不正常)。

2 个赞

明天会更新,谢谢

1 个赞

太棒了 :partying_face:
我所做的步骤,希望能帮助到其他人:

在 hooks: (紧跟在 git clone plugins… 之后) 之后编辑了 app.yml 并添加了

  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

并在邮件设置之后添加了

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: EU
  DISCOURSE_S3_ENDPOINT: https://contabostorage.com/bucketname
  DISCOURSE_S3_ACCESS_KEY_ID: accesskey
  DISCOURSE_S3_SECRET_ACCESS_KEY: secretaccesskey
  DISCOURSE_S3_CDN_URL: https://eu2.contabostorage.com/randomlettersthatcontaboaddstothelinks:bucketname
  DISCOURSE_S3_BUCKET: eu2
  DISCOURSE_BACKUP_LOCATION: s3
  DISCOURSE_S3_INSTALL_CORS_RULE: false

然后我在 discourse 菜单中设置了相同的值并启用了 S3 上传。
使用以下命令重建了应用

cd /var/discourse
sudo ./launcher rebuild app

然后

./launcher enter app
rake uploads:migrate_to_s3

这需要一些时间,对我来说是几个小时(80k 个文件,100GB)

完成后

rake posts:rebake_uncooked_posts
4 个赞

更新:一些用户无法加载网站(资产和文件)。我们发现 contabostorage.com 域名被列入了一些钓鱼网站的黑名单。解决方案很简单:

设置一个子域名 files.mydomain.com,如此处所述 Can I Setup a Custom Domain for My Object Storage? : Contabo

在 app.yml 中更新 DISCOURSE_S3_CDN_URL:https://files.mydomain.com

然后

cd /var/discourse
sudo ./launcher rebuild app

为了完成这项工作

./launcher enter app
rake posts:rebake

现在所有资产和上传都将从 https://files.mydomain.com/pathtofile/file.ext 加载。

完成

2 个赞