هل لدى أي شخص خبرة في تشغيل حاويتي Docker منفصلتين بدلاً من طريقة الموقع الثاني؟

لا يمكنني تشغيل طريقة secondsite مرة أخرى، لذا فإنني أتطلع الآن إلى تشغيل موقعي في حاويتين منفصلتين على نفس الخادم.

إذا كان لدى أي شخص خبرة في هذا، فيرجى إرسال رسالة لي.

يمكن القيام بذلك في الغالب على جهاز بحجم معقول، ستحتاج إلى وكيل عكسي كحد أدنى للتعامل مع شهادات SSL. وربما استخدام القالب الموصل بدلاً من كشف المنافذ.

إعجابَين (2)

هل ستكون شبكة دوكر مناسبة؟

إذا كنت تعرف ما تفعله، فنعم. لا ينبغي أن تكون هناك مشكلة.

إعجابَين (2)

لقد فعلتها باستخدام treafik و nginx proxy شيئًا ما. إنها تستهلك موارد أكثر من multisite. لا يزال عليك فهم كيفية جعل postgres يحتوي على قواعد بيانات متعددة (ما لم ترغب في تشغيل نسختين من postgres، وهو ما سيتطلب المزيد من الموارد).

إعجاب واحد (1)

يحتوي هذا الخادم على 12 معالجًا و 16 جيجابايت، وهذه ليست منتديات ذات حجم كبير، لذلك لا أقلق بشأن الموارد الإضافية لتشغيل حاويتين تعملان بنظام postgres.

تحتاج إلى إنشاء ملف yml آخر، مثل app2.yml وتغيير كل الأشياء التي تتعارض مع الآخر.

مرحباً جاي

عندما تقول

هل تقصد أن أعامل الحاويتين كموقع واحد خلف اسم مضيف منطقي وإعداد تجاوز الفشل (أي نفس DISCOURSE_HOSTNAME وموازن تحميل/فحص صحة أمامهما)، بدلاً من محاولة كشف الحاويتين مباشرة؟

أتخيل أن كلا التكوينين يمكن أن يأخذ معلمات الشبكة بدلاً من كشف المنافذ، فهل يساعد ذلك في التعارض المحتمل؟

هل تحتاج ربطات المجلدات إلى أن تكون مختلفة لكل حاوية؟

انتظر. هل نسخت Discourse مرتين؟ تريد نسخ Discourse مرة واحدة ثم الحصول على ملفات yml متعددة في دليل الحاويات.

ربما انظر إلى https://meta.discourse.org/t/use-nginx-proxy-manager-to-manage-multiple-sites-with-discourse/206344، على الرغم من أن https://hub.docker.com/r/jwilder/nginx-proxy هو الذي استخدمته. تحتاج فقط إلى إضافة بعض متغيرات البيئة إلى ملف YML الخاص بك لجعله يتصل، ولكن لا يزال هناك عدد كبير من الأشياء التي يجب أن تفهمها لجعله يعمل.

كل موقع له اسم مضيف خاص به. هذه هي نقطة كل هذا، أليس كذلك؟

لدي وكيل عكسي يتحدث إلى المنفذ 80 على الحاوية. يفضل آخرون استخدام المقابس. لا يجب عليك كشف أي منافذ.

لا. لا يمكن مشاركة أي من هذه الملفات.

كل موقع يحتاج إلى قاعدة بيانات postgres (يمكن أن تكون على نفس خادم postgres إذا كنت تعرف كيفية القيام بذلك).

كل موقع يحتاج إلى redis خاص به. لا يمكنهم مشاركة redis، وهي إحدى مزايا إعداد المواقع المتعددة.

إذا كنت تريد تشغيل اثنين من قواعد بيانات postgres، فما عليك سوى تغيير اسم المضيف و smtp ومسارات المجلدات وإزالة/التعليق على قوالب ssl و letsencrypt. يمكنك حتى استخدام discourse-setup إذا قمت بإعادة تسمية app.yml إلى، على سبيل المثال، hostname.yml قبل تشغيل ./discourse-setup مرة أخرى.

إعجاب واحد (1)

هل يمكنك التوسع في هذه النقطة، لقد قمت بتكييف كلا المثالين أدناه ليناسب تكوين موقع ثانٍ بدلاً من موقع واحد

##########################################
# 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"

هذا يبدو جيدًا، وربما يفسر سبب عدم عمل .\discourse-setup مع app.yml بدلاً من تسمية ملف yml باسم المضيف المقصود؟

إعجاب واحد (1)

لدي نسختان منفصلتان من Discourse، على الأقل في الوقت الحالي، قد تسمحان لي باللعب بهما قليلاً. كما ذكرت سابقًا، هذا النظام كبير بما يكفي والمواقع صغيرة بما يكفي لدرجة أنني لا أعتقد أن تكرار الأشياء يمثل مشكلة.

إعجاب واحد (1)

ليست المساحة. إنها مربكة فقط. تم تصميمه ليكون لديه نسخة واحدة من discourse وجميع الحاويات في دليل الحاويات. لهذا السبب يطلق عليه الحاويات.

حسنا. ربما سأقوم بإصلاحه غدًا، يبدو أنه إصلاح سهل.

إعجاب واحد (1)