【挑战成功】在discourse上使用Cloudflare R2(完美实现所有s3功能,且支持从已有s3迁移)

再次尝试挑战配置discourse上使用Cloudflare R2,我的站点正在rebuild,找到的相关资料先放着这里了

挑战成功!

解决了,明天起来补充一下,有很多坑QAQ

目前确认能做到:

  • 兼容之前已上传s3的文件(优先从r2拉,r2没有就从以前的s3拉并且给r2留一份,下次从r2拉
  • 很方便就能设置cdn(相比起来s3的cdn太难设置了
  • 支持备份及恢复(和s3的备份恢复用起来一样)

参考资料

其他s3和r2相关资料

祝好运。

我们还是一直用的 S3,在存储上,我们可能还是更相信 S3。

主要还是 S3 的 SDK 比较好用。

不过最近在尝试 CloudFlare 的 Pages,感觉这个功能还比较不错。

可以在上面直接挂载文档库。

比如说: https://docs.cwikius.cn/

用的是 vitepress 这个工具,整体部署情况虽然有坑,但还算顺利。

部署好后,只需要专注内容修改就行,不代码提交了,前端问题就全部交给了Cloudflare。

不用挑战,discourse官方社区里面有一篇教程是我写的,可以参考一下

蹲个链接

g了,切到r2后网站首页加载不出来了,似乎是很多东西在云里,没从s3转过去?
@shannon 大佬求教


解决了,明天起来补充一下,有很多坑QAQ

尴尬,有的图没了

但是也不清楚哪些图没了,只能看到一个解决一个

https://forum.beginner.center/t/topic/1998

我用的是R2,但其实就是S3,和S3没有任何区别,所以我一般说S3。

是的,区别不大,就是我在迁移过程中丢图了

S3 CDN URL: Enter the public R2.dev storage bucket URL for your bucket. This will also be found in your Cloudflare R2 dashboard.

你好,请问这段话具体怎么操作

请问按照这个教程配置的,上传图片失败了

上传图片失败了,拉下日志看看。

可能是存储的问题或者其他的什么问题。

s2 令牌权限分派

127.0.0.1 - - \[26/Sep/2025:13:05:36 +0000\] "GET / HTTP/2.0" 200 22989 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:37 +0000\] "GET /u/admin/private-message-topic-tracking-state HTTP/2.0" 200 6 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:37 +0000\] "GET /chat/api/me/channels HTTP/2.0" 200 1254 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:38 +0000\] "GET /manifest.webmanifest HTTP/2.0" 200 1055 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:38 +0000\] "POST /mini-profiler-resources/results HTTP/2.0" 200 13656 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:38 +0000\] "POST /message-bus/a07c515957a74699814f3354d32dd71e/poll HTTP/2.0" 200 291 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:40 +0000\] "GET /composer_messages?composer_action=createTopic HTTP/2.0" 200 354 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:40 +0000\] "POST /mini-profiler-resources/results HTTP/2.0" 200 4061 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:40 +0000\] "POST /mini-profiler-resources/results HTTP/2.0" 200 2977 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:40 +0000\] "POST /mini-profiler-resources/results HTTP/2.0" 200 6015 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:40 +0000\] "GET /service-worker.js HTTP/2.0" 200 1342 "https://jiashu.xin/service-worker.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:41 +0000\] "POST /message-bus/a07c515957a74699814f3354d32dd71e/poll HTTP/2.0" 200 269 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:42 +0000\] "POST /message-bus/a07c515957a74699814f3354d32dd71e/poll HTTP/2.0" 200 302 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

127.0.0.1 - - \[26/Sep/2025:13:05:44 +0000\] "POST /uploads/create-multipart.json HTTP/2.0" 422 57 "https://jiashu.xin/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" "202.117.147.34"

尝试下把读写权限都给上去?

上面测试图片上传失败的时候:

先确定下 R2 上的图片有没有真实上传上去,如果有的话,那么读取链接是什么?

Discourse 的图片上传逻辑分 2 部分。

第一部分是上传上去没有问题,同时 Discourse 还会根据上传图片的路径去读取,确定 URL 上的访问没有问题。

如果上传没有问题,但访问也有问题,Discourse 会同样报上面的错误。

虽然 R2 做存储没有什么问题,但官方上还是提出了 R2 可能存在的情况。

请参考下面的兼容性列表:Configure an S3 compatible object storage provider for uploads - Self-Hosting - Discourse Meta

既然官方没有怎么测试通过,建议还是暂时不用。