Cloudflare R2:セットアップと設定エラーの対応方法

Cloudflare R2 の開発はまだ進んでいないのでしょうか?私には良さそうに見えましたが…。

それについてのメモを上に読みましたか? gzipファイルとは互換性がなく、変更する計画があるという兆候はありませんでした。おそらく、すべてで機能しますが、アップロードは機能しませんか?

試しましたか?うまくいきましたか?

「いいね!」 1

はい、読みましたが、2年前のもので、いくつか変更されている可能性があります。

今日試してみようと思い、R2を有効にしてサイトを追加しました。ディスコースのステップでこれをどのように設定するのか、よくわかりません。Cloudflareからキーやシークレットコードを取得する場所がまだ見つかっていないからです。実験中です。何かちょっとしたヒントがあれば助かります :slight_smile:

「いいね!」 3

同じです :thinking: バケットはアクティブですが、ディスコースにはまだサポートされていないかもしれませんが、それを期待しています。

「いいね!」 1

このページでは、キーの取得方法について説明します: Authentication · Cloudflare R2 docs

「いいね!」 2

何もかも試しましたが、常にこのエラーが発生します。

Aws::S3::Errors::BadRequest

何が足りないのか疑問に思っていますか?

R2パネルから画像をアップロードすると、この画像は特別なCDN URLで開かれます。問題は、画像がサイトに読み込まれないことです。CORSを作成し、すべてのメソッドを開きました。

[
  {
    "AllowedOrigins": [
      "https://SITENAME.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "HEAD",
      "DELETE",
      "PUT"
    ]
  }
]

何かアイデアはありますか?

「いいね!」 1

「kuaza, post:3, topic:305617, username:kuaza」
はい、読みましたが、2年前のことで、いくつか変更されている可能性があります。
「/quote」

それはありえますが、Cloudflareからの2年前の言葉では、変更される可能性は低いとのことでしたので、R2に本当に期待している人は自分で調べる必要があります。とはいえ、gzファイル以外はすべて機能する可能性があるように思えます。これはバックアップのみを意味すると思います。

しかし、S3バックアップがないのは、失うものが多すぎるように思えます。

「kuaza, post:6, topic:305617, username:kuaza」
Aws::S3::Errors::BadRequest
「/quote」

それは、正しいキーまたは正しいエンドポイントを持っていないことを示唆しています。

「いいね!」 2

率直に言って、現在 Discourse サイトで Cloudflare を使用しており、すべてを 1 か所にまとめるのは一般的に良いことです。したがって、R2 を使用している場合に Amazon を扱うのは少し面倒になる可能性があります。Amazon S3 をしばらくインストールしようとしましたが、何らかの理由でスタイル ファイルを読み込むことができませんでした。(わかりました、もう一度試します) しかし、Cloudflare を無視しない方が良いでしょう。特に Cloudflare サポート フォーラム Discourse を使用している場合はなおさらです :slight_smile:

「いいね!」 1

それは通常、S3にアセットをプッシュするスタンザを追加しなかった場合です(use_s3変数を設定した場合、S3ライクなサービスを機能させるためにも必要になります)。

「いいね!」 2

他に何か試して、うまくいきましたか?どうしましたか?Configure an S3 compatible object storage provider for uploads の他の人たちのようにまとめていただけますか?

バックアップでも機能しますか?

あらゆることを試しました。設定を変更して実験的に試しました。しかし、毎回このエラーが発生し、確認しても画像がロードされていないようです。

エラーコードを見ても何もわかりませんでした。これを機能させることができれば、すべてを1つのパネル(Cloudflare)にまとめることができ、エキサイティングで効果的でしょう。

バックアップのために試したのですが、すみません。失敗したので、再びAmazonに頼りました。この件に関して私より成功した方がいれば、非常に嬉しいです :slight_smile:

R2パネルから画像をアップロードし、アクセスすることはできます。しかし、ディスコース経由で画像をアップロードすると、上記のエラーが発生します。

では、ドキュメントに記載されているように機能しないのかもしれません。

「いいね!」 1

あるいは、私がお詫びしなければならないかもしれません。機能させることができたようですが、機能させるための手順を説明する時間がありません。

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
  DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
  DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
  DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
  DISCOURSE_CDN_URL: '=CDN_URL='
  DISCOURSE_S3_BUCKET: '=BUCKET='
  DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

アップロードを S3 にプッシュする rake タスクを実行するスタンザを忘れないでください。

