مرحبًا فريق ومجتمع Discourse،
لقد كنت أحاول تكوين نسخة Discourse المستضافة ذاتيًا لاستخدام تخزين كائنات متوافق مع S3 خارجي، لكنني واجهت مشكلة مستمرة وغير عادية. سأكون ممتنًا جدًا لأي مساعدة.
بيئتي:
-
إصدار Discourse: تثبيت Docker قياسي، أحدث
tests-passed. -
المضيف:
[مزود خدمة VPS الخاص بك ونظام التشغيل](请在这里填入您的服务商和系统) -
الوكيل العكسي: Caddy
الهدف: هدفي هو نقل جميع التحميلات (تحميلات المستخدم وأصول الموقع) من التخزين المحلي إلى مزود خارجي.
ملخص المشكلة: بعد تكوين app.yml لـ S3 (إما Cloudflare R2 أو Google Cloud Storage) وتشغيل ./launcher rebuild app، يتعطل الموقع على شاشة التحميل الأولية (الدائرة الزرقاء). تُظهر أدوات مطوري متصفح الويب أن معظم أصول JavaScript الأساسية تفشل في التحميل من عنوان URL الخاص بشبكة توصيل المحتوى (CDN) الخارجية مع خطأ شبكة عام (net::ERR_...).
خطوات التصحيح التي تم اتخاذها:
-
محاولة مع Cloudflare R2:
- قمت بتكوين حاوية Cloudflare R2، وإنشاء رمز مميز للوصول (قراءة وكتابة الكائنات)، وربط نطاق مخصص (
s3.ryzelan.sbs) عبر Cloudflare DNS. - قمت بتكوين
app.ymlباستخدام بيانات اعتماد R2، والنطاق المخصص كعنوان نقطة نهاية/عنوان URL لشبكة توصيل المحتوى (CDN)، وضبطDISCOURSE_FORCE_HTTPS: trueوDISCOURSE_S3_FORCE_PATH_STYLE: true.
- قمت بتكوين حاوية Cloudflare R2، وإنشاء رمز مميز للوصول (قراءة وكتابة الكائنات)، وربط نطاق مخصص (
-
اختبار حاسم - التبديل إلى Google Cloud Storage:
- لاستبعاد مشكلة خاصة بـ Cloudflare، قمت بالتراجع عن جميع التغييرات وأجريت إعدادًا جديدًا باستخدام Google Cloud Storage باستخدام مفاتيح التوافق مع S3.
- بعد إعادة البناء بتكوين GCS، واجهت نفس نمط فشل تحميل JavaScript بالضبط كما هو الحال مع R2.
الوضع الحالي:
- تكتمل عملية
./launcher rebuild appدون أي أخطاء معروضة في الطرفية. - حاوية
appتعمل بشكل صحيح بعد إعادة البناء (تم التحقق منها باستخدامdocker ps). - أمر
./launcher logs appلا يُظهر أي أخطاء؛ تبدو جميع الخدمات الداخلية (unicorn، redis، postgres) قيد التشغيل بشكل طبيعي. - تبدو المشكلة كفشل على مستوى الشبكة عندما يحاول المتصفح جلب أصول JS من عنوان URL الخاص بشبكة توصيل المحتوى (CDN) الخارجية المُكوّنة، ويحدث هذا بغض النظر عن المزود (R2 أو GCS) المستخدم.
إليك كتلة app.yml النهائية التي استخدمناها لـ R2 (كانت GCS مشابهة):
— تكوين Cloudflare R2 S3 START (الإصدار النهائي) —
DISCOURSE_FORCE_HTTPS: true
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: “us-east-1”
DISCOURSE_S3_ENDPOINT: “https://s3.ryzelan.sbs”
DISCOURSE_S3_CDN_URL: “https://s3.ryzelan.sbs”
DISCOURSE_S3_ACCESS_KEY_ID: “REDACTED”
DISCOURSE_S3_SECRET_ACCESS_KEY: “REDACTED”
DISCOURSE_S3_BUCKET: “ryzelan-discourse”
DISCOURSE_S3_FORCE_PATH_STYLE: true
— تكوين Cloudflare R2 S3 END —
سؤالي: ما الذي يمكن أن يتسبب في فشل إعادة بناء Discourse جديدة باستمرار في تحميل أصولها الخاصة من مزودين سحابيين رئيسيين مختلفين مع خطأ في الشبكة؟ هل هناك مشكلة معروفة مع بيئات شبكات VPS معينة، أو شبكات Docker، أو Caddy يمكن أن تسبب هذا؟
شكرًا لوقتكم وأي رؤى يمكنكم تقديمها.
