故障排除 S3 上传:站点在重建后挂起,JS 资源在 R2 和 GCS 上均无法加载,出现 net::ERR_...

尊敬的 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 加载。

已采取的调试步骤:

  1. 尝试使用 Cloudflare R2:

    • 我配置了一个 Cloudflare R2 存储桶,创建了一个 API Token(对象读取和写入),并通过 Cloudflare DNS 连接了一个自定义域名(s3.ryzelan.sbs)。

    • 我在 app.yml 中配置了 R2 凭据、自定义域名作为端点/CDN URL,并设置了 DISCOURSE_FORCE_HTTPS: trueDISCOURSE_S3_FORCE_PATH_STYLE: true

  2. 关键测试 - 切换到 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 天后自动关闭。不再允许新回复。