これを試してみて、機能するかどうか確認してください。簡単なテストでは、アップロード、アセット、バックアップで機能することが示されました。したがって、gzip ファイルの問題はもう適用されないようです。

「いいね!」 4

リージョン(自動)と最後のURLを修正した後、動作しました。しかし、問題があります。再作成すると、スタイルファイルが読み込まれず、当然サイトが開きません。しかし、アップロード専用で開くと、サイトから画像をアップロードでき、CDN URL経由でアクセスできます。唯一の問題は、スタイルファイルをCDNから提供したいということです。どうすればこれを実現できますか?これが唯一の問題だと思います。

アセットをS3にプッシュするには、次の手順に従う必要があります。

CDNには何を使用しましたか? Cloudflareを使用した場合、どのように構成しましたか?

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

これを追加しました。再コンパイルすると、サイト上のすべてのリンクがCDNのURLに変更されます。しかし、これらのスタイルファイルはCloudflareにアップロードされていません。そのため、app.ymlファイルにアップロード領域の設定を追加してコンパイルしました。管理画面からS3を有効にすると、新しくアップロードされた画像はCloudflare R2にアップロードされ、アクセスが提供されます。

唯一の問題は、app.ymlファイルをコンパイルする前にS3設定を追加すると、新しく作成されたスタイルファイルがロードされていないように見えることです。しかし、URLとCDNのURLはサイト上で変更されています。

CORS:

[
  {
    "AllowedOrigins": [
      "https://domain.com"
    ],
    "AllowedMethods": [
      "GET",
      "POST",
      "PUT",
      "HEAD",
      "DELETE"
    ]
  }
]

この問題はArgoに関連している可能性がありますか?しかし、画像は現在問題なくロードされています。

デバッグするには、コンテナに入り、そこでrakeタスクを実行して何が起こるかを確認できます。

昨日約4時間かかったので、このプロジェクトでの無料サポートはもうすぐ終了すると思います。

CORSについてはわかりません。問題ではないことを確認するために、すべてをどこからでも許可します。テストサイトではCORSに関して何もしていませんでした。

k8sで実行していますか?

「いいね!」 1

お時間を取らせて申し訳ありません。経済的に支援できればよかったのですが。お時間を尊重します。

k8sが何なのか分かりません。自分のサーバーで作業しています。argoを有効にし、R2も有効にしました。すべて非常にうまく機能していますが、新しいコンパイル後にのみ、スタイルファイル(js、cssなど)がR2にロードされません。後で必要なテストを再実行し、ここに追加します。成功したら、問題を見つける方法や機能させる方法を詳しく説明します。

「いいね!」 1

Argoとは何ですか?

標準的なインストールであれば、コンテナ内でrakeコマンドを実行できます。

./launcher enter app
rake ...

USE_S3の部分を含めているか確認しましたか?(CDNでアセットが期待されるのはそのためだと思いますので、そうだと思います。)

Argo: Overview · Cloudflare Argo Smart Routing docs

コンパイル前にUSE_S3設定を追加しました。以下に例を示します。

  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION: 'auto'
  DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
  DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
  DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_CDN_URL: 'https://cdn.domain.com'
  DISCOURSE_S3_BUCKET: 'cloudflaredomain'
  DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
  DISCOURSE_BACKUP_LOCATION: 's3'

再コンパイル後、CDN URLなど、すべてのURLが期待どおりに変更されました。唯一の問題は、これらのアセットがR2にロードされないことです。すでにこの設定を追加していました。

  after_code:
     - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

after_assets_precompile:
    - exec:
        cd: $home
        cmd:
          - sudo -E -u discourse bundle exec rake s3:upload_assets
          - sudo -E -u discourse bundle exec rake s3:expire_missing_assets

app.ymlの冒頭は以下の通りです。

templates:
  #- "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Uncomment the next line to enable the IPv6 listener
  #- "templates/web.ipv6.template.yml"
  #- "templates/web.ratelimited.template.yml"
  ## Uncomment these two lines if you wish to add Lets Encrypt (https)
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/cloudflare.template.yml"

## which TCP/IP ports should this container expose?
## If you want Discourse to share a port with another webserver like Apache or nginx,
## see https://meta.discourse.org/t/17247 for details
expose:
  - "80:80"   # http
  - "443:443" # https

これからコンテナに入り、アセットをS3にアップロードしてみます。