لا يمكنني تشغيل طريقة secondsite مرة أخرى، لذا فإنني أتطلع الآن إلى تشغيل موقعي في حاويتين منفصلتين على نفس الخادم.
إذا كان لدى أي شخص خبرة في هذا، فيرجى إرسال رسالة لي.
لا يمكنني تشغيل طريقة secondsite مرة أخرى، لذا فإنني أتطلع الآن إلى تشغيل موقعي في حاويتين منفصلتين على نفس الخادم.
إذا كان لدى أي شخص خبرة في هذا، فيرجى إرسال رسالة لي.
يمكن القيام بذلك في الغالب على جهاز بحجم معقول، ستحتاج إلى وكيل عكسي كحد أدنى للتعامل مع شهادات SSL. وربما استخدام القالب الموصل بدلاً من كشف المنافذ.
هل ستكون شبكة دوكر مناسبة؟
إذا كنت تعرف ما تفعله، فنعم. لا ينبغي أن تكون هناك مشكلة.
لقد فعلتها باستخدام treafik و nginx proxy شيئًا ما. إنها تستهلك موارد أكثر من multisite. لا يزال عليك فهم كيفية جعل postgres يحتوي على قواعد بيانات متعددة (ما لم ترغب في تشغيل نسختين من postgres، وهو ما سيتطلب المزيد من الموارد).
يحتوي هذا الخادم على 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 مرة أخرى.
هل يمكنك التوسع في هذه النقطة، لقد قمت بتكييف كلا المثالين أدناه ليناسب تكوين موقع ثانٍ بدلاً من موقع واحد
##########################################
# 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 إلى، على سبيل المثال،hostname.ymlقبل تشغيل./discourse-setupمرة أخرى.
هذا يبدو جيدًا، وربما يفسر سبب عدم عمل .\discourse-setup مع app.yml بدلاً من تسمية ملف yml باسم المضيف المقصود؟
لدي نسختان منفصلتان من Discourse، على الأقل في الوقت الحالي، قد تسمحان لي باللعب بهما قليلاً. كما ذكرت سابقًا، هذا النظام كبير بما يكفي والمواقع صغيرة بما يكفي لدرجة أنني لا أعتقد أن تكرار الأشياء يمثل مشكلة.
كما قلت سابقًا، هذا النظام كبير بما يكفي والمواقع صغيرة بما يكفي بحيث لا أعتقد أنها مشكلة في تكرار الأشياء.
ليست المساحة. إنها مربكة فقط. تم تصميمه ليكون لديه نسخة واحدة من discourse وجميع الحاويات في دليل الحاويات. لهذا السبب يطلق عليه الحاويات.
حسنا. ربما سأقوم بإصلاحه غدًا، يبدو أنه إصلاح سهل.