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

Utilizing MinIO server for S3 compatible object storage

MinIO is an S3-compatible object storage server solution that is cloud-native by default but easy to deploy on on-prem servers or VPSes or cloud servers for your use as an alternative to Amazon AWS S3 or other systems, and is compatible with Discourse when configured right.

This section presupposes that the following are true in your environment:

  1. You have a fully configured MinIO server instance
  2. You have Domain Support enabled in the MinIO configuration
  3. You have DNS configuration properly set up for MinIO so that bucket subdomains properly resolve to the MinIO server
  4. The bucket discourse-data exists on the MinIO server and has a “public” policy set on it
  5. The bucket discourse-backups exists on the MinIO server and is a private bucket for uploads to be put into (and not publicly reachable - the default policy for new buckets)
  6. Your S3 CDN URL is a properly configured CDN pointing to the bucket and cache requests, as stated earlier in this document.

If you have all of the above requirements available, then you should be good to go.

An example configuration would be like this:

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

This will provide you with a basic MinIO configuration with a MinIO server in place of Amazon S3.

「いいね!」 4

It’s great to know that MinIO now works fine with subdomain style buckets and is again compatible with Discourse.

Can you edit the Using Object Storage for Uploads (S3 & Clones) wiki to include MinIO instructions?

「いいね!」 3

It’s worked with both subdomain AND path style buckets for a while. However, the DNS configuration component is the most painful component - it needs special wildcard DNS rules to work, or a customized DNS server that is actively aware of all actual buckets or not. I’ve done that in bind9 with wildcard zones, but doing it in Cloudflare or others and the subdomain style bits barf hard.

IF you think the above is suitable to be in that section, I’ll be happy to. But it’ll include that ‘caveats’ section - and I’d appreciate any exits/reviews you’d like me to make first for wording, etc. (And note I didn’t include a CDN URL 'cause I don’t have a CDN in my deployment (because $$$ is not something I can experiment with).

「いいね!」 3

Users who run MinIO just for Discourse can also create the DNS entries for the 2 Discourse buckets manually too right?

The caveat in this topic should be enough. Configuring MinIO is completely out of scope for this forum, but given a working MinIO getting Discourse to use is a valid use case.

「いいね!」 2

Correct, but as you said config is out of scope, so I simply will state that the bucket subdomain paths have to resolve (and will leave DNS config to ${ADMINS} of the instance)

「いいね!」 2

Yep, and I"ve edited the wiki accordingly. However, MinIO doesn’t (to my knowledge) run a cloud service so I left the ‘Service Name’ in the wiki TOC at the beginning blank, adjust accordingly if you wish.

「いいね!」 2

Awesome! Thanks for the contribution!

「いいね!」 1

You’re welcome!

I also tweaked it, Provider is Self-hosted but the MinIO section is still linked to. That should solve the fact they don’t have a cloud provided solution that I could find at the moment. (You can close this thread now if you wish since it’s integrated into the wiki post)

「いいね!」 3

Also discovered (thank you open source code and decent documentation for MinIO!) that CORS is already by default on all MinIO HTTP action verbs - so no need to install the CORS rules, they’re already present. Also updated the self-hosted minio section as well, plus some grammar tweaks.

Thanks to @Falco for some help tracing the issue I had noticed during app build / rebuild time for this, and for the base guidance on CDN config with StackPath (because I wanted a fully functional test, and have StackPath CDN for something else anyways so using the CDN stack verified everything worked!)

「いいね!」 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時間後に自動的にクローズされました。新しい返信は許可されなくなりました。