Discourseを水平にスケールするには?

こんにちは、
インストール手順がわかりません。Discourse を水平方向にスケーリングすることはできますか?
例えば、異なるサーバー上で Discourse を実行する 2 つ以上の Docker コンテナを持つような設定です。

GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub の手順には以下のように記載されています。

マルチコンテナ構成はより柔軟で堅牢ですが、セットアップが複雑になります。マルチコンテナ構成を使用すると、以下のことが可能になります:

  • Discourse の新バージョンへのアップグレード時のダウンタイムを最小限に抑えることができます。サイトが稼働している間に新しい Web プロセスをブートストラップし、構築が完了してから新しいイメージに切り替えることができます。
  • フォーラムを複数のサーバーにスケーリングできます。
  • 冗長性のためにサーバーを追加できます。
  • 必要なサービス(例:データベース)を高性能なハードウェアで実行できます。

マルチコンテナ構成をご希望の場合は、samples ディレクトリ内の data.yml および web_only.yml テンプレートをご覧ください。このプロセスを容易にするため、launcher はイメージ内で利用可能な DISCOURSE_HOST_IP という環境変数を注入します。

複数のコンテナを同じサーバー上で実行するのではなく、異なるサーバー上でコンテナを実行する方法について、さらに詳しい情報が見つかる場所をご存知でしょうか?

よろしくお願いいたします。

Discourse はブートストラップが不要な頻繁な Docker イメージを配信できますか? に関する関連する議論が多数あります。

要点は以下の通りです:

  1. PostgreSQL、Redis、ロードバランサーの外部サービスを提供し、app.yml をそれらを使用するように設定します。例えば、別々の PostgreSQL サーバーで Discourse を実行する のように設定します。

  2. どこかで ./launcher bootstrap app を実行します。これにより、ローカルマシンにコンテナイメージが作成されます。このイメージをコンテナレジストリサービスにアップロードしてください。

  3. これで、前ステップでエクスポートしたイメージを実行するように指定して、任意の数のインスタンスを起動できるようになります。

「いいね!」 4

Discourse Docker を Apache と並行して実行する のような方法で、リバースプロキシを前面に配置した 2 つの Web コンテナを作成できます。

マルチサイト機能を使用すれば、単一のコンテナで複数のサイトをサービス提供できます(同じプラグインと Discourse バージョンを使用)。こちら では、外部リバースプロキシを使用せずにその方法について説明しています。試される場合は、そちらにコメントを残して、動作したかどうか教えていただけますか。動作が確実になれば、ここに投稿する予定です。

複数のサーバーでコンテナを実行する方法も、上記のいずれかと同様です。複数のコンテナが同じ Redis と Postgres を共有し、それらの背後にロードバランサーを配置します。

Discourse 公式の標準インストール 以外のことをする場合は、その方法が無数に存在するため、サポート対象外となります。

質問が2つあります。

  • Sidekiqについて、それぞれ異なるVMで複数のweb_only.yml Dockerを実行する場合:この最初のケースでは、同じRedisサーバーを共有する異なるSidekiqインスタンスが同じジョブを(2回)実行する可能性があります(こちら参照)。Discourseはこの種の誤りに堅牢ですか?専用のVM(またはDocker)で1つのSidekiqを実行する方が信頼性が高いですか?その場合、web_only Discourseから分離するにはどうすればよいですか?
  • サポートされているインストールに関する、あなたの最後のコメントについて:人々が複数のコンテナ構成を行う方法は無限にあることは理解できますが、私の意見では、水平スケーリングや/または高可用性のために複数のインスタンスを実行するためのサポートされている方法が必要です。これは、VMベース(異なるVMで異なるDiscourse web_only Dockerを実行し、Redis/PostgresはDockerを使用せずに他の別個のVMに直接インストールする)とコンテナベース(すべてコンテナベース)の2つのケースに基づいています。