コミュニティ支援の公式 Docker イメージ

Awesome! I’ve bookmarked this post, and if anybody asks how to run Discourse in Kubernetes or Swarm, I’ll be sure to point them at your images :+1:. Advantage of being not-an-employee: my word doesn’t have to carry the weight of being Official™.

They, on the other hand, benefit immensely from having One Official™️ Way of deploying Discourse. CDCK is not going to take on the load of maintaining a deployment system that they themselves don’t use and is massive overkill for most self-hosters. And if they don’t maintain it, they ain’t endorsing it. Brand protection demands it.

Thanks for creating this thread @pierreozoux!

I recently reached critical appreciation for discourse and got interested in hosting a deployment. I’m currently hosting JupyterHub, GitLab and Mattermost - everything through Helm charts and would very much like to do the same with Discourse.

Some background about Helm / Kubernetes:
A Helm chart is a set of configurable Kubernetes resources, and Kubernetes resources are for example a Deployment Kubernetes resource that makes a given docker image run at all time. Installing something can end up becoming a single line command + some configuration.

I would be happy to at least review code and make some PRs to fix various things in a Helm chart for discourse if it would be developed. I’m currently a maintainer of JupyterHub’s Helm chart and have various contributions to other charts.

I think it’s actually possible / feasible to break up Discourse into a set of kube pods, but have fun sizing the resource requirements for the web and sidekiq runners :slight_smile:

If insane levels of infrastructure failure tolerance is not a business requirement for you, just use the singleton fat container, it’s going to be order of magnitude cheaper & easier for the same level of steady state service.

こんにちは皆さん!

私は、フォーラムツールとして Discourse を使用している比較的大きなイタリアのコミュニティに所属しています。
Discourse を愛していますが、Kubernetes 上でのデプロイにおいて、ある種の「標準的な」手順にはいくつかの困難があることも観察しました。

メンテナーの痛みはよく分かります :slight_smile: 私は長年 Open Networking Foundation で働いており、最大の課題の一つは、Cord(当社の主要プラットフォームの一つ)をスクリプトベースのインストールから Dockerfile/docker-compose および Docker Hub にホストされた Docker イメージと Helm チャートへの移行でした。これを行うことにはある程度の懸念がありますが、すべてのケースに適合するソリューションが実際に存在しないとしても、最初のデプロイからその恩恵を確実に実感しました。

通常、最も重要なステップは、既存のツールが最も得意とすることを任せるという考え方に切り替えることです :slight_smile: Docker には標準的で簡単、かつすでに文書化されたインストール手順があります。スクリプトはカスタムのものであり、カスタマイズとメンテナンスが必要になることが多いです。
また、Discourse の依存関係(unicorn、postgres、redis など)として、元の Docker イメージや Helm チャートを使用できない理由も本当にありません。

まずは基礎的な部分(つまり、各コンポーネント用の Dockerfile、docker-compose、および Docker Hub の自動ビルド)に取り組むことをお勧めします。これが完了したら(適切なソフトウェアとドキュメントの変更を行って)、Helm チャートの開発は最も簡単な作業になります。

提案されたソリューションの利点と欠点について話し合うために、一緒に通話を行うことでも喜んでお手伝いします。

