Loading...
تخزين متوافق مع S3

Object Storage

Object Storage من cdn.com.tr هي خدمة buckets متوافقة مع S3 تحفظ فيها الوسائط والأصول الثابتة والنسخ الاحتياطية خارج بيئة تشغيل تطبيقك. تنشئ buckets، وتولّد أزواج access key وsecret key، وتضع المحتوى أمام حافة CDN فتصبح التنزيلات سريعة ويبقى حمل المصدر منخفضًا. تعمل أدوات S3 القياسية وحِزَم SDK دون تعديل مقابل نقطة النهاية.

Object Storage

لماذا تنقل الملفات من قرص التطبيق

ينبغي أن تكون حاويات التطبيق عديمة الحالة كي يُعاد نشرها وتوسيعها والتراجع عنها دون فقدان ما رفعه المستخدمون. حين تُكتب الصور الرمزية وصور المنتجات والفواتير والفيديو إلى نظام ملفات الحاوية، تخاطر كل إعادة تشغيل بفقدان البيانات وتملك كل نسخة متماثلة مجموعة ملفات مختلفة. تحلّ Object Storage هذا بمنح كل النسخ المتماثلة مكانًا مشتركًا ومتينًا واحدًا للقراءة والكتابة. يبقى تطبيقك قابلًا للاستبدال بينما تعيش البيانات باستقلالية.

متوافق مع S3 حقًا، لا مجرد شبيه

تتحدث الخدمة واجهة S3 API، فتستمر الأدوات التي تستخدمها أصلًا بالعمل: aws-cli، وboto3، وAWS SDK لجافاسكربت، ومشغّلات نظام ملفات S3 في Laravel وSymfony، وrclone، وs3cmd، جميعها تتخاطب معها حالما تضبط رابط نقطة النهاية وزوج المفاتيح. تتصرف عمليات الرفع متعدد الأجزاء للملفات الكبيرة وبيانات الكائن الوصفية ومعالجة content-type بالطريقة التي يتوقعها مطورو S3. يعني هذا أن ترحيل تطبيق يستخدم S3 أصلًا هو عادةً تغيير إعداد لا إعادة كتابة شيفرة.

الـ Buckets وaccess keys ونطاق الضرر

تنظّم البيانات في buckets وتتحكم في الوصول بأزواج access key ID وsecret key يمكنك تدويرها أو إبطالها في أي وقت. إبقاء مفتاح واحد لكل تطبيق أو لكل bucket يحدّ من نطاق الضرر: إن تسرّب مفتاح في سجل أو حزمة عميل، تبطل ذلك الزوج وحده وتعيد إصداره دون المساس بكل خدمة أخرى. تسرد اللوحة المفاتيح الموجودة لتدقّقها وتُقاعد ما لم يعد مستخدمًا منها.

التخزين وCDN يعملان كوحدة واحدة

لأن Object Storage وحافة CDN هما المنصة نفسها، يمكنك تقديم كائنات الـ bucket عبر التخزين المؤقت دون ربط مصدر منفصل. يصبح bucket عام أو مسار حافة موقّع مسار تنزيل سريعًا حيث تُخزَّن الملفات الشائعة مؤقتًا قرب المستخدمين ولا تصل إلى التخزين مرارًا. عند استبدال ملف بمفتاح قائم، يُنعش purge موجّه من اللوحة أو cdnctl الحافةَ كي لا يُقدَّم لأحد نسخة قديمة.

ربط التخزين بتطبيقات الحاويات

بدلًا من لصق بيانات الاعتماد في ملف Dockerfile أو إيداعها في مستودع، تربط bucket بتطبيق حاوية فتسلّم المنصة نقطة النهاية والمفاتيح كمتغيرات بيئة، اختياريًا تحت بادئة كي تبقى عدة buckets متمايزة. تقرأ شيفرتك أسماء بيئة قياسية وقت التشغيل، ولا تظهر الأسرار في الصورة أبدًا، وتدوير مفتاح يحدّث الربط بدلًا من فرض إعادة بناء. يبقي هذا فصل العوامل الاثني عشر للإعداد عن الشيفرة سليمًا.

