2つの別々のDockerコンテナを実行した経験がある方はいらっしゃいますか?セカンドサイト方式の代わりに

セカンドサイトメソッドが再び機能しないため、同じサーバーで2つのサイトを別々のコンテナで実行することを検討しています。

これに関する経験がある方は、メッセージをください。

ある程度サイズの大きいマシンであれば、ほとんど実行可能です。最低限、SSLを処理するためのリバースプロキシが必要になります。ポートを公開する代わりに、ソケットテンプレートを使用することも検討してください。

「いいね!」 2

Dockerネットワークは適切でしょうか?

もしあなたが何をしているか分かっているなら、はい。問題はないはずです。

「いいね!」 2

traefik と nginx proxy で行いました。マルチサイトよりも多くのリソースを使用します。Postgres で複数のデータベースを取得する方法を理解する必要があります (Postgres のコピーを 2 つ実行したくない場合、さらに多くのリソースが必要になります)。

「いいね!」 1

このサーバーには12個のプロセッサと16GBのメモリがあり、これらはハイボリュームフォーラムではないため、PostgreSQLを両方実行する2つのコンテナに必要な追加リソースについては心配していません。

別のapp2.ymlのようなymlファイルを作成し、競合するすべてのものを変更する必要があります。

こんにちは、ジェイ

とおっしゃいますが、それは、2つのコンテナを、 sensible なホスト名とフェイルオーバー設定(つまり、同じ DISCOURSE_HOSTNAME と、その前にロードバランサー/ヘルスチェックを配置する)を持つ単一のサイトとして扱うという意味でしょうか。それとも、両方のコンテナを直接公開しようとするという意味でしょうか。

ネットワークパラメータは、ポートを公開するのではなく、両方の設定で受け取ることができると思いますので、競合の可能性を減らすのに役立ちますか?

ボリュームバインドマウントは、各コンテナで異なる必要があるでしょうか?

待ってください。Discourseを2回クローンしましたか? Discourseを1回クローンし、containersディレクトリに複数のymlファイルがあるようにしたいのです。

Use Nginx Proxy Manager to manage multiple sites with Discourse を参照してください。ただし、私が使用したのは https://hub.docker.com/r/jwilder/nginx-proxy です。接続するには、YMLにいくつかのENV変数を追加するだけで済みますが、機能させるためにはまだ多くのことを理解する必要があります。

各サイトには独自のホスト名があります。これがすべてである理由ですよね?

リバースプロキシはコンテナのポート80と通信します。ソケットを使用する人もいます。ポートを公開しないでください。

いいえ。それらのファイルは共有できません。

各サイトにはPostgresデータベースが必要です(方法を知っていれば、同じPostgresサーバー上に配置できます)。

各サイトには独自のRedisが必要です。Redisを共有することはできません。これはマルチサイト設定の利点の1つです。

2つのPostgresを実行したい場合は、ホスト名、smtp、およびボリュームパスを変更し、sslおよびletsencryptテンプレートを削除/コメントアウトするだけです。app.ymlhostname.yml のようにリネームしてから ./discourse-setup を再度実行すれば、discourse-setup を使用することもできます。

「いいね!」 1

この点について詳しく教えていただけますか?以下の両方の例を、単一サイト構成ではなく、2番目のサイト構成に合わせて調整しました。

##########################################
# app1.yml  (web + sidekiq)
##########################################

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"

- docker_args: "--network=discourse-net"
+ docker_args: "--network=discourse-net-1"

expose:
  - "8001:80"

params:
  version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  DISCOURSE_HOSTNAME: "physicsyear2.site"
  DISCOURSE_DEVELOPER_EMAILS: "tvgazebo5@gmail.com"

  DISCOURSE_SMTP_ADDRESS: smtp-relay.brevo.com
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: "YOUR_BREVO_USERNAME"
  DISCOURSE_SMTP_PASSWORD: "YOUR_BREVO_PASSWORD"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@physicsyear2.site"

  ## External Postgres
  DISCOURSE_DB_HOST: pg
  DISCOURSE_DB_PORT: 5432
  DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: "REPLACE_ME_discordb_strong"
  DISCOURSE_DB_NAME: discourse
  DISCOURSE_DB_SOCKET: ""

  ## External Redis
  DISCOURSE_REDIS_HOST: redis
  DISCOURSE_REDIS_PORT: 6379
  DISCOURSE_REDIS_PASSWORD: "REPLACE_ME_redis_strong"

  ## MUST be identical on app1 and app2
  SECRET_KEY_BASE: "REPLACE_ME_secret_key_base"

volumes:
  - volume:
-      host: /var/discourse/shared/web-only
+     host: /var/discourse/shared/web-only-1
      guest: /shared
  - volume:
-      host: /var/discourse/shared/web-only/log/var-log
+     host: /var/discourse/shared/web-only/log/var-log-1
      guest: /var/log

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

run:
  - exec: echo "App1 starting — Sidekiq ENABLED"
  # Note: NO sidekiq/down file here → Sidekiq runs
  - exec: echo "App1 ready"



##########################################
# app2.yml  (web + sidekiq)
##########################################

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  # - "templates/web.ssl.template.yml"
  # - "templates/web.letsencrypt.ssl.template.yml"

- docker_args: "--network=discourse-net"
+ docker_args: "--network=discourse-net-2"

expose:
  - "8002:80"

params:
  version: tests-passed

env:
  LC_ALL: en_US.UTF-8
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8

  DISCOURSE_HOSTNAME: "physicsyear2.site"
  DISCOURSE_DEVELOPER_EMAILS: "ppyem3@gmail.com"

  DISCOURSE_SMTP_ADDRESS: smtp-relay.brevo.com
  DISCOURSE_SMTP_PORT: 2525
  DISCOURSE_SMTP_USER_NAME: "YOUR_BREVO_USERNAME"
  DISCOURSE_SMTP_PASSWORD: "YOUR_BREVO_PASSWORD"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@physicsyear2.site"

  ## External Postgres
  DISCOURSE_DB_HOST: pg
  DISCOURSE_DB_PORT: 5432
  DISCOURSE_DB_USERNAME: discourse
  DISCOURSE_DB_PASSWORD: "REPLACE_ME_discordb_strong"
  DISCOURSE_DB_NAME: discourse
  DISCOURSE_DB_SOCKET: ""

  ## External Redis
  DISCOURSE_REDIS_HOST: redis
  DISCOURSE_REDIS_PORT: 6379
  DISCOURSE_REDIS_PASSWORD: "REPLACE_ME_redis_strong"

  ## MUST be identical on app1 and app2
  SECRET_KEY_BASE: "REPLACE_ME_secret_key_base"

volumes:
  - volume:
-      host: /var/discourse/shared/web-only
+     host: /var/discourse/shared/web-only-2
      guest: /shared
  - volume:
-      host: /var/discourse/shared/web-only/log/var-log
+     host: /var/discourse/shared/web-only/log/var-log-2
      guest: /var/log

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

run:
  - exec: echo "App2 starting — Sidekiq ENABLED"
  # IMPORTANT: we DO NOT create /etc/service/sidekiq/down here
  # so Sidekiq also runs in app2
  - exec: echo "App2 ready"

これは良さそうですね。おそらく、app.yml を使用したときに .\discourse-setup が機能しなかったのは、ファイル名が意図したホスト名ではなかったためでしょう。

「いいね!」 1

現時点では、Discourse のコピーを 2 つ持っており、少し試すことができます。前述したように、このシステムは十分に大きく、サイトは十分に小さいので、物事を複製しても問題ないと思います。

「いいね!」 1

スペースの問題ではなく、単に混乱を招くだけです。これは、単一のDiscourseクローンと、containersディレクトリ内のすべてのコンテナを持つように設計されています。だからこそ、containersと呼ばれているのです。

承知しました。おそらく明日には修正できるでしょう。簡単な修正のようです。

「いいね!」 1