こんにちは、Discourseチームおよびコミュニティの皆様、
セルフホスト型のDiscourseインスタンスを外部S3互換オブジェクトストレージを使用するように設定しようとしていますが、非常にしつこく奇妙な問題に遭遇しました。どのようなご支援でも大変感謝いたします。
私の環境:
-
Discourseバージョン: 標準Dockerインストール、最新の
tests-passed。 -
ホスト:
[YOUR VPS PROVIDER and OS](请在这里填入您的服务商和系统) -
リバースプロキシ: Caddy
目標: すべてのアップロード(ユーザーアップロードおよびサイトアセット)をローカルストレージから外部プロバイダーに移行すること。
問題の概要: S3(Cloudflare R2またはGoogle Cloud Storageのいずれか)用にapp.ymlを設定し、./launcher rebuild appを実行した後、サイトが初期ロード画面(青いスピナー)でハングします。ブラウザの開発者ツールを見ると、ほとんどのコアJavaScriptアセットが、一般的なネットワークエラー(net::ERR_...)で外部CDN URLからロードに失敗しています。
実施したデバッグ手順:
-
Cloudflare R2での試行:
- Cloudflare R2バケットを設定し、APIトークン(Object Read & Write)を作成し、Cloudflare DNS経由でカスタムドメイン(
s3.ryzelan.sbs)を接続しました。 - R2の認証情報、エンドポイント/CDN URLとしてのカスタムドメイン、および
DISCOURSE_FORCE_HTTPS: trueとDISCOURSE_S3_FORCE_PATH_STYLE: trueを設定してapp.ymlを設定しました。
- Cloudflare R2バケットを設定し、APIトークン(Object Read & Write)を作成し、Cloudflare DNS経由でカスタムドメイン(
-
重要なテスト - 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 Configuration START (Final Version) —
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 Configuration END —
私の質問: 新しいDiscourseの再構築が、2つの異なる主要なクラウドプロバイダーから、ネットワークエラーで一貫して自身の資産をロードできない原因は何でしょうか?特定のVPSネットワーク環境、Dockerネットワーク、またはCaddyに起因する既知の問題はありますか?
お時間と洞察をいただければ幸いです。
