تكوين موفر تخزين كائنات متوافق مع S3 للتحميلات

مرحباً،

أنا عالق بعض الشيء ومحتار وآمل أن يتمكن شخص ما من مساعدتي.
كان لدي في البداية تثبيت Bitnami وأدركت كم ستكون هذه المشكلة على طول الطريق، فأعدت التثبيت باستخدام التثبيت القياسي.
تمكنت من استعادة النسخة الاحتياطية الخاصة بي وكان كل شيء على ما يرام، على الرغم من أنني انتقلت من الإصدار 2.8 إلى الإصدار التجريبي 2.9.

اختبرت نسختي الاحتياطية مرة أخرى على Google Bucket الخاص بي ولا تزال تعمل بشكل رائع.

لاحظ أن جميع إعدادات S3 تم إجراؤها من خلال واجهة الويب وليس عبر متغيرات البيئة.

لأسباب تتعلق بالخصوصية (GDPR)، قمت بإنشاء حاوية نسخ احتياطي جديدة في أوروبا (لنسميها discourse-backup-eu)، والآن بعد أن تمكنت من تغيير متغير البيئة، قمت بتعيين DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com، وأعدت بناء التطبيق، وغيرت اسم حاوية النسخ الاحتياطي في واجهة الويب، وأعدت تشغيل النسخ الاحتياطي وكنت سعيدًا جدًا برؤية ملفات النسخ الاحتياطي تظهر في حاوية النسخ الاحتياطي الجديدة الخاصة بي في أوروبا.

الآن أردت أن تذهب التحميلات إلى حاوية أخرى وتجنب ملء مساحة قرص VM الخاصة بي.

لذلك قمت بتكوين حاوية جديدة (لنسميها discourse-uploads)، وجعلتها عامة، وأضفت دور Storage Legacy Bucket Owner إلى حساب الخدمة الخاص بي على تلك الحاوية الجديدة.
ثم أضفت قاعدة إلى موازن التحميل الحالي الخاص بي (لنسميه https://www.example.com) لاستخدام حاوية خلفية مع تمكين Cloud CDN كما هو موضح هنا. القاعدة هي /discourse-uploads/* تشير إلى الحاوية discourse-uploads.

اختبرت CDN الخاص بي باستخدام ملف test.jpg في جذر الحاوية ولكن لم أتمكن من الوصول إليه عبر https://www.example.com/discourse-uploads/test.jpg واضطررت إلى إنشاء مجلد فرعي يسمى discourse-uploads داخل الحاوية، ونقلت test.jpg إلى الداخل والآن يمكنني رؤية صورتي التجريبية عبر https://www.example.com/discourse-uploads/test.jpg.

في واجهة المستخدم الرسومية، قمت بتغيير اسم الحاوية الوهمي تحت “s3 upload bucket” (أجبرت على تعيينه سابقًا أثناء إعداد النسخ الاحتياطي) إلى discourse-uploads، وملأت عنوان URL الخاص بـ CDN بـ https://www.example.com/discourse-uploads وحددت “enable s3 uploads”.

منذ ذلك الحين، إذا حاولت تحميل صورة، سأحصل على نافذة منبثقة تقول “Invalid Argument” في نافذة المتصفح (قادمة من خطأ 422 مع محتوى JSON يقول نفس الشيء بشكل أساسي).

حاولت إعادة بناء جميع المشاركات، ولكن لم يكن هناك تأثير، وما زلت أحصل على الخطأ.

لذلك، فكرت، يجب أن أحاول استخدام متغيرات البيئة بدلاً من واجهة الويب.

واستخدام التكوين التالي:

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3

أعدت بناء التطبيق.
بعد ذلك، لا يمكنني فتح discourse لأن الأصول لم يتم تحميلها إلى الحاوية وأحصل على 404.
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js

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

غيرت متغير البيئة إلى
DISCOURSE_S3_BUCKET: discourse-uploads
(بالتفكير في أنه لاحقًا يمكنني اللعب بقاعدة المضيف بدلاً من ذلك لتجنب الاضطرار إلى التحميل إلى مجلد فرعي).

وأعدت البناء لمعرفة ما إذا كان أي شيء سيتم تحميله، ولكن لم يتم تحميل أي شيء إلى الحاوية ولا يزال discourse يفشل في الفتح بسبب أخطاء 404.

إذًا أسئلتي هي:

  • هل تتعارض واجهة الويب ومتغيرات البيئة؟
  • متى يفترض تحميل الأصول إلى الحاوية؟
  • كيف يمكنني تصحيح هذا؟ لا أرى أي خطأ في السجلات.
  • هل من الممكن تعيين مجلد فرعي لحاوية في التكوين؟
  • بمجرد أن يعمل هذا، هل يتم نقل الصور التي تم تحميلها سابقًا إلى الحاوية؟ إذا قمت بإعادة البناء، كيف ستبدو عناوين URL للصور التي تم تحميلها سابقًا؟

شكرا لك!

إعجاب واحد (1)