アップロードのためのS3互換のオブジェクトストレージプロバイダーを設定する

これを一時的に保留しました。うまくいくように見えましたが、R2でアセットのコンテンツエンコーディングに奇妙な問題が発生しているようです。アップロード時にヘッダーが設定されていないか、何か別の問題がある可能性があります。 ```browser-detect-7af298cd000a967d2bdc01b04807eda2924a388584ea38ad84919b726283c2ed.gz.js``` のようなgzアセットで「無効または予期しないトークン」というエラーが発生します。 rake s3:upload_assets は機能しているように見えますが、ブラウザ側でファイルが正しく読み取られていません。

AWS S3ではローカルサーバーURLをアセットに使用しても問題ないのに(アップロード用の既存S3バケットには存在しません)、R2で使用する場合はアセットのみ DISCOURSE_S3_CDN_URL を使用する必要があるのはなぜなのか、よくわかりません。アセットをサーバーURLから強制的に取得できれば、すべてうまくいくかもしれません。

編集:CFでチャットしたところ、これが問題であり、本日現在、変更なしではR2をDiscourseで使用できない理由であることがわかりました。ポストフックステップでgzアセットを削除するスクリプトを作成することもできますが、今日はすでに「通常とは異なる」ことを十分に行っていると感じています。

現在、gzip化されたファイルはR2で正しく処理されません。圧縮されていないファイルをアップロードする必要があります。Cloudflareは透過的な圧縮を行っており、クライアントが処理できるものに基づいてidentity、gzip、またはBrotliを選択します。これはS3との違いです。

「いいね!」 2

素晴らしい仕事です!そして、それがCloudflareからの動作しない理由についての明確なメッセージですね。本当にありがとうございます。すぐにOPにコピーします。

「いいね!」 2

改めてありがとうございます!OPを更新しました。

「いいね!」 3

このガイドを作成していただきありがとうございます。Minio を使用してある程度の成功を収めました。

Docker Compose でローカルにセットアップしようとしている他の人のために、Docker にホスト名エイリアスを追加するように指示して、サブドメインとして機能させることができます。次のようになります。

  minio:
    image: minio/minio
    command: server --console-address :9001 /data
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./data/minio:/data
    environment:
      MINIO_DOMAIN: minio.mydomain.com
    networks:
      default:
        aliases:
          - assets.minio.mydomain.com

この場合、DISCOURSE_S3_ENDPOINT=http://minio.mydomain.com:9000DISCOURSE_S3_CDN_URL=//assets.minio.mydomain.com:9000 を設定し、ローカルの /etc/hosts/ ファイルでサブドメインを localhost にポイントするように設定します。

これはほとんど問題なく機能しますが、Discourse は ポート 80 または 443 を持たないアドレスからファイルをダウンロードできない ことがわかりました。そのため、画像のアップロードは機能しますが、サイズ変更のためにダウンロードしようとすると失敗します。

Minio セクションまたは概要で、DISCOURSE_S3_CDN_URL はポート 80 または 443 である必要があることを言及するのが良いかもしれないと思いました。

「いいね!」 4

@Falcoさん - これは、Content-Encoding: gzipヘッダーがSpaces CDNでどのように機能するかということでしょうか?Cloudflare R2に似ており、アセットの場所がアップロードCDNと同じになるため、gzipが壊れるということでしょうか?これは今日のR2で起こることです。

DISCOURSE_S3_CDN_URLから常に提供するのではなく、オリジンからアセットを提供するようなトグルを検討する価値があるかもしれませんか?設定変更の可能性があれば、喜んで調査します。

「いいね!」 3

DISCOURSE_S3_CDN_URL を省略した場合にそうなるはずですが、これは奇妙なエッジケースであり、高額な間違いにつながる可能性があるため、一般的な構成ではありません。

「いいね!」 3

はい、それは理解できます。新しいグローバル設定のブール値 S3_ORIGIN_ASSETS(または S3_BROKEN_PROXY_FUDGE :slight_smile:)をこのあたりに追加すると、テストスクリプトが圧縮されていない のように、Digital Ocean Spaces や Cloudflare R2 ストレージ、CDN が Discourse でそのまま動作するようになり、あまり労力をかけずに nice な機能追加になるのではないでしょうか?まあ、将来的な検討事項かもしれませんが。:heart_eyes_cat:

「いいね!」 4

ああ、3.0.beta のリリースノートで何か追加されたのを見ました。試してみます。それが何のためのものか誤解していなければ良いのですが。Cloudflare R2 や Digital Ocean Spaces を、gzip で奇妙なことをする CDN と一緒に使用できるようになるかもしれませんね。

「いいね!」 1

いいえ、それは関係ありません。

「いいね!」 3

設定により、ローカルサイトを発信元として指定でき、JSアセットをS3サイト(この場合はCloudflareまたはCDNが有効なDigital Ocean Spaces)に配置する必要がなくなりました。@davidのおかげで、意図したものではなかったものの、変更が実現しました。

「いいね!」 4

アセットCDNのサイトURLを入力しますか?賢い!

「いいね!」 1

皆さん、こんにちは。これはDiscourseに関連する可能性がありますか?

これは、以前「Discourseで動作していた」S3ストレージにアップロードしようとしたファイルのエラーXMLです。

<Error>
<Code>InvalidArgument</Code>
<Message>
AWS KMS マネージドキーを使用したサーバー側の暗号化を指定するリクエストには、AWS Signature Version 4 が必要です。
</Message>
<ArgumentName>Authorization</ArgumentName>
<ArgumentValue>null</ArgumentValue>
<RequestId>ID</RequestId>
<HostId>
ID
</HostId>
</Error>
「いいね!」 1

AWSをご利用ですか?それとも何か別のものですか?

そのバケットはサーバーサイド暗号化で設定されていますか?

ライブラリが更新され、動作が異なるようになった可能性があります。

「いいね!」 2

確認したところ、自動構成では機能しますが、S3管理から独自のキーを管理する場合は機能しません。

Discourse内で可能かどうかご存知ですか?

「いいね!」 1

3件の投稿が新しいトピックに分割されました:セキュアアップロードが無効になっている場合でもUpdatePostUploadsSecureStatusを実行するのはなぜですか?

これは最近修正されたようです。
2023-3-16 changelog には、gzip ファイル処理のバグ修正が記載されています。

現在、discourse.aosus.org で Discourse フォーラムを R2 で実行していますが (migrate_to_s3 はまだ実行していません)、問題ないようです。今のところ、目立った問題はありません。

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: "us-east-1" #エイリアス to auto
  #DISCOURSE_S3_INSTALL_CORS_RULE: true #サポートされているはずです
  DISCOURSE_S3_ENDPOINT: S3_API_URL
  DISCOURSE_S3_ACCESS_KEY_ID: xxx
  DISCOURSE_S3_SECRET_ACCESS_KEY: xxxx
  DISCOURSE_S3_CDN_URL: your cdn url
  DISCOURSE_S3_BUCKET: BUCKET_NAME

バックアップ用に別のホストを指定する方法はありますか? R2 を CDN 用だけにしたいのですが、可能であれば素晴らしいです。

「いいね!」 2

ありません。これは変更される可能性は低いと思われます。

「いいね!」 1

23件の投稿が新しいトピックに分割されました:オブジェクトストレージの設定に関するトラブル

ENVの設定が管理UIに反映されないのは奇妙です。上書きは発生しますか?管理UIの新しいS3設定は、環境の設定を上書きしますか?

「いいね!」 1

はい。環境変数はデータベースの値よりも優先され、UXからは非表示になります。

「いいね!」 4