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

これで動作しますか?

「いいね!」 1

完璧です。とても時間がかかりましたが、動作するだけでなく、Discourse の設定についても多くのことを学びました!

ありがとうございます!

「いいね!」 2

OK。この設定を行った際に作成したステップバイステップガイドを投稿することにしました。

How To Configure Discourse Forum S3 Backup And S3 CDN (Itechguides.com)

このガイドの手順は、DigitalOcean SpaceとStackPack CDNを使用するためのものです。

「いいね!」 3

@pfaffman この追加のバックアップ問題について、お手伝いいただけますでしょうか。

S3バックアップとクローン構成を完了した後、自動バックアップが実行されません。下のスクリーンショットは私の構成を示しています。

バックアップは手動で実行できます。問題は、スケジュールされた自動バックアップが実行されないことです。

「いいね!」 1

わかりません。Sidekiqジョブを確認して、実行されていることを確認できます。それでうまくいくはずです。

「いいね!」 1

4件の投稿が新しいトピックに分割されました:Google Cloud S3のヒント

こんにちは

投稿を修正していただきありがとうございます。しかし、誤解を招く情報を避けるために投稿を編集できません。

こんにちは。

少し行き詰まってしまい、混乱しているので、どなたか助けていただけると幸いです。
最初はBitnamiでインストールしましたが、後々問題が多く発生することに気づき、標準インストールで再インストールしました。
バックアップを復元することができ、2.8から2.9ベータに移行したにもかかわらず、すべてうまくいきました。

Google Bucket上のバックアップを再度テストしましたが、問題なく動作しました。

なお、S3の設定はすべてWebインターフェースで行われ、環境変数経由ではありませんでした。

GDPRの理由から、ヨーロッパに新しいバックアップバケット(discourse-backup-euと呼びます)を作成しました。環境変数を変更できるようになり、DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com を設定し、アプリを再構築し、Webインターフェースでバックアップバケット名を変更し、バックアップを再度実行したところ、ヨーロッパの新しいバックアップバケットにバックアップファイルが表示されるのを見て非常に満足しました。

次に、VMのディスク容量を圧迫しないように、アップロードを別のバケットに保存したいと思いました。

