BackBlaze S3とBunnyCDNをセットアップ

これらすべてをどう行うかを見つけるのに永遠がかかったので、他の人にもっと簡単にできるようにこのガイドを作成しました。この方法で画像を提供することで、Web サイトの読み込みが速くなるとされています。私の Discourse 設定は、DigitalOcean のドロペット、BackBlaze B2 S3、BunnyCDN、そして無料版の Cloudflare を組み合わせています。

信頼性、価格、ベンチマークについて少し調査した後、これらのサービスを選びました。私にとって最適な選択肢に見えました。Cloudflare はセキュリティに役立ちますが、私の理解ではサイトが少し遅くなる可能性もあるため、それについても調べてみてください。Backblaze は Cloudflare と Bunny との提携により、無料のデータ転送を可能にしています。

Cloudflare は CDN と呼ばれていますが、通常の CDN のように機能するわけではなく、おそらく S3 と Discourse の設定には単独では機能しないでしょう。別の CDN プロバイダーが必要になる可能性があります。私には BunnyCDN がよく機能しています。もし誰かが Cloudflare だけで成功させたことがあれば、教えてください :stuck_out_tongue:

S3 へのアップロード設定方法:
まず、Backblaze に登録し、バケットを作成してから、Discourse の設定に詳細を入力する必要があります。

次に、BunnyCDN に登録して、このガイドに従ってください。

https://bunnycdn.com/?ref=qcp86164sq(紹介リンクです。私の請求書に 20 ドルのクレジットが適用されます)

BunnyCDN のプルゾーンを作成したら、Discourse の管理バックエンド設定にある「s3 cdn url」に挿入する正しい URL を取得する必要があります。BunnyCDN ダッシュボードへ → プルゾーン → プルゾーンの管理 → ゾーンをクリック → 「ホスト名」の横にある URL をコピーします。

URL は例:example.b-cdn.net のようになりますが、その前に https:// を付けて https://example.b-cdn.net のようにする必要があります。

Discourse の管理設定エリアで変更を保存します。

Discourse サイトのブラウザで Ctrl+F5 を 2 回押します。

Discourse テキストコンポーザーで画像をアップロードしてテストします。テスト画像の要素を検査するか、画像のソースを表示して、正常に動作したか確認します。URL は通常のドメインとは異なり、example.b-cdn.net / ファイル名 のような形式になるはずです。

これで、誰かが画像をアップロードするたびに、その画像は Backblaze バケットに保存され、DigitalOcean ドロペットの容量を占有しなくなります :stuck_out_tongue:

S3 へのアップロードのバックアップ
Discourse のバックアップを Backblaze バケットに保存したい場合は、以下の手順を行ってください。

このスレッドの上部に投稿したガイドでは、2 つの別のバケットが必要であることが説明されています。1 つ目のバケットはパブリックで、ユーザーがフォーラムに画像をアップロードするためのアップロード用バケットです。もう 1 つのバケットはプライベートで、バックアップ用バケットです。何か問題が起きた場合に備えて、Discourse の自動バックアップを作成することが重要です。そうすれば、バックアップをロードして修正できます。

BunnyCDN ダッシュボードで、2 番目のプルゾーンを作成してください。最初のプルゾーンはアップロード用でしたが、新しいプルゾーンはバックアップ用になります。

bunnycdn ダッシュボード → プルゾーン → プルゾーンの追加

以前リンクしたガイド「BunnyCDN で Backblaze B2 ファイル配信を高速化する方法」に従ってください。ただし、今回は新しいプルゾーンをアップロード用バケットではなく、バックアップ用バケットにリンクします。

BunnyCDN のプルゾーン作成ページでは、「高ボリュームティア 5$/TB」の使用をお勧めします。バックアップには、アップロード用バケットで私が使用した高価で高速な「スタンダードティア 10$/TB」は必要ないと思います。

Discourse の管理設定エリアでバックアップ設定を行います。「backup location」は S3 に設定し、「s3 endpoint」は Backblaze で設定したもの(例:s3.us-west-002.backblazeb2.com)を指すようにします。

Web サイトで CTRL+F5 を 2 回押してキャッシュをクリアします。

バックアップを開始し、完了するまで待ちます。その後、5 分待って Backblaze のバックアップフォルダを確認してください。新しいバックアップが表示されるはずです。

古い画像の移行:
この手順は必須ではありませんが、サーバーのストレージが不足している場合は特に推奨されます。新しい画像のアップロード設定は完了しましたが、古い画像もバケットに転送できます。このプロセスを機能させるには、以下の手順に従ってください。

Cloudflare CDN の設定
この手順は必須ではありません。Backblaze の提携により、Bunny へのデータ転送が無料になっているためです。ただし、追加のセキュリティやその他の機能のために、データをまず Cloudflare を経由させ、その後 Bunny が Cloudflare からデータをプルするように設定することもできます。

https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

「いいね!」 8

ビルと同じことをやってみましたし、動作することを確認しました!ただし、唯一の欠点は新しいファイルでは機能しますが、古いファイルでは機能しないことです。ビルの方法の素晴らしい点は、再ビルドすら必要なかったことです。しかし、古いファイルも S3 で動作するようにする方法を誰かが見つけてくれることを願っています。なお、バックアップも動作しません。少なくとも私にはそうでしたし、私はビルと全く同じことをやりました。

