يجب اعتبار هذه التعليمات تجريبية وللأشخاص المعتادين على الإعداد القياسي
ولكن في الوقت الحالي (2023.02.11) هذه التعليمات لا تعمل!! (انظر Set up Let’s Encrypt with multiple domains / redirects لكيفية تحديث إعداد letsencrypt لإضافة جزء fullpath. سأقوم بتحديث هذا ليعكس تلك التغييرات قريبًا جدًا.)
لقد طورت هذا الدليل قبل أسبوعين ولكني بحاجة إلى شخص لاختباره ومعرفة ما إذا كان يعمل لشخص آخر. يرجى الرد إذا جربته وإخباري بما إذا كان يعمل وما إذا كان هناك أي شيء غير واضح.
ونستمر في العرض. . .
يوثق هذا الدليل بشكل عام كيفية إعداد إعداد متعدد المواقع مع مضيفين إضافيين (3 إجمالاً).
كلمة مرور قاعدة البيانات (نفس كلمة مرور DISCOURSE_DB_PASSWORD) أو discourse في app.yml
لأغراض التبسيط، هذا للموقع الرئيسي المسمى =domain=، مع موقعين إضافيين هما =two=.=domain= و =three=.=domain=. يمكنك استخدام أي أسماء تريدها، ولكن من أجل هذا القالب، فإن عدم وجود اسم مختصر مختلف (لاسم قاعدة البيانات وعنوان المنتدى الفرعي) و اسم المضيف الكامل أسهل قليلاً.
أضف في hooks بعد الإضافات (plugins) في app.yml أو web_only.yml
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
=two=:
adapter: postgresql
database: =two=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =two=.=domain=
=three=:
adapter: postgresql
database: =three=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =three=.=domain=
after_db_migrate:
- exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
after_ssl:
# أخبر letsencrypt بالشهادات الإضافية التي يجب الحصول عليها
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /-d =domain= /
to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
global: true
# لا تقم بإعادة توجيه جميع المضيفين مرة أخرى إلى اسم النطاق الرئيسي
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /if \\(\\$http_host[^\\}]*\\}/m
to: ""
أضف إلى قسم after_postgres في app.yml أو data.yml
- exec: sudo -u postgres createdb =two= || exit 0
- exec:
stdin: |
grant all privileges on database =two= to discourse;
cmd: sudo -u postgres psql =two=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
- exec: sudo -u postgres createdb =three= || exit 0
- exec:
stdin: |
grant all privileges on database =three= to discourse;
cmd: sudo -u postgres psql =three=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'
بعد ذلك،
./launcher rebuild app
أو
./launcher rebuild data
./launcher rebuild web_only
لقد جربته للتو، بل جربته مرتين لأنني لم أستطع تصديق أنه يعمل دون أي مشاكل من المحاولة الأولى كل ما فعلته هو النسخ، وتعديل النطاقات وكلمة المرور، ثم اللصق في الملفات المقابلة لتثبيت جديد يحتوي على حاويتين.
أرجو تقديم ملاحظاتك إذا كان هناك أي شيء غير واضح. لقد احتجت فقط للتفكير قليلاً في هذا الفقرة:
يبدو أن النص يشير إلى أن إعداد الحاويتين ضروري لمتابعة الخطوات، لكنه في الواقع ليس كذلك. ولم أفهم سبب ربطه بالمنشور رقم 48 من الموضوع بدلاً من المنشور الأولي.
شكرًا لك! سألقِ نظرة. يبدو أن كلا الأمرين من النوع المتهور الذي كنت آمل أن تخبرني به!
تحرير: شكرًا لك! لقد قمت بنسخ موقعي الحالي بشكل متهور في موضوع الحاويتين، لذا قمت بإصلاح ذلك، وغيرت الصياغة لتوضح أنه سيعمل مع أي تثبيت يعمل بشكل صحيح.
مرحبًا
بدأت بتثبيت قياسي لـ Discourse (على DigitalOcean)، ثم قمت بإعداد nginx (باستخدام هذه التعليمات) لأنني أردت إنشاء موقعي Drupal على نفس الـ droplet.
إذا أردت إنشاء مثيل آخر لـ Discourse، فهل عليّ اتباع ما ورد أعلاه؟
هذه التعليمات مخصصة لحالة عدم استخدام وكيل عكسي. أوصي باتباع تكوين متعدد المواقع مع Docker. قد تعمل التعليمات التي ربطت بها، لكنني أوصي باتباع ما هو موجود هنا أولاً.
شكرًا؛ ألاحظ أنه مع ذلك ستستخدم كلتا الموقعين نفس إعدادات SMTP
هل توجد طريقة لتجاوز ذلك؟
أم أن الدليل الآخر أفضل (يبدو أنه قد يتطلب بعض الجهد لنقل الموقع الحالي إلى شبكة Docker)؟
بدلاً من ذلك، هل من الممكن تثبيت قاعدة كود أخرى، مثل /var/discourse2؟
(سيكلفني حوالي 500 ميجابايت، لكنه يستحق ذلك إذا أنقذني من هذا التعقيد الذهني)
نعم، لكنك تحتاج فقط إلى إنشاء تثبيت يحتوي على حاويتين، ثم إنشاء ملف web_only2.yml. (أعتقد أنه يمكنك وجود ملفين من نمط app.yml، لكن ذلك سيتطلب تشغيل نسختين من PostgreSQL دون داعٍ). أعتقد، مع ذلك، أنك ستحتاج إلى نسختين من Redis.
شكرًا لك؛ لأنني لست على دراية كافية بفصل البيانات عن حاوية الويب، فقد قمت بإنشاء حاوية مستقلة أخرى تتبع هذه الإرشادات (ويبدو أن الشهادات التي أنشأها certbot تعمل بشكل صحيح). ومع ذلك، يبدو حاليًا أن هناك مشكلة في إعدادات Mailgun: حيث ترسل رسائل التفعيل إلى Gmail، لكن أي بريد مستضاف لدى مسجل النطاق الخاص بي (Dreamhost) يفشل
ما مقدار الحمل الإضافي الذي سيسببه مثيل Postgres الإضافي؟
لقد قرأت منشورك حول الفصل وسأجرب ذلك إذا كانت الوفورات كبيرة.
لقد جربت هذا مؤخرًا، لكنني أواجه بعض الصعوبات في الإرشادات:
لا أستطيع العثور على كلمة مرور قاعدة البيانات (أو حتى معرفة الغرض منها في الملف).
لم يكن ملف app.yml يحتوي في الأصل على قسم after_postgres، لذا أضفته تحت قسم hooks ليتوافق مع الأقسام الأخرى (مثل after_ssl و after_db_migrate وما إلى ذلك). إذا كان هذا القسم موضعًا في مكان خاطئ، أرجو إخباري، فأنا جديد تمامًا في التعامل مع هذا النوع من الأمور.
عند التحقق من صحة ملف YAML على الموقع http://www.yamllint.com/، أتعرض للخطأ (<unknown>): did not find expected key while parsing a block mapping في السطر الذي أضفت فيه قسم after_postgres تحت قسم hooks.
إذا أمكنك توضيح خطوات تعديل ملف app.yml، فسأكون ممتنًا جدًا.
أفكر في إعداد هذا، حيث أرغب أنا وصديقي في اختبار العديد من المنتديات المختلفة قبل أن نقرر ما إذا كنا نريد استثمار المزيد فيها، وربما الحصول على استضافة منفصلة وما إلى ذلك.
كنت أفكر في وضعها على نطاقات مختلفة، وأتفهم أن هذا قد يسبب بعض الارتباك حيث سيتلقى الأشخاص رسائل البريد الإلكتروني من عنوان SMTP الرئيسي فقط، ومع ذلك، هل تعرف ما إذا كانت النطاقات المنفصلة ستسبب أي مشاكل أخرى؟
لدى Discourse نطاق واحد لجميع عملائه من الشركات والعملاء القياسيين. يمكنك جعل عنوان البريد الإلكتروني للإشعارات أي شيء تريده مثل shortname@whatevermail.com.
للأسف، لدي مشكلة في تشغيل منتديات ديسكورس إضافية على نفس الخادم/عنوان IP.
أولاً، اتبعت الوثائق لإنشاء موقع مستقل ونجح الأمر.
(على سبيل المثال: test.john.com - نطاق فرعي يعيد التوجيه إلى عنوان IP الفردي)
الآن عندما حاولت إضافة المزيد من منتديات ديسكورس (على سبيل المثال: test.joe.com و test.doe.com - نطاقات فرعية أخرى من مواقع مختلفة).
حاولت اتباع خطواتك ولكنها لم تنجح وأنا الآن تائه.
بعض الأسئلة:
كيف سيتم تثبيت هذين الموقعين الإضافيين؟ مثل نسخ /standalone.yml إلى دليل containers وإعادة تسميته؟ ثم القيام بالتثبيت العادي؟ (على سبيل المثال: ./launcher rebuild joe)
تشير تعليماتك إلى أن التغييرات يجب أن تكون في app.yml، وإلحاق كل التعليمات البرمجية أعلاه - والتي أفترض أنها ستضاف في الملف المثبت بنجاح أولاً (test.john.com)؟
بخلاف تلك الموجودة في دليل container، قمت بإنشاء config/multisite.yml وهذا ما تبدو عليه التعليمات البرمجية الخاصة بي:
لا. أنت تضيف الأشياء إلى app.yml كما هو موضح. سيؤدي ذلك إلى إنشاء mutlisite.yml داخل الحاوية. سيكون هناك مثيل واحد وسيعمل لجميع المجالات، نظرًا لأن نظام أسماء النطاقات (DNS) لجميعها يشير إلى هناك. هذا ليس لامتلاك حاويات Discourse متعددة، واحدة لكل اسم نطاق.
آخر مرة تحققت فيها، نجحت تلك التعليمات كما هي مكتوبة. فقط أضف الأسطر إلى ملف app.yml الخاص بك ويجب أن يعمل. لست بحاجة إلى لمس أي ملفات أخرى.
فيما يتعلق بجزء الترحيل، فشلت جميع التوليفات دائمًا… >> bundle exec rake multisite:migrate
********************** الجزء الأخير من العملية**************************
2023-02-11 17:50:43.853 UTC [61] LOG: إيقاف التشغيل
162:M 11 Feb 2023 17:50:43.866 # طلب المستخدم الإيقاف...
162:M 11 Feb 2023 17:50:43.866 * حفظ لقطة RDB النهائية قبل الخروج.
162:M 11 Feb 2023 17:50:43.881 * تم حفظ قاعدة البيانات على القرص
162:M 11 Feb 2023 17:50:43.882 # Redis جاهز الآن للخروج، وداعًا...
2023-02-11 17:50:44.007 UTC [57] LOG: تم إيقاف تشغيل نظام قاعدة البيانات
فشل
--------------------
Pups::ExecError: cd /var/www/discourse & sudo -E -u discourse bundle exec rake multisite:migrate فشل مع العودة #<Process::Status: pid 582 exit 1>
موقع الفشل: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
فشل التنفيذ مع المعلمات "cd /var/www/discourse & sudo -E -u discourse bundle exec rake multisite:migrate"
فشل التمهيد برمز خروج 1
** فشل التمهيد ** يرجى التمرير لأعلى والبحث عن رسائل خطأ سابقة، قد يكون هناك أكثر من واحدة.
قد يساعد ./discourse-doctor في تشخيص المشكلة.
لقد تحققت مما تم إنشاؤه وما لم يتم إنشاؤه حتى الفشل.
تم إنشاء قواعد بيانات النطاقات الفرعية ولكن الترحيل فشل. لم يتم إنشاء تكوينات nginx للنطاقات الفرعية أو multisite.yml عندما تحققت من مجلدات overlay2 أو في أي مكان.
./launcher bootstrap، destroy، start، stop، rebuild أو إعداد جديد عدة مرات… جربت جميع الأوامر ولكن لم يحدث شيء…
هل هذا البرنامج التعليمي لا يزال صالحًا لـ v3.1.0.beta 2 أم ماذا يمكن أن أكون قد فاتني؟
أي فكرة، من فضلك؟
لقد كنت أستخدم هذا الإعداد لسنوات مع خوادم الاختبار الخاصة بي. ومع ذلك، منذ التحديث إلى 3.5.0.beta5-dev، يتم الآن إعادة توجيهي إلى الموقع الأساسي كلما أدخلت نطاقًا فرعيًا.
لقد كنت سعيدًا جدًا لعدم الاضطرار إلى الدخول في كل أمور الشهادات. ولكن الآن أنا تائه تمامًا، هل هناك أدوات لتصحيح ما يحدث؟