簡単な調査の中で、Docker 分野で非常に有名な Bitnami がいくつかのイメージをリリースしたことに気づきました(https://github.com/bitnami/bitnami-docker-discourse#how-to-use-this-image)。これは彼らが独自に行っている別々の作業なのか、それともあなた方と調整されたものなのか疑問に思いました。これは非常に良い出発点になるかもしれません。彼らとのパートナーシップがなければ、進める方法の一つとして提案します。無料で対応してくれるかは分かりませんが、可能性はあるでしょう。
参考までに、彼らのリポジトリで、行われた作業について詳しく知るために issue を開きました(https://github.com/bitnami/bitnami-docker-discourse/issues/132)。

ご意見や、私がどのようにでもお手伝いできるかどうかをお知らせください。

@Luca_Prete さん、上記の @pierreozoux さんの作業とチームの対応を確認されましたか?

Docker パッケージングの作業の大部分は、launcher に対して pups がバックグラウンドで行っていることと一致させる必要があります。これには、Postgres や Sidekiq などのカスタム設定のセットアップも含まれます。@unteem さんは、自身の必要性から、Discourse の以前のバージョン向けに pups が行ったことを追って作業を進めました。公式リリースに合わせて Docker イメージを最新に保つことは困難です。標準的な Docker アプローチで全体のプロセスを明らかにし、その道筋をたどってみるのは興味深いでしょう。もし標準的なセットアップを利用できる道筋があれば、ここにいる多くの人々が非常に喜ぶことと思います。

@hellekin ありがとうございます。

まだ試していません。そこには多くの情報があると思いますが、私は通常、特に仕事においては、単一ユーザー(コミュニティサポート型とは対照的)のジョブからは距離を置く傾向があります。単純に、後で維持管理が難しくなる可能性があるからです。

具体的なアプローチは、プラットフォームの詳細に大きく依存します。

あなたのケースで考えられる解決策としては、まず標準的なイメージ(Postgres、Redis など)が Discourse とどのように連携するか、カスタマイズなしで動作するかを理解することから始めることです。

これを重要視する理由は、Discourse をインストールする場所に関わらず、外部の標準サービス(物理ハードウェア、VM、コンテナ、k8s のチャート依存関係としてインストール可能など)に依存できるからです。
これらのサービスは通常、データベースの作成などのための起動スクリプトの使用を可能にしており、それほど難しくはないはずです。

次に、適切な Dockerfile を作成します(これにより、Docker を使用せずに Discourse をインストールしたいユーザー向けのクイックスタートガイドも自動的に提供されます)。

その後、docker-compose.yaml を作成します(これは Bitnami が GitHub で公開しているものとほぼ同じです)。

これで、標準的な依存イメージを使用した「マイクロ」サービスとして、Discourse をラップトップ上で数秒、ワンコマンド、カスタムスクリプトなしで起動できるようになるはずです。

最後に、Kubernetes 関連の作業(いくつかの YAML ファイル、おそらく Helm チャートとしてパッケージ化)を行い、公式の安定リポジトリ、あるいはプロセスの初期段階では自己ホスト型リポジトリに公開します。

@unteem さんは一人ではありません :slight_smile: 私たちは協力しています。
これを行っているのは、複数の Discourse インスタンスをホストしているからです。
最初は Docker で始め、現在は Kubernetes で運用しています。

私たちの活動は https://lab.libreho.st/ にまとめられています。これはコミュニティの取り組みです(@hellekin も参加しています)。今後数週間〜数ヶ月で、私たちの活動をさらに広報していく予定です。

これを維持するのは本当に大変です… このビルドを修正したコミットのために、私は数時間、場合によっては数日間費やしました:

とにかく、私たちは現在 Kubernetes オペレーターに取り組んでいます。まずは Nextcloud、次に RocketChat、そして次はおそらく Discourse です。

その間、私たちが使用している Docker イメージのコードは以下で確認できます:

イメージ自体はこちらにあります:

ご覧の通り、最近これに時間を割いています。そのため、タグやパイプラインも用意されています。週次ビルドを行うための自動化を追加する必要があります。

また、以下の Helm チャートもあります:
https://git.indie.host/indiehost/helm-discourse
しかし、ご覧の通り、これはあまりメンテナンスされていません。

私が言えることは、私たちの環境では動作しているということです :slight_smile: もし一緒に乗り込んで冒険したいという方がいれば、ぜひご参加ください :slight_smile: 楽しいですよ :slight_smile:

サポートはあまり提供していません。時間がないためです。しかし、PR をいただければ歓迎します。公式の Discourse の傘下でこの作業を行えたら、もっと簡単になるのにと本当に願っています。
しかし、結局のところ、Discourse チームの気持ちがわかってきます。彼らがコミュニティにサポートしているツールは一つだけで、それがうまく機能しています。技術的ではないユーザーにも良いサポートを提供しており、それは本当に素晴らしいことです。問題が起きたら、git pull && rebuild で 99% の問題が解決します :slight_smile: 別のツールをサポートすることは大きなリスクであり、サポートが不十分だったり、適切に行われなかったりすると、プロジェクトに悪影響を与える可能性があります。改めて、Discourse チームの地道な努力に感謝します :slight_smile:
私の唯一の問題は、おそらく多くの人が独自のソリューションを開発している一方で、協力できる方法は上流で協力することしかないということです。

実際、もう一つのやり方として、discourse_docker に super_base という別のイメージを作成し、runit/anacron/nginx/postgres を含まないベースイメージとし、それを基に Kubernetes 展開で再利用できるようにするのはどうでしょうか?それならうまくいくと思います :slight_smile:

どう思いますか?

Discourse は Kubernetes を使っていますか?気になります :slight_smile:

@pierreozoux 返信ありがとうございます!

皆さんが素晴らしい仕事をしてくださったと思いますし、できる範囲で貢献させていただければ嬉しいです :slight_smile:

また、Bitnami の皆さんが行った作業について、より詳しく確認する時間を持つことができました。良い知らせとしては、彼らはすでにコンテナを分離してくれています。ご覧になりましたか?どうお考えですか?

以下は、Web コンテナと Sidekiq コンテナの両方で使用されている Docker ファイルのリンクです:bitnami/discourse Dockerfile

docker-compose のリンクをここに貼り付けることはできませんが、私の以前の投稿に追加したリンクをたどれば、簡単に探すことができます。

同じリポジトリには、Kubernetes の YAML ファイルもあります:https://github.com/bitnami/bitnami-docker-discourse/blob/master/test.yaml

Docker イメージから始めて、何か問題があるとお考えですか?ソフトウェアは十分に「更新」されていますか?

不足しているように見えるのは Helm チャートです。これは、stable チャートで採用されているベストプラクティスに従って作成されるべきです。

皆さんはどうお考えですか? efforts を合わせて、皆さんのファイルを彼らの作業に統合するのは価値があるでしょうか?

これは、DEV: Bump uglifyjs · discourse/discourse_docker@c87937d · GitHub によって行われた変更と完全に同一です。イメージをフォークしている場合は、そのリポジトリからの変更を並行してアップストリーム化することを検討してください。

これが現状を維持する主な動機です。

内部で利用していないものを追加することは、それがすぐに破綻して廃止され、それに依存していた全員にさらなる負担を強いることを意味します。このプロジェクトでは、そのような事例が複数あります。

もしコミュニティがそれに取り組みたいのであれば、それは構いません。

いいえ、私たちは k8s は使っていません。

ただ、対応すべき依存関係が多数あるだけです。

人々は定期的に、何らかの形で動作しないという投稿をここで行っています。

私が行っていることは、launcherを使用してイメージをビルドし、それらをリポジトリにプッシュして、その後Kubernetesでデプロイすることです。また、ダウンタイムゼロでのアップグレードをスクリプト化しています。私が設定したクライアントにとっては過剰なほど大掛かりです。私は、300万ページビュー/月を、(主に)標準的なセットアップ(複数のサイトをtraefikでリバースプロキシするのみ)の汎用ハードウェアでホストしています。

さまざまなプラグインセットを含むイメージのセットを公開することを検討しましたが、もし何らかの問題が発生した場合、ここではサポートが受けられないという課題があります。

トピックについて変更はありましたか?Kubernetes 環境でのデプロイに簡単に使用できる公式の Discourse イメージは現在存在しますか、あるいは今後提供される予定ですか?

それは起こりません。私が使用している解決策は、新しいイメージをブートストラップし、リポジトリにプッシュしてから起動し、新しいポッドが起動した後にアップグレード後のマイグレーションを実行することです。

何かアップデートはありますか?KubernetesにDiscourseをインストールするための公式Helm Chartはまだありませんか?

いいえ、ロードマップにもありません。

コンテキストについては、Can Discourse ship frequent Docker images that do not need to be bootstrapped? を参照してください。

私はそのような提供(「公式」ではないもの)を検討してきましたが、ここで追加のサポート問題が発生しないようにし、それを維持およびサポートするために費やした時間に対して私に支払われるようにする必要があります。どちらの問題も解決する方法はほとんどわかりませんが、予算がある場合は、お気軽にご連絡ください。

We are successfully hosting discourse on helm with our own docker image since some months now.
(before we were using our own image as well, with compose)

And it is with s3/minio support.

https://forge.liiib.re/indiehost/tech/infrastructure/charts/-/tree/master/discourse

(but it definitely lack documentation, and “openess” to open accounts and contribute.
If there is demand, here or in pm, we can open :slight_smile: )

@pfaffman if you find happy people that are willing to support your time, we’d be happy to collaborate!

We are hosting discourse for some small communities, mainly in France, part of the common movement.
(Like https://forum.chatons.org/ is the biggest one we host pro bono)

数ヶ月前から、独自のDockerイメージを使用してHelmでDiscourseを正常にホストしています。
(以前もComposeを使用して独自のイメージを使用していました)

そして、それはs3/minioサポート付きです。

https://forge.liiib.re/indiehost/tech/infrastructure/charts/-/tree/master/discourse

(しかし、ドキュメントと、アカウントを開設して貢献するための「オープンさ」が明らかに不足しています。
需要があれば、ここで、またはプライベートメッセージで、開設できます :))

@pfaffman あなたの時間を提供してくれる意欲のある幸せな人々を見つけたら、喜んで協力させていただきます!

私たちは、主にフランスのコモンズ運動の一部である小規模コミュニティのためにDiscourseをホストしています。
(私たちがプロボノでホストしている最大のコミュニティであるhttps://forum.chatons.org/のようなものです)