النسخ الاحتياطية والبيانات الباردة

Object Storage موطن طبيعي لمخرجات قواعد البيانات ونسخ التطبيقات الاحتياطية والتصديرات الأرشيفية التي تريدها خارج الخادم الأساسي لكن مع القدرة على استعادتها بسرعة. ولأن الوصول قائم على المفاتيح ومحصور، يمكن لمهمة نسخ احتياطي أن تحمل مفتاحًا بأسلوب سير عمل للكتابة فقط منفصلًا عن مفاتيح تطبيقك الحيّ. مع كتابته نصًا برمجيًا عبر cdnctl في مهمة ليلية، تُشغَّل عمليات الرفع وتنظيف الاحتفاظ دون إشراف، وتُبقي حدّ استخدام على الـ bucket كي لا تنمو الأرشيفات دون أن يلاحظ أحد.

كيفية الإعداد خطوة بخطوة

1

أنشئ bucket

افتح Object Storage في اللوحة واختر إنشاء Bucket. امنحه اسمًا متوافقًا مع DNS (أحرف صغيرة وأرقام وشرطات)، وقرّر ما إذا كانت الكائنات خاصة افتراضيًا أم قابلة للقراءة علنًا. الخاص هو الخيار الصحيح للنسخ الاحتياطية والنسخ الأصلية التي ستوقّعها أو توكّلها؛ أما القراءة العامة فتلائم الأصول التي تنوي تقديمها مباشرة عبر CDN.

2

ولّد زوج access key

افتح تبويب Access Keys وولّد مفتاحًا. تحصل على access key ID وsecret key؛ يُعرض الـ secret مرة واحدة فقط، فانسخه إلى مدير الأسرار لديك فورًا. احصر المفتاح على الـ bucket الذي يحتاجه بدلًا من إعادة استخدام مفتاح رئيسي واحد عبر كل مشروع، ليمكن احتواء أي تسرّب بإبطال زوج واحد.

3

وجّه عميل S3 إلى نقطة النهاية

اضبط أي S3 SDK أو aws-cli على رابط نقطة نهاية cdn.com.tr المعروض في صفحة الـ bucket، مع عنونة بنمط المسار (path-style) وزوج مفاتيحك. مثال: aws --endpoint-url <endpoint> s3 cp ./poster.jpg s3://my-media/posters/. لا حاجة لعميل مخصص لأن الـ API يتحدث بروتوكول S3.

4

اربط الـ bucket بتطبيق حاوية

في تطبيق الحاوية اختر Bind Object Storage وحدّد الـ bucket. تحقن المنصة نقطة النهاية والمنطقة وaccess key والـ secret كمتغيرات بيئة (مع بادئة اختيارية مثل ASSETS_) فتقرؤها شيفرتك من البيئة بدلًا من ترميز بيانات الاعتماد داخل الصورة أو المستودع.

5

ضعه خلف CDN

اربط نطاقًا أو استخدم مسار الحافة للـ bucket بحيث تُقدَّم الكائنات من التخزين المؤقت في مواقع الحافة. اضبط ترويسات التخزين المؤقت عند الرفع، واستخدم purge من اللوحة أو cdnctl عند استبدال ملف بالمفتاح نفسه ليلتقط المشاهدون النسخة الجديدة.

6

اضبط الحدود وأتمتة عبر cdnctl

طبّق حدّ استخدام على الـ bucket للحماية من النمو الجامح، واكتب نصوصًا برمجية للمهام الروتينية عبر cdnctl بحيث تُشغَّل عمليات رفع النسخ الاحتياطية والتنظيف من CI دون فتح اللوحة. دوّر المفاتيح دوريًا من تبويب Access Keys نفسه.

أمثلة على السيناريوهات

كتالوج وسائط خلف CDN

