Cloudflare R2 还没有什么进展吗?在我看来它看起来很不错。
你有没有读过上面的相关说明?它与 gzip 文件不兼容,而且没有迹象表明有更改计划。也许它适用于除上传之外的所有内容?
你试过吗?它奏效了吗?
是的,我读过了,但那已经是两年前了,有些事情可能已经改变了。
我想今天试试,我启用了 R2 并添加了站点。我只是不确定如何在 discourse 步骤中进行配置。因为我还没有找到从 Cloudflare 获取密钥或秘密代码的地方。我正在尝试,也许一个小细节能帮到我 ![]()
同样
我的存储桶是活动的,但也许 Discourse 还没有支持,但我希望如此。
本页介绍如何获取密钥:Authentication · Cloudflare R2 docs
我尝试了一切,但总是收到此错误:
Aws::S3::Errors::BadRequest
我想知道我错过了什么?
当我在 R2 面板中上传图片时,该图片会通过特殊的 CDN URL 打开。问题是图片无法在网站上加载。我创建了 CORS 并打开了所有方法。
[
{
"AllowedOrigins": [
"https://SITENAME.com"
],
"AllowedMethods": [
"GET",
"POST",
"HEAD",
"DELETE",
"PUT"
]
}
]
有什么想法吗?
这有可能,但两年前 Cloudflare 的说法是它不太可能改变,所以真正对 R2 感到兴奋的人需要弄清楚。话虽如此,但它似乎可能适用于除 gz 文件之外的所有文件,我认为这意味着只有备份文件。
但没有 s3 备份似乎是很大的损失。
这听起来像是你的密钥不正确或端点不正确。
坦率地说,我目前在我的 Discourse 站点上使用 Cloudflare,并且通常将所有内容集中在一处会比较好。因此,当您拥有 r2 时,与 Amazon 打交道会有点累人。我曾尝试安装 Amazon S3 一段时间,但不知何故未能加载样式文件。(好吧,我会再试一次),但最好不要忽略 Cloudflare,尤其是在使用 Cloudflare 支持论坛 Discourse 时 ![]()
这通常是因为您没有添加将资产推送到 s3 的节(如果您设置了 use_s3 变量,您也需要它才能使任何类似 s3 的服务正常工作)。
那么你尝试了其他方法并成功了吗?你是怎么做的?你能像其他人一样写一篇关于 为上传配置 S3 兼容对象存储提供商 的文章吗?
它对备份有效吗?
我尽了我所能。我尝试通过更改设置来做实验。但每次我都会收到这个错误,当我查看它时,似乎图像没有被加载。
我也没能在错误代码中看到任何东西。如果我能让它工作起来,将几乎所有东西都集中在一个面板(Cloudflare)中,那将是令人兴奋和有效的。
抱歉,我尝试了备份。当我失败时,我又转向了亚马逊。如果有人在这方面比我更成功,我将非常高兴 ![]()
我从 R2 面板上传了一张图片,并且可以访问它。但是,我无法通过 discourse 上传图片,它会给出上述错误。
所以,也许它不像文档所说的那样不起作用。
或者我可能欠你一个道歉。我似乎确实让它起作用了,尽管我没有时间保证我可以写出允许你让它起作用的说明。
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
DISCOURSE_CDN_URL: '=CDN_URL='
DISCOURSE_S3_BUCKET: '=BUCKET='
DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
别忘了那个用于将上传推送到 S3 的 rake 任务的节。
试试这个,看看它是否对你有用。快速测试表明它适用于上传、资产和备份。所以,我想 gzip 文件的问题不再适用了。
更正了区域(自动)和最后一个 URL 后,它就可以工作了。但是,出现了一个问题。当我重新创建它时,样式文件未加载,网站自然无法打开。但是,当我仅为上传打开它时,我可以从网站上传图片,并且可以通过 CDN URL 访问它。唯一的问题是,我想让样式文件从 CDN 提供服务。我们该如何做到这一点?我认为这是我们唯一的问题。
您需要按照说明将资源推送到 S3:
您使用了什么 CDN?如果是 Cloudflare,您是如何配置的?
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
我添加了这些。当我重新编译时,网站上的所有链接都更改为 cdn url。但是,这些样式文件没有上传到 cloudflare。所以我只是在 app.yml 文件中添加了上传区域设置并进行了编译。当我从管理员处激活 S3 时,新上传的图片会被上传到 cloudflare R2 并提供访问。
唯一的问题是,当我在编译 app.yml 文件之前添加 s3 设置时,新创建的样式文件似乎没有被加载。但是网站上的 URL 和 cdn url 确实发生了变化。
CORS:
[
{
"AllowedOrigins": [
"https://domain.com"
],
"AllowedMethods": [
"GET",
"POST",
"PUT",
"HEAD",
"DELETE"
]
}
]
这个问题会不会和 Argo 有关?但是图片目前加载没有问题。
为了调试,您可以进入容器并尝试在那里运行 rake 任务,看看会发生什么。
我昨天在这上面花了大约 4 个小时,所以我恐怕在这个项目上的免费支持快结束了。
不知道 CORS 的事情。我会允许来自任何地方的所有内容,以确保这不是问题。我在我的测试站点上没有对 CORS 做任何事情。
您是在 k8s 下运行这个吗?
抱歉占用您的时间。如果我能在经济上提供帮助,我会的。我尊重您的时间。
我不知道 k8s 是什么。我正在处理我自己的服务器,并且我启用了 argo。R2 也已激活。现在一切都运行得非常好,只是在新编译后,它无法将样式文件(js、css 等)加载到 R2 中。我稍后将重新运行必要的测试并在此处添加。如果我成功了,我会详细解释如何找到问题或使其正常工作。
什么是 Argo?
如果这是一个标准安装,那么您可以在容器内运行 rake 命令
./launcher enter app
rake ...
您确定您包含了 USE_S3 部分吗?(我猜是的,因为我认为这使得资产可以在 CDN 上找到)
Argo:Overview · Cloudflare Argo Smart Routing docs
我在编译前添加了 USE_S3 设置,示例如下:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_S3_BUCKET: 'cloudflaredomain'
DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
重新编译后,所有 URL 都按预期更改。CDN URL。唯一的问题是,这些资产未加载到 R2。我已经添加了此设置:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
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
这是 app.yml 的开头:
templates:
#- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## Uncomment the next line to enable the IPv6 listener
#- "templates/web.ipv6.template.yml"
#- "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/cloudflare.template.yml"
## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
- "80:80" # http
- "443:443" # https
现在我将尝试进入容器并将资产上传到 S3。