スタンドアロンコンテナから別々のWebおよびデータコンテナへの移行

リモートデータベースを使って、分離されたコンテナを実装しようとしています。上記の指示と、リモート PostgreSQL データベースのセットアップに関するハウツーに従いました。セットアップは動作していますが、web_only と data の両方に同じデータベースへの同一の参照が2つある理由がわかりません。何か間違えているのではないか、web_only コンテナが data コンテナを使っていないのではないかと疑ってしまいます。

私のやり方は正しいでしょうか?

以下が私のセットアップです。

web_only.yml に以下を追加しました:

  DISCOURSE_DB_SOCKET: ''
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: xxx.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060
  DISCOURSE_REDIS_HOST: data

data.yml では

postgres.template.yml を削除しました。

templates:
#  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"

また、以下を追加しました:

env:
  # ensure locale exists in container, you may need to install it
  LANG: en_US.UTF-8
  DISCOURSE_DB_USERNAME: REMOVE
  DISCOURSE_DB_PASSWORD: REMOVE
  DISCOURSE_DB_HOST: REMOVE.ondigitalocean.com
  DISCOURSE_DB_NAME: REMOVE
  DISCOURSE_DB_PORT: 25060
  DISCOURSE_DB_BACKUP_PORT: 25060

リモートデータベースを使用している場合、データベースを含むデータコンテナを作成する必要はありません。ただし、PostgreSQL と Redis の両方が必要となるため(その場合、データコンテナが必要になる可能性があります)、ご注意ください。

「いいね!」 1

しかし、ここではエラーなしに 1 つのコンテナのみが実行されています。

「2 つのコンテナ」という表現をどのように解釈されるかはわかりませんが、もし「2 つのコンテナ」を「2 つの独立した Discourse インスタンス」とお考えであれば、方向性が異なります。

この記事は、柔軟性を求める上級者向けに、独立したアプリケーションコンテナとデータベースコンテナを設定する方法を解説しています。

1 台のマシンに 2 つの Discourse サイトをインストールまたはホストしたい場合は、Discourse Multisite をご覧ください。
Multisite configuration with Docker

「いいね!」 1

私が言うコンテナとは、ホストマシンで以下を入力した際に、2 つの実行中のコンテナが表示されることです。

docker ps

そして 2 つ目のコンテナに関するコマンドですが、ドメイン名を設定する場所が見つかりません。

どのコンテナが実行されていましたか?app が実行されていたと仮定すると、いいえ、Discourse-setup の古いバージョンを実行しています。

最新バージョンの discourse-setup を使用していることを確認するために、続行する前に git pull を実行してください。

データコンテナまたは web-only コンテナが実行されている場合は、もう一方が起動しなかった原因を確認してください。通常、web-only コンテナが起動しないのは、ポート 80/443 に既にプロセス(Web サーバー)が実行されているためです。

はい、アプリ
ああ、ダメだ。今日 GitHub からソースコードを git clone してしまった。

私自身は試したことがありませんが、この機能を作ったのは天才の @pfaffman さんですので、彼ならお手伝いできるかもしれません。

GitHub の discourse-setup コードを確認しましたが、動作しない原因となりそうな明らかな問題は見つかりませんでした。

サーバーをどの OS で稼働させていますか?

Ubuntu サーバー
スタンドアロンコンテナを正常に実行できました。
現在は、この方法 Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache を試しています。

マルチサイト、それともマルチコンテナを実現しようとしていますか?

ベンチマークについて、以前も述べた通り、1ヶ月間スタンドアロンのフォーラムを実行していました。新しいものを構築しようとした際、いくつかのアプローチを試みました。

  1. 同じサーバー上で独立したスタンドアロンコンテナを実行しようとしましたが、成功しませんでした。
  2. Dockerを使用したマルチサイト構成で、Webとデータベースを別々のコンテナに分離する方法(https://meta.discourse.org/t/multisite-configuration-with-docker/14084)を試しましたが、成功しませんでした。
  3. ご提案いただいた2コンテナ構成も試しましたが、成功しませんでした。
  4. Success - New Multisite Install on Dedicated server using ServerPilot, Nginx and Apache の方法を現在試行中です。これで成功するかもしれません。

別のスタンドアロンコンテナを単に実行したい場合は、異なるディレクトリとポートを使用するように yml ファイルを変更する必要があります。また、Let’s Encrypt を無効化する必要があるかもしれません。

これらすべてが修正されたら、初心者向けのチュートリアルを書きたいと思っています。

「いいね!」 1

参考までに、パフォーマンスベンチマークを行いたい場合は、本番環境のサーバーで行わないでください。代わりに、別のVPSを起動してベンチマークに使用することをお勧めします。

同じマシン上でDiscourseのインスタンスを2つ同時に実行しようとすると、インストールが破損する可能性があり、これは望ましくありません。

そのコマンドは、実行時に app.yml が存在しない場合のみ、データコンテナと Web コンテナをそれぞれ作成します。Web コンテナを 2 つ作成することはありません。

「いいね!」 1

このコマンドを実行する前に、app.yml がすでに存在しているようです。

これは非常に重要だと思います。OP に追加すべきですし、GitHub にも記載した方が良いでしょうか?

この機能をドキュメント化しなかった方がよかったのかもしれません。実際、2コンテナ構成へ移行しても何の役にも立たないので、そもそもここに含めるべきではないでしょう。

「いいね!」 1

専用の howto はどうでしょうか?

詳細でなくても、Discourse の上級的な活用を始めたい方にとって非常に役立つかもしれません。

「いいね!」 2

そうかもしれません。これは大きな助けであり、discourse-setup と同様に、非常に標準的な新規インストールという特定の目的に特化したものです。私のインストールスクリプトは、かなり前からこれを使用しています。古いコンテナのバックアップを取得し、新しいコンテナに復元する用意があれば、2 つのコンテナ構成への移行を容易に行うことができます。

私の懸念は、常にサポートが困難になる点です。仕組みを理解しないユーザーがこれを使用しようとし、その後、“rebuild app” が機能しなくなるため、ドキュメントを利用できなくなってしまう恐れがあります。また、データベースコンテナをいつ再構築する必要があるかも判断が難しいのです。最近、Redis が 3.0 だったため再構築に失敗し、現在は 4.0 が必要となりました。さらに PostgreSQL の更新も必要となり、一連の手順を踏む必要がありましたが、データコンテナと Web コンテナのどちらをいつ再構築し、推奨パスをどのように変更すべきかを知る必要がありました。私にとってはすべて問題なく進みましたが、Bash が何かさえ知らない人にフォーラムでそれを説明するのは、関係者全員にとってフラストレーションが溜まることでしょう。

標準的でないインストールを作成する際の障壁を高く保ち、ユーザー自身を保護することが最善策だと考えます。

「いいね!」 3