مرحبًا.
لدينا تثبيت لنسخة v2.4.0.beta2 +346 من Discourse كان أصلًا متاحًا على include.metaring.com،
باستخدام خادم Apache HTTP على Ubuntu يقوم بـ:
- تحويل جميع طلبات HTTP إلى HTTPS
- إدارة شهادة SSL بنفسه (LetsEncrypt)
- توجيه جميع الطلبات عبر الوكيل (Proxy) باستخدام nginx http sock، لذا فإن منافذ Docker الخاصة بـ Discourse 80 و443 معطلة/غير مستخدمة
قمنا بما يلي:
./launcher enter app
rails c
[1] pry(main)> SiteSetting.force_https = true
=> true
لنتأكد تمامًا من أن كل شيء يُقدَّم عبر HTTPS (لقد واجهنا العديد من الأخطاء في غير ذلك)
وكان كل شيء يعمل بشكل ممتاز.
ثم قررنا نقل التطبيق (دون لمس قاعدة البيانات أو أي شيء آخر) إلى include.metaring.com/discourse، فقمنا بتعديل ملف app.yml على النحو التالي:
DISCOURSE_HOSTNAME: include.metaring.com<— لم يتغير، كما كان من قبلDISCOURSE_RELATIVE_URL_ROOT: /discourse
ثم، لتكون الأمور أكثر تأكيدًا، قمنا بـ:
./launcher stop app
./launcher destroy app
./launcher cleanup
./launcher rebuild app
بطبيعة الحال، أضفنا أيضًا في ملف إعدادات Apache قواعد لـ ProxyPass بشكل صحيح من /discourse إلى unix:/../../nginx.http.sock|http://localhost/*discourse*
بعد ذلك، كان التطبيق بالطبع متاحًا عبر الإنترنت، لكنه واجه العديد من المشاكل:
-
لم يكن المحتوى الثابت (الإضافات، الأصول، الصور، ملفات JavaScript، التحميلات) متاحًا. بعد جلسات تصحيح طويلة وعمليات بحث غير مثمرة على الويب لجعلها تعمل، قمنا بإنشاء بعض قواعد الوكيل في Apache لتوجيهها إلى مسار localhost الجذري، بدون بادئة /discourse (مثل: /discourse/plugins تشير إلى → unix:/../../nginx.http.sock|http://localhost/plugins وهكذا)
-
بعض مسارات /uploads جاءت من صفحات الويب بدون بادئة /discourse، لذا احتجنا إلى كتابة قاعدة وكيل Apache أخرى تنقل من /uploads/ إلى unix:/../../nginx.http.sock|http://localhost/discourse/uploads
-
الآن الشيء الأكثر غرابة: عندما يرسل العميل طلبات تحتوي على /uploads/default/ أو /discourse/uploads/default/ (محتوى ثابت)، نحتاج إلى اتباع الحل المذكور في النقطة 1 أعلاه وتوجيه كلاهما إلى
http://localhost/uploads/default/(بدون بادئة /discourse)، بينما يجب توجيه طلبات /uploads/ أو /discourse/uploads/ الأخرى التي لا تحتوي على بادئة /default في المسار إلىhttp://localhost/discourse/uploads/(لاحظ أن عدم وجود مسار default يعني أنها مكالمات ويب سيرفيس)
مع جميع قواعد الوكيل التسع هذه التي أضفناها، يعمل كل شيء بشكل ممتاز مرة أخرى حتى تحت المسار /discourse. لكننا وجدنا أمرًا غريبًا للغاية أننا احتجنا إلى كتابة كل هذا لجعل كل شيء يعمل مرة أخرى.
هل نفعل شيئًا خاطئًا؟
هل توجد طريقة ذكية أخرى لإدارة هذا الوضع؟
=== تعديل ===
نسيت أمرًا آخر قد يكون مرتبطًا:
عندما يحاول المستخدم رفع صورة مخصصة لاستخدامها كصورة شخصية، يتم الرفع بنجاح وتُعرض الصورة المصغرة بشكل صحيح.
لكن عند الضغط على زر حفظ التغييرات وإعادة تحميل الصفحة، تعود الصورة الشخصية إلى الصورة الافتراضية للمستخدم
عند فحص ملف
production.log، يظهر أن الخطأ هو Code 418.أما رفع الصور الأخرى فيعمل بشكل جيد.
شكرًا مقدّمًا على ردودكم وعلى عملكم الرائع!