新しいバケット(discourse-uploadsと呼びます)を設定し、公開しました。その新しいバケットに対して、サービスアカウントにStorage Legacy Bucket Ownerロールを追加しました。
次に、既存のロードバランサー(https://www.example.comと呼びます)に、こちらの指示に従って、Cloud CDNを有効にしたバックエンドバケットを使用するようにルールを追加しました。ルールは /discourse-uploads/* で、バケット discourse-uploads を指します。

バケットのルートにtest.jpgを入れてCDNをテストしましたが、https://www.example.com/discourse-uploads/test.jpg からアクセスできませんでした。バケット内にdiscourse-uploadsというサブフォルダを作成し、test.jpgを移動したところ、https://www.example.com/discourse-uploads/test.jpg からテスト画像を見ることができるようになりました。

Web UIでは、「s3 upload bucket」(設定時に以前設定する必要があったダミーバケット名)をdiscourse-uploadsに変更し、CDN URLにhttps://www.example.com/discourse-uploads を入力し、「enable s3 uploads」にチェックを入れました。

その後、画像をアップロードしようとすると、ブラウザウィンドウに「無効な引数」というポップアップが表示されました(422エラーと、基本的に同じ内容のJSONコンテンツが表示されました)。

すべての投稿を再ベイクしてみましたが、効果はなく、エラーは発生したままでした。

そこで、Web UIではなく環境変数を使用してみようと思いました。

そして、以下の設定を使用しました。

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

アプリを再構築しました。
その後、アセットがバケットにアップロードされなかったため、Discourseを開くことができなくなりました(404エラーが発生しました)。
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

バケットのサブフォルダに直接アップロードしようとすることは、OPでは(少なくともバックアップバケットについては)うまくいくと示唆されているにもかかわらず、少し無理があると思いました。

環境変数を以下のように変更しました。
DISCOURSE_S3_BUCKET: discourse-uploads
(後でホストルールを調整して、サブフォルダにアップロードする必要をなくせるかもしれないと思いました。)

そして、何かアップロードされるか確認するために再構築しましたが、何もアップロードされず、Discourseは404エラーのため開いたままになりませんでした。

そこで、私の質問は以下の通りです。

  • Web UIと環境変数は競合しますか?
  • アセットはいつバケットにアップロードされる予定ですか?
  • これをデバッグするにはどうすればよいですか?ログにエラーが見つかりません。
  • 設定でバケットのサブフォルダを指定することは可能ですか?
  • これがうまくいったら、以前にアップロードされた画像はバケットに転送されますか?再ベイクした場合、以前にアップロードされた画像のURLはどのようになりますか?

ありがとうございます!

「いいね!」 1

この部分を含めましたか?

しばらく前にそれを実行するテンプレートを含むPRを提出しましたが、注目されたとは思えません。

また、バケットの変更は困難です。古いバケットから新しいバケットにすべての資産をコピーするだけでなく、新しいバケットを使用するようにデータベースを更新する必要があります。それに関するトピックがあると思います。

環境変数(使用すべきです)を使用すると、それらの設定はWeb UIには表示されなくなります。

「いいね!」 1

投稿が既存のトピックにマージされました: Google Cloud S3に関するヒント

はい。私の記憶が正しければ、Googleが何か(リストアクセスかもしれません?)を許可していないことについての議論が上記にありますが、「レガシー」のようなものを使用する回避策がありました。それが私の記憶していることです。それを見つけるには、上記の100件以上のメッセージをスクロールする必要があります。それが機能した場合は、OPを更新して、どのように機能させたかを記載していただけると、次に知る必要がある人が簡単に見つけられるようになります。

「いいね!」 1

再度、ご回答ありがとうございます!
Google バケットに関する警告は、ファイルのリスト表示ができなかったため、バックアップでの使用についてでした。
修正方法についてはすでに投稿しました。

OP(元の投稿)にその情報を追記することを提案されていますか? できないと思いますが。

繰り返しますが、バックアップは機能しますが、OP によると、アセットのアップロードは機能しません。これは、Storage Legacy Bucket Owner の権限がなくても機能するはずでした。

ここにリグレッションがあると思いますが、@Falco さん、どう思われますか?

「いいね!」 1

リグレッションが発生している可能性があります。Google のみが要求するカスタム

を追加したことを確認しましたか?

「いいね!」 2

ああ。ええと、私は誰かがそうしたと思ったのですが。 :person_shrugging:

それが私が提案していたことです。Wikiなので、おそらくできると思いますが、どの信頼レベルが関係しているかは100%確信がありません。

「いいね!」 1

お返事ありがとうございます。はい、含めました。

サブフォルダありとなしの両方で試したことに注意してください。
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
および
DISCOURSE_S3_BUCKET: discourse-uploads

重ねてお礼申し上げます。

「いいね!」 2

@tuanpembual は当初そうしましたが、Storage Legacy Bucket Owner ではなく Storage Legacy Object Owner を参照しました。

私は「基本ユーザー」にすぎないので、それが編集できない理由でしょう。

「いいね!」 3

質問への回答を要約します。

  • Web UIと環境変数は衝突しますか?
  • アセットはいつバケットにアップロードされるべきですか?
    これを app.ymlhook セクションに追加すると、after_assets_precompile(アプリの再構築中)にアップロードされます。
  • これをデバッグするにはどうすればよいですか?ログにエラーが表示されません。
    次を実行します:
cd /var/discourse
sudo ./launcher enter app
sudo -E -u discourse bundle exec rake s3:upload_assets --trace
  • 設定でバケットのサブフォルダを設定することは可能ですか?

Amazon S3 バケットに保存するデータを整理するためにプレフィックスを使用できます。プレフィックスは、オブジェクトキー名の先頭にある文字列です。プレフィックスは、オブジェクトキー名の最大長(1,024 バイト)の範囲内で任意の長さにすることができます。プレフィックスは、ディレクトリと同様の方法でデータを整理する方法と考えることができます。ただし、プレフィックスはディレクトリではありません。](Organizing objects using prefixes - Amazon Simple Storage Service)

  • これが機能したら、以前にアップロードされた画像はバケットに転送されますか?再ベイクすると、以前にアップロードされた画像の URL はどのようになりますか?
「いいね!」 3

こんにちは。オブジェクトストレージプロバイダーを探していて、OPで、そのうちのいくつかは「CORSをスキップして手動で設定する必要がある」と見ました。CORSについて、またはその設定方法について詳しくないので、この設定が必要なものは避けるべきですか、それとも簡単に設定できますか?

「いいね!」 1

もし私が尋ねる必要があるなら(そうするでしょう)、別のものを選びます。

「いいね!」 1

確認ですが、以下の手順を実行した後、

rake uploads:migrate_to_s3
rake posts:rebake

ローカルの uploads フォルダを完全に削除してもよろしいでしょうか?

「いいね!」 1