الانتقال من حاوية مستقلة إلى حاويات ويب وبيانات منفصلة

شكرًا لك يا جاي @pfaffman،

أنت حقًا مورد قيم من الطراز الرفيع هنا، بلا شك!

ما رأيك في هذه الفكرة ربما المجنونة (بناءً على فهمي المحدود حتى الآن)؟

إعداد nginx كوكيل عكسي في الواجهة الأمامية؛ وفقًا لهذا الدليل:

ثم إنشاء مجلدين / نسختين مع discourse_docker (مستقلة) مُعدّتين، على سبيل المثال:

  1. /var/discourse1
  2. /var/discourse2

في كلتا النسختين، قم بإعداد discourse_docker (مستقلة) للاستماع إلى منفذ سوكيت مختلف، مع تعديل هذا القالب في كل نسخة:

 - "templates/web.socketed.template.yml"

إذن، باختصار، قمنا ببساطة بإعادة بناء بيئة الإنتاج (في وقت هدوء) لتعمل في حاوية مختلفة تستمع إلى سوكيت مختلف (nginx.https.sock2)، وبالتالي لا يوجد تضارب في السوكيت؛ ويمكننا بناؤها في وضع مستقل أيضًا (بهدف إزالة الحاجة إلى حاويتين، data و web-only).

على سبيل المثال (للمناقشة / التوضيح)، في web.socketed.template.yml في discourse1:

  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;/
     to: |
       listen unix:/shared/nginx.http.sock;
       set_real_ip_from unix:;
  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 443 ssl http2;/
     to: |
       listen unix:/shared/nginx.https.sock ssl http2;
       set_real_ip_from unix:;

وفي discourse2:

 - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 80;/
     to: |
       listen unix:/shared/nginx.http.sock2;
       set_real_ip_from unix:;
  - replace:
     filename: "/etc/nginx/conf.d/discourse.conf"
     from: /listen 443 ssl http2;/
     to: |
       listen unix:/shared/nginx.https.sock2 ssl http2;
       set_real_ip_from unix:;

ومع ذلك، بدلاً من السماح لقالب discourse بالقيام بالسحر، نقوم ببساطة بالتبديل اليدوي للسوكيت في /etc/nginx/conf.d/discourse.conf وإعادة تشغيل nginx، لذا سنقوم بإزالة أمر replace: في قالب web.socketed.template.yml.

في هذا التكوين المقترح (ربما فكرة مجنونة)، يمكننا أن يكون لدينا حاويتان مستقلتان تستمعان إلى سوكيتين مختلفتين (بدون تضارب) ونقوم ببساطة بتكوين nginx للاتصال بالسوكيت الذي نرغب فيه وإعادة تشغيل nginx.

يبدو هذا واضحًا وسهلًا وربما مفيدًا (خلال فترة هدوء لا توجد فيها منشورات جديدة في النسخة الحية) لأولئك الذين قد لا يرغبون (أو يحتاجون) إلى تعقيد حاويتين (data و web-only) لكل نسخة واحدة من discourse (تطبيق).

بالطبع، فإن التكوين الأكثر متانة (من منظور البيانات) ومع ذلك، للحصول على الكمال للمواقع المزدحمة، هو حل “الحاويتين” لأننا سنرغب في وجود نسختي data و web-only (التي تستمع الآن إلى سوكيتين مختلفين، sock و sock2.

في حل “الحاويتين” مع واجهة nginx الأمامية، فإن “التكوين القياسي” هو أن تستمع كلتا الحاويتين web-only إلى نفس السوكيت، وبالتالي لا يمكن تشغيلهما في نفس الوقت؛ ولكن إذا (على سبيل المثال فقط) جعلناهما تستمعان إلى سوكيت مختلف، فيمكن تشغيلهما في نفس الوقت ويمكننا ببساطة استخدام ملف تكوين nginx (وإعادة تشغيل nginx) للتبديل بينهما.

هل هذا هو الفهم الصحيح؟

هل أبدأ في (ببطء ولكن على أمل بالتأكيد) فهم هذا؟

شكرًا!

ملاحظة متابعة فقط: لدي تكوين “الحاويتين” يعمل على أحد أجهزة Mac الخاصة بي على سطح المكتب:

Screen Shot 2020-04-11 at 12.41.24 PM

التحذير الوحيد في تثبيتنا كان الحاجة إلى إنشاء هذه المجلدات يدويًا (وتعيين الملكية والأذونات) لأن هذه المجلدات لا يتم إنشاؤها لسبب ما بواسطة البرامج النصية:

~discourse/discourse/shared/data
~discourse/discourse/shared/web-only

وبالطبع، في البداية جربت بكلمة مرور فارغة لقاعدة البيانات، ولم ينجح ذلك (التعليمات تقول بوضوح تعيين كلمة مرور، لكنني كنت فقط أختبر).

في الخطوة التالية، سأقوم بإعداد واجهة nginx الأمامية وأحاول الانتقال إلى هذا التكوين باستخدام websocket لتطبيق web-only.