يخزّن موقع تجارة إلكترونية كل صورة منتج ونسخة مرفوعة أصلية في bucket، ويقدّم المشتقات عبر CDN، ويُبقي حاويات التطبيق عديمة الحالة كي لا تمسّ عمليات النشر ملفات المستخدمين.

ملفات مرفوعة مشتركة عبر النسخ المتماثلة

يكتب تطبيق حاوية موسّع إلى عدة نسخ متماثلة ما يرفعه المستخدمون إلى bucket واحد، فتقرأ كل نسخة الملفات نفسها ولا يفقد حدث إعادة تشغيل أو توسّع أي بيانات.

نسخ احتياطية ليلية لقاعدة البيانات

تستخدم مهمة cron أو CI مفتاحًا محصورًا وcdnctl لدفع مخرجات قاعدة بيانات مضغوطة إلى bucket خاص كل ليلة، مع حدّ استخدام وتنظيف احتفاظ يُبقيان التكلفة قابلة للتنبؤ.

ترحيل تطبيق S3 قائم

يعيد فريق يستخدم AWS S3 أصلًا توجيه نقطة نهاية SDK ومفاتيحه إلى cdn.com.tr، ويستخدم rclone لنسخ الكائنات، ويُطلق دون إعادة كتابة شيفرة التخزين.

الأسئلة الشائعة

أي أدوات S3 وحِزَم SDK تعمل معها فعلًا؟

الشائعة منها: aws-cli، وboto3، وAWS SDK لجافاسكربت، وrclone، وs3cmd، ومشغّلات نظام ملفات S3 في Laravel وSymfony. اضبط رابط نقطة النهاية من صفحة الـ bucket، واستخدم عنونة بنمط المسار، وقدّم access key والـ secret. عمليات الرفع متعدد الأجزاء للكائنات الكبيرة مدعومة.

هل يمكنني تقديم ملفات الـ bucket مباشرة للجمهور عبر CDN؟

نعم. اجعل الـ bucket أو الكائن قابلًا للقراءة علنًا، أو استخدم مسار الحافة للـ bucket، واربط نطاقًا. تُخزَّن الكائنات عندئذ مؤقتًا في مواقع الحافة فتُقدَّم التنزيلات المتكررة من التخزين المؤقت بدلًا من الوصول إلى التخزين كل مرة.

ماذا يحدث عند استبدال ملف بالمفتاح نفسه؟

يأخذ التخزين الكائن الجديد فورًا، لكن قد تظل الحافة تحتفظ بالنسخة السابقة حتى انتهاء صلاحية تخزينها المؤقت. شغّل purge لذلك المسار من اللوحة أو عبر cdnctl مباشرة بعد الرفع ليحصل المشاهدون على الملف الجديد.

إن تسرّب access key، ماذا أفعل؟

أبطل ذلك الزوج من تبويب Access Keys وولّد آخر جديدًا. ولأنك ينبغي أن تحصر المفاتيح لكل bucket أو لكل تطبيق، فإن إبطال زوج واحد لا يعطّل خدماتك الأخرى. حدّث الربط أو مخزن الأسرار لديك بالـ secret الجديد.

هل عليّ ترميز بيانات الاعتماد داخل صورة الحاوية؟

لا، وينبغي ألا تفعل. اربط الـ bucket بتطبيق الحاوية فتصل نقطة النهاية والمنطقة وaccess key والـ secret كمتغيرات بيئة، اختياريًا تحت بادئة. تقرؤها شيفرتك وقت التشغيل، فتبقى الأسرار خارج الصورة والمستودع.

كيف أمنع التخزين من النمو بلا حدود؟

اضبط حدّ استخدام على الـ bucket كي لا يتضخّم دون أن يلاحظ أحد، ولأجل buckets النسخ الاحتياطي اكتب تنظيف احتفاظ نصيًا عبر cdnctl كي تُقلَّم المخرجات القديمة وفق جدول. تعرض اللوحة الاستخدام الحالي لكل bucket لتتابعه.