尊敬的 Discourse 团队和社区:
我一直在尝试配置我的自托管 Discourse 实例以使用外部 S3 兼容对象存储,但遇到了一个非常顽固且不寻常的问题。我将非常感谢任何帮助。
我的环境:
Discourse 版本: 标准 Docker 安装,最新的
tests-passed。主机:
[您的 VPS 提供商和操作系统](请在这里填入您的服务商和系统)反向代理: Caddy
目标: 我的目标是将所有上传(用户上传和网站资源)从本地存储迁移到外部提供商。
问题摘要: 在为 S3(Cloudflare R2 或 Google Cloud Storage)配置
app.yml并运行./launcher rebuild app后,网站在初始加载屏幕(蓝色旋转图标)上卡住。浏览器的开发者工具显示,大多数核心 JavaScript 资源因通用的网络错误(net::ERR_...)而无法从外部 CDN URL 加载。已采取的调试步骤:
尝试使用 Cloudflare R2:
我配置了一个 Cloudflare R2 存储桶,创建了一个 API Token(对象读取和写入),并通过 Cloudflare DNS 连接了一个自定义域名(
s3.ryzelan.sbs)。我在
app.yml中配置了 R2 凭据、自定义域名作为端点/CDN URL,并设置了DISCOURSE_FORCE_HTTPS: true和DISCOURSE_S3_FORCE_PATH_STYLE: true。关键测试 - 切换到 Google Cloud Storage:
为了排除 Cloudflare 特定的问题,我撤销了所有更改,并使用 S3 互操作性密钥进行了 Google Cloud Storage 的全新设置。
使用 GCS 配置重建后,我遇到了与 R2 完全相同的 JavaScript 加载失败模式。
当前状态:
./launcher rebuild app过程在终端中没有显示任何错误,并已成功完成。重建后,
app容器正在正常运行(通过docker ps验证)。
./launcher logs app命令没有显示任何错误;所有内部服务(unicorn、redis、postgres)似乎都在正常运行。问题似乎是浏览器尝试从配置的外部 CDN URL 获取 JS 资源时的网络级别失败,并且无论使用哪个提供商(R2 或 GCS),都会发生这种情况。
这是我们用于 R2 的最终
app.yml配置块(GCS 的配置类似):# — Cloudflare R2 S3 配置开始(最终版本) —
DISCOURSE_FORCE_HTTPS: true
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: “us-east-1”
DISCOURSE_S3_ENDPOINT: “https://s3.ryzelan.sbs”
DISCOURSE_S3_CDN_URL: “https://s3.ryzelan.sbs”
DISCOURSE_S3_ACCESS_KEY_ID: “REDACTED”
DISCOURSE_S3_SECRET_ACCESS_KEY: “REDACTED”
DISCOURSE_S3_BUCKET: “ryzelan-discourse”
DISCOURSE_S3_FORCE_PATH_STYLE: true# — Cloudflare R2 S3 配置结束 —
我的问题: 是什么原因导致全新的 Discourse 重建在从两个不同的主要云提供商那里加载其自身资源时,持续出现网络错误?是否存在某些 VPS 网络环境、Docker 网络或 Caddy 的已知问题可能导致此问题?
感谢您的时间和提供的任何见解。
你是否包含了将这些资产上传到 S3 的代码?
如果你不这样做,任何资产都不会在 S3 上,网站也无法加载。
@Ryze_Chen 您的问题解决了吗?
此主题在最后回复 7 天后自动关闭。不再允许新回复。