「いいね!」 5

rake タスクを使用して、古いファイルを移行できます。

「いいね!」 1

もしこのコマンドのことでしたら、すでに試してみましたが、古いアセットはアップロードされませんでした。

sudo -E -u discourse bundle exec rake s3:upload_assets

投稿も再構築しましたが、やはりダメでした。

タスクは以下の通りです:

cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_to_s3
cd /var/discourse
./launcher enter app
rails c
rake uploads:migrate_from_s3

AntiMetaman さん、これで動作しますか?
もし動作するなら、これをガイドに追加します。
また、バックアップが正しく機能するようにする方法を検討し、その内容もガイドに追加する予定です。確実に必要なこととして、2 番目のプルゾーンを作成する必要があります。

私はBackblazeでバックアップが正常に動作しています。どのような問題に直面していますか?

「いいね!」 1

私のバックアップもこの方法で正常に動作しています。設定が何か間違っているのでしょう。今すぐ、私がバックアップを設定した方法についてガイドを更新します。@AntiMetaman

申し訳ありませんが、意味がわかりません。私の設定に問題があるとおっしゃる一方で、なぜ私の設定は正常に機能しているのでしょうか?

@itsbhanusharma さん、私に話しかけています。バックアップが機能していません。設定は Bill と同じです。ただし、バックアップバケットには専用のプルゾーンを使用していないので、それが原因かもしれません。バックアップバケットの名前は環境変数に設定しているだけです。

後で Bhanu さんの提案に従って、S3 アセットの移行を試みます。

2 つのプルゾーンを作成しました。それぞれアップロード用とバックアップ用のバケットに対応するものです。管理パネルからバックアップを開始しましたが、失敗しました。Discourse が知っているのはバックアップ用バケットの名前だけです。

DISCOURSE_S3_CDN_URL: https://duelistsunite.b-cdn.net
DISCOURSE_S3_BUCKET: s3omega
DISCOURSE_S3_BACKUP_BUCKET: s3omegabackup
DISCOURSE_BACKUP_LOCATION: s3

何が不足しているのかわかりません。バックアップ用の URL が異なるため、S3_CDN_BACKUP_URL という設定はあるのでしょうか?

@itsbhanusharma また、あなたの手法を試してみましたが、migrate_from_S3 は未定義です。

もしかして migrate_to_s3 のことをおっしゃっていたのかと疑い、それも試してみましたが、これも未定義でした。

混乱させて申し訳ありません。rake uploads:migrate_to_s3 のことを意味していました。

「いいね!」 1

どうやら、URL に amazonaws.com を追加してしまうため、rake が中止されてしまうようです。実際には、それは誤りです。これが問題です。Amazon 以外の S3 を使用する場合、URL を変更する処理がハードコードされているため、rake は機能しません。

「いいね!」 1

app.yml の env セクションに設定を追加したのか、それとも管理画面 > 設定ページに設定を追加したのか、確認または否定いただけますか?

バックアップも S3 で動作するようになりました。そのため、古いアップロードと新しいアップロードの両方が S3 で動作しています。SSL と DDoS 対策には Cloudflare を、アップロードおよびバックアップのプルゾーンには BunnyCDN を、S3 ストレージには BackBlaze を使用しています。今はすべて問題ありません!

なお、環境変数は以下の通り app.yml に定義することをお勧めします:Configure an S3 compatible object storage provider for uploads

その後、再構築を行って S3 設定を管理パネルだけでなくグローバルに定義してください。こうすることで、古いファイルを S3 に移行する際に、以下の 3 つのコマンドで簡単に移行できます:

./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake

「いいね!」 3

ここで何が不足しているのかわかりません。S3_CDN_BACKUP_URL は存在しますか?バックアップの URL は異なるためです。

この疑問は解決しましたか?バックアップバケットを指すプルゾーンの URL をどこに設定すればよいか、私にも明確ではありません。

編集:CDN はアップロード用バケットにのみ必要だと理解してよいでしょうか?このトピックに関するガイドでは、バックアップ用バケット向けの 2 番目の CDN プルゾーンを作成すべきと示されています。もしそれが誤りであれば、ガイドの更新が必要かもしれません @Bill

どうやら、バックアップバケット名のみが必要です。名前からバックアップ用の S3 URL を取得できます。これは、アップロード時の URL と名前部分のみが異なるためです。そのため、別途 S3 バックアップ URL を定義する必要はありません。もちろん、これは両方のバケットが同じ S3 サービス内に存在することを前提としています。

ただし、バックアップバケットが非公開の場合、CDN はどのようにしてアクセスするのでしょうか?CDNについては初心者で、何か見落としているかもしれませんが、DiscourseはバックアップにCDNを全く使用していないと推測しています。

はい、その通りです。バックアップバケットを確認すると、バックアップがアップロードされているのがわかります。プライベート設定ですが、Discourse からアクセス可能です。URL があれば、権限を設定できます。また、あなたのサイトのみ、あるいは任意の HTTPS ソースからのみバケットにアクセスできるように設定することもできます。

バックアップがCDNを経由して行われたか、それともDiscourseインストールから直接BackBlaze B2へ行われたかを確認できますか?