同じ問題が発生しています。当社のソフトウェア内で実行される JS ファイルがあり、ブラウザで動作するものではありません。
Discourse のダウンロード問題を解決するために、すべてのアップロードを S3 バケットに移動し、s3_use_cdn_url_for_all_uploads を true に設定しました。これにより、JS ファイルの致命的な障害となっている短縮 URL コントローラーが事実上回避されました。
詳細(このプロセスを案内してくれた AI による説明):
- S3 互換ストレージの設定(例:Cloudflare R2)
Discourse はローカルディスクから .js ファイルを安全に提供できません。これらをバケットに移動します。
-
バケット: 非公開バケットを作成します(例:
my-discourse-bucket)。 -
API キー: アクセスキーとシークレットキーを生成します。
2. カスタム CDN ドメインの設定
Cloudflare(または提供元)で、カスタムドメインをバケットに接続します(例:cdn.example.com)。これにより、ファイルが直接 URL を介して静的アセットとして提供され、Discourse の「セキュリティガード」を回避できます。
3. Discourse 設定の更新
管理画面 → 設定 で、S3 の詳細を設定します。重要なのは、Discourse が URL を一時的なヘッダーで「署名」しようとして破損するのを防ぐために、以下の設定を有効にすることです。
-
s3_use_cdn_url_for_all_uploads: このチェックボックスをオンにしてください(これが最も重要なステップです)。 -
s3_cdn_url:https://cdn.example.comに設定します。 -
s3_region: R2 互換性のためにus-east-1を使用します。
4. 既存のアップロードの移行(オプション)
注:当社の環境では、不明な理由によりこれは機能しませんでした。
既存の投稿内の古いリンクを修正するには、コンテナに入り、以下を実行します。
Bash
# /var/discourse 内
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake
誰かの役に立てれば幸いです。