セカンドサイトメソッドが再び機能しないため、同じサーバーで2つのサイトを別々のコンテナで実行することを検討しています。
これに関する経験がある方は、メッセージをください。
セカンドサイトメソッドが再び機能しないため、同じサーバーで2つのサイトを別々のコンテナで実行することを検討しています。
これに関する経験がある方は、メッセージをください。
ある程度サイズの大きいマシンであれば、ほとんど実行可能です。最低限、SSLを処理するためのリバースプロキシが必要になります。ポートを公開する代わりに、ソケットテンプレートを使用することも検討してください。
Dockerネットワークは適切でしょうか?
もしあなたが何をしているか分かっているなら、はい。問題はないはずです。
traefik と nginx proxy で行いました。マルチサイトよりも多くのリソースを使用します。Postgres で複数のデータベースを取得する方法を理解する必要があります (Postgres のコピーを 2 つ実行したくない場合、さらに多くのリソースが必要になります)。
このサーバーには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.yml を hostname.yml のようにリネームしてから ./discourse-setup を再度実行すれば、discourse-setup を使用することもできます。
この点について詳しく教えていただけますか?以下の両方の例を、単一サイト構成ではなく、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をhostname.ymlのようにリネームしてから./discourse-setupを再度実行すれば、discourse-setupを使用することもできます。
これは良さそうですね。おそらく、app.yml を使用したときに .\discourse-setup が機能しなかったのは、ファイル名が意図したホスト名ではなかったためでしょう。
現時点では、Discourse のコピーを 2 つ持っており、少し試すことができます。前述したように、このシステムは十分に大きく、サイトは十分に小さいので、物事を複製しても問題ないと思います。
先ほども言ったように、このシステムは十分に大きく、サイトは十分に小さいので、物事を重複させても問題ないと思います。
スペースの問題ではなく、単に混乱を招くだけです。これは、単一のDiscourseクローンと、containersディレクトリ内のすべてのコンテナを持つように設計されています。だからこそ、containersと呼ばれているのです。
承知しました。おそらく明日には修正できるでしょう。簡単な修正のようです。