Discourseインスタンスで実行するMinIOストレージサーバーの基本的な使い方

S3 互換オブジェクトストレージとしての MinIO サーバーの利用

MinIO は、クラウドネイティブを前提としつつも、オンプレミスサーバー、VPS、またはクラウドサーバーへのデプロイが容易な S3 互換のオブジェクトストレージサーバーソリューションです。Amazon AWS S3 や他のシステムの代替として利用でき、適切に設定すれば Discourse と互換性があります。

このセクションでは、以下の環境条件が満たされていることを前提としています:

  1. 完全に設定された MinIO サーバーインスタンスが存在する
  2. MinIO 設定でドメインサポートが有効になっている
  3. MinIO 用の DNS 設定が正しく行われており、バケットのサブドメインが MinIO サーバーに正しく解決される
  4. MinIO サーバー上に discourse-data バケットが存在し、「public」ポリシーが設定されている
  5. MinIO サーバー上に discourse-backups バケットが存在し、アップロード用のプライベートバケットとして設定されている(公開不可。新規バケットのデフォルトポリシー)
  6. S3 CDN URL が、このドキュメントの前述の通り、バケットを指し、リクエストをキャッシュするように正しく設定された CDN である

上記の要件がすべて揃っていれば、すぐに利用可能です。

設定例は以下の通りです:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3

これにより、Amazon S3 の代わりに MinIO サーバーを使用した基本的な MinIO 設定が提供されます。

「いいね!」 4

MinIO がサブドメイン形式のバケットと正常に動作し、Discourse と再び互換性があることがわかり、大変嬉しく思います。

Using Object Storage for Uploads (S3 & Clones) のウィキを編集して、MinIO の手順を追加していただけますでしょうか。

「いいね!」 3

長期間、サブドメイン形式とパス形式の両方のバケットで動作してきました。ただし、DNS 設定コンポーネントが最も厄介です。機能させるには特別なワイルドカード DNS ルールが必要か、すべての実際のバケットを認識しているカスタム DNS サーバーが必要になります。私は bind9 でワイルドカードゾーンを使ってこれを実装しましたが、Cloudflare や他のサービスで同様のことを行うと、サブドメイン形式の部分が深刻なエラーを起こします。

上記の内容がそのセクションにふさわしいとお考えであれば、喜んで追加いたします。ただし、「注意点」セクションも含めることになりますので、表現などの面で修正やレビューをご希望の場合は、お申し付けください。(また、CDN URL は記載していません。私のデプロイ環境には CDN を導入していないためです(実験にお金をかけることができないため)。)

「いいね!」 3

Discourse のために MinIO を運用しているユーザーは、2 つの Discourse 用バケットの DNS エントリを手動で作成することも可能ですよね?

このトピックにある注意事項で十分でしょう。MinIO の設定自体はこのフォーラムの範囲外ですが、動作する MinIO が存在する前提下で Discourse がそれを利用できるようにするのは、正当なユースケースです。

「いいね!」 2

その通りです。ただ、おっしゃる通り設定は対象外となりますので、バケットのサブドメインパスが解決される必要があることのみ記載し(DNS 設定はインスタンスの ${ADMINS} に任せることにします)。

「いいね!」 2

その通りです。それに合わせてウィキも編集しました。ただし、MinIO は(私の知る限り)クラウドサービスを提供していないため、ウィキの目次(TOC)の冒頭にある「サービス名」は空白のままにしています。必要に応じて調整してください。

「いいね!」 2

素晴らしい!ご協力ありがとうございます!

「いいね!」 1

どういたしまして!

私も調整しました。プロバイダーはセルフホストですが、MinIO セクションへのリンクは残っています。これで、現時点で見つけられる限りクラウドプロバイダーのソリューションがないという問題が解決するはずです。(もしよろしければ、このスレッドはウィキ投稿に統合されたので、閉じていただいても構いません)

「いいね!」 3

また、MinIOのオープンソースコードと優れたドキュメントのおかげで、CORSがすべてのMinIO HTTPアクション動詞に対してデフォルトで有効になっていることを発見しました。つまり、CORSルールをインストールする必要はありません。すでに存在しています。また、自己ホスト型MinIOのセクションを更新し、いくつかの文法修正も行いました。

アプリのビルド/再ビルド時に私が気づいた問題の追跡にご協力いただいた@Falcoさん、そしてCDN設定に関する基本的なガイダンスを提供してくださったことにも感謝します(完全に機能するテストを行いたかったため、また、他の用途で既にStackPath CDNを使用していたため、CDNスタックを使ってすべてが正常に動作することを確認できました!)。

「いいね!」 2

フォースパススタイルをどのように設定するのか理解できません。minio を S3 設定でバージョン 2.6.8 に設定すると、常にバケット名を S3 エンドポイントに追加してしまいますが、これは S3 エンドポイントの後にパスとして追加されるべきです。

GitHub の設定サンプルから見ると、s3_force_path_style オプションが削除されたようにも見えます。何か見落としていることはありますか?よろしくお願いします。

@ceelian

Discourse は S3 用にパスモードではなく DNS モードを使用します。これはかなり前からそうであり、それが私がハウツーまたは S3 ストレージのハウツーページでパスモードについて何も指定していない理由です。また、無関係なことのために古いスレッドを復活させるのではなく、新しいスレッドを作成する方法も学ぶべきです。

「いいね!」 1

@teward フィードバックありがとうございます。古いスレッドを掘り起こしてしまい申し訳ありません。GitHubのイシューの書き方に慣れています :slight_smile: ディスコースS3をパスモードで使用する方法については、新しいスレッドを開始します。

参考情報ですが、それはできません。パスモードはもうサポートされていないと思われます。そのため、Discourse でパスモードを強制するオプションがなくなったのです。また、S3互換オブジェクトストレージのハウツーに追加したセクション にも、注意点と要件の下に次のように書かれている理由でもあります。

  1. ドメイン駆動のバケットURLのために、MinIOの設定でドメインサポートが有効になっていること。これは必須であり、オプションではありません。Discourse ではバケットパスのパスベースのサポートはありません。

ずっと昔、私が Discourse を使い始めた頃は、そのオプションがありましたが、その後削除され、MinIO をバックエンドとして使用できなくなりました。しかし、現在では MinIO のドキュメントに DNS モード(つまり、S3 と同様の bucket[.]server[.]com パス)を機能させる方法が記載されており、MinIO を適切に設定すれば機能します。(ウィキ自体を編集する信頼レベルを上げてくれたスタッフ/モデレーター/システムに感謝します)。

「いいね!」 2

明確化と問題解決のヒントをありがとうございます!

このトピックは、最後の返信から24時間後に自動的にクローズされました。新しい返信は許可されなくなりました。