Loading...
حالة استخدام

حالة استخدام: هاجر تطبيق PHP قديماً بأمان

تميل تطبيقات PHP القديمة إلى العمل على إصدارات PHP منتهية الدعم، وقاعدة بيانات لا يريد أحد لمسها، وخادم يبعد عطل قرص واحد عن انقطاع. يقود هذا السيناريو تطبيقاً قديماً إلى بيئة تشغيل PHP 8 حديثة مع قاعدة بيانات مُدارة وأمن على الحافة، باستخدام staging و rollback كي لا تقامر الهجرة أبداً بالحركة الحية.

حالة استخدام: هاجر تطبيق PHP قديماً بأمان

المشكلة: PHP القديم انقطاع بطيء الحركة

عادةً ما يحمل تطبيق PHP قديم ثلاثة مخاطر دفعة واحدة: يعمل على إصدار PHP لم يعد يتلقى إصلاحات أمنية، ويتحدث مع قاعدة البيانات عبر امتدادات أزالها PHP الحديث، ويعيش على خادم واحد متقادم لا يجرؤ أحد على إعادة تشغيله. كل شهر يمر يجعله أكثر تعرضاً وأصعب نقلاً، لأن الذاكرة المؤسسية لكيفية عمله تتلاشى بينما ينمو سطح الهجوم. غريزة تركه وشأنه مفهومة وهي بالضبط ما يجعله خطراً — فكلما جلس أطول، كبرت الهجرة القسرية الحتمية. وُجد هذا السيناريو ليجعل الانتقال متعمَّداً وقابلاً للعكس بدلاً من طارئ.

كيف تحلها cdn.com.tr: بيئة تشغيل حديثة، بيانات مُدارة، درع على الحافة

تمنح منصة PHP التطبيق بيئة تشغيل PHP 8 مدعومة مع مدير ملفات لائق واختيار للإصدار، فلم تعد مقيَّداً بما كان مثبَّتاً على الصندوق القديم. تنقل قاعدة البيانات المُدارة البيانات عن ذلك الخادم الهش وتضعها على خدمة MySQL مُصانة مع بيانات اعتماد تُحقَن في بيئة التشغيل بدلاً من لصقها في ملفات التهيئة. أمام كليهما، تنهي طبقة الحافة TLS عبر Auto SSL وتصفّي الحركة بالـ WAF، فحتى الشيفرة التي تسبق ممارسات الأمن الحديثة لا تُعرَّض مباشرة للإنترنت. تحدّث بيئة التشغيل وطبقة البيانات بينما تغلّف الأمر كله بحماية لم يمتلكها التطبيق الأصلي قط.

توافق PHP 8: العمل الذي يحكم الانتقال فعلاً

تقف الهجرة أو تسقط على توافق الشيفرة، فهنا يذهب الجهد الحقيقي. تستخدم التطبيقات القديمة عادةً دوالّ mysql_* المحذوفة، أو تعتمد على دوالّ حُذفت أو تغيرت في PHP 7 و 8، أو تفترض تلاعباً فضفاضاً بالأنواع شدّده PHP 8، أو تعتمد على امتدادات لم تعد مضمَّنة. تشغيل التطبيق على نسخة staging من بيئة التشغيل الجديدة يظهر هذه المشكلات كأخطاء ملموسة بدلاً من مفاجآت في الإنتاج. تصلحها منهجياً — استبدل mysql_* بـ mysqli أو PDO، واستبدل الدوالّ المحذوفة، وعالج التحذيرات — وأعد الاختبار حتى تكون المسارات الحرجة نظيفة. عندها فقط يصبح الانتقال إلى الإنتاج خطوة روتينية بدلاً من قفزة إيمان.

هجرة قاعدة البيانات دون إفساد بياناتك

نقل البيانات هو حيث يحدث الضرر الصامت إن تسرّعت. أشيع فخ هو ترميز المحارف: كثير من قواعد البيانات القديمة يكون latin1 أو خليطاً، واستيرادها إلى هدف utf8mb4 دون عناية يحوّل الأحرف التركية وغيرها من النصوص غير ASCII إلى رطانة (mojibake) يصعب عكسها لاحقاً. المسار الآمن هو الاستيراد إلى MySQL المُدارة، ومطابقة مجموعة محارف المصدر وترتيبه صراحة، والتحقق من عينة من السجلات الحقيقية — خاصة أي شيء بنص مُشكَّل أو غير لاتيني — قبل الوثوق بالنتيجة. تتحقق من دورة القراءة/الكتابة الكاملة على staging كي تكون قاعدة البيانات وقت التحويل نسخة معروفة السلامة، لا نسخة مأمولة.

staging و rollback: لا تقامر أبداً بالحركة الحية

الانضباط الذي يجعل هجرة تطبيق قديم آمنة هو أن الإنتاج يظل يعمل دون مساس حتى تثبت البيئة الجديدة نفسها. تبني وتختبر كل شيء على staging، وتبقي الخادم القديم حياً ويقدم الخدمة حتى بعد التحويل. خفض TTL لـ DNS مسبقاً يعني أن التبديل إلى الحافة — والتبديل عائداً، إن لزم — يستغرق دقائق لا ساعات. إذا انكسر شيء تحت حركة حقيقية لم يكشفه staging، ترجع DNS إلى الخادم القديم، وتصلح المشكلة على staging، وتحاول مجدداً. ولأن لا شيء من البيئة القديمة دُمِّر أثناء الانتقال، يكون rollback خياراً حقيقياً لا خدعة.

اختياري: وحّد عمليات النشر المستقبلية مع GitHub

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

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

1

احصر التطبيق واختر بيئة تشغيل هدفاً

افهرس إصدار PHP والامتدادات ومهام cron ومسارات الملفات التي يعتمد عليها التطبيق، ثم أنشئ تطبيق منصة PHP يستهدف بيئة تشغيل PHP 8 مدعومة. لاحظ أي شيء يستخدم دوالّ محذوفة أو امتدادات MySQL قديمة كي تعرف التغييرات البرمجية القادمة قبل أن تلمس الإنتاج.

2

أقم نسخة staging

انشر الشيفرة إلى المنصة كبيئة staging واستورد نسخة من قاعدة البيانات، كي تختبر التطبيق على بيئة التشغيل الجديدة دون أي حركة حية. ادفع الشيفرة إما عبر GitHub Deploy أو مدير الملفات، وأبقِ هذه البيئة حتى تثبت الهجرة.

3

هاجر قاعدة البيانات إلى MySQL المُدارة

أنشئ قاعدة بيانات مُدارة، واستورد نسختك (dump)، وتأكد من مطابقة مجموعة المحارف والترتيب (collation) للأصل (تطبيقات قديمة كثيرة تكون latin1 أو ترميزاً مختلطاً). وجّه التطبيق إلى قاعدة البيانات المُدارة باستخدام بيانات الاعتماد التي توفرها المنصة بدلاً من ترميزها بشكل ثابت، وتحقق من القراءات والكتابات على staging.

4

أصلح التوافق وأعد الاختبار على staging

اعمل على مشكلات PHP 8 التي ظهرت في staging — الدوالّ المهملة، والانتقال من mysql_* إلى mysqli/PDO، ومعالجة الأنواع الأكثر صرامة — حتى يعمل التطبيق نظيفاً. اختبر المسارات الحرجة (تسجيل الدخول، النماذج، الإدارة، المدفوعات) من طرف إلى طرف على عنوان staging قبل أن يتحدث أحد عن الانتقال إلى الإنتاج.

5

اربط النطاق و Auto SSL و WAF

أحضر النطاق إلى حساب CDN، ودع Auto SSL يجهّز الشهادة، وفعّل الـ WAF كي تُحمى الشيفرة القديمة لحظة مواجهتها الإنترنت العام. أبقِ الأصل قابلاً للوصول عبر الحافة فقط كي لا يُعرَّض خادم التطبيق مباشرة أبداً.

6

حوّل DNS مع rollback جاهز

بدّل DNS إلى الحافة خلال نافذة هادئة مع TTL منخفض مضبوط مسبقاً، كي تتمكن من الرجوع بسرعة إن ظهرت مشكلة. أبقِ الخادم القديم يعمل دون مساس حتى تثبت البيئة الجديدة نفسها تحت حركة حقيقية، ثم أوقفه.

سيناريوهات مثال

منتدى قديم أو بوابة مجتمع

يُنقَل منتدى طويل العمر على PHP منتهي الدعم إلى PHP 8 و MySQL مُدارة، مع تخزين أقسام الأرشيف كثيرة القراءة على الحافة و WAF يُضعف إساءة استخدام البوتات.

نظام CMS مخصص لا أحد يريد إعادة كتابته

يُرفَع نظام CMS مخصص بلغة PHP على بيئة التشغيل الحديثة كما هو بعد إصلاحات التوافق، ما يشتري سنوات من التشغيل الآمن دون إعادة كتابة كاملة.

تطبيق أعمال داخلي على خادم يحتضر

تُهاجَر أداة أعمال بلغة PHP تعمل على صندوق واحد متقادم إلى بيئة تشغيل وقاعدة بيانات مُدارتين، ما يزيل نقطة الفشل الوحيدة التي أبقت الجميع متوترين.

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

تطبيقي يستخدم دوالّ mysql_* القديمة. هل سيعمل على PHP 8؟

ليس كما هو — فقد أُزيلت تلك الدوالّ منذ سنوات. تتضمن الهجرة استبدالها بـ mysqli أو PDO، وهو بالضبط نوع المشكلة التي يظهرها staging كأخطاء واضحة كي تصلحها قبل الانتقال إلى الإنتاج بدلاً من اكتشافها في الإنتاج.

كيف أتجنب تشويه الأحرف التركية أثناء نقل قاعدة البيانات؟

طابِق مجموعة محارف المصدر وترتيبه صراحة عند الاستيراد إلى MySQL المُدارة، وتحقق من سجلات عينة تحتوي نصاً مُشكَّلاً أو غير لاتيني على staging. عدم تطابق الترميز هو أشيع فشل صامت في هجرات التطبيقات القديمة، لذا تتحقق منه قبل التحويل، لا بعده.

هل يمكنني اختبار كل شيء قبل لمس الموقع الحي؟

نعم، هذا جوهر النهج. تشغّل نسخة staging كاملة على بيئة التشغيل الجديدة مع نسخة من قاعدة البيانات، وتثبت المسارات الحرجة، وعندها فقط تنقل DNS. يظل الإنتاج يعمل على الخادم القديم طوال الوقت.

ماذا لو انكسر شيء مباشرة بعد التحويل؟

ترجع DNS إلى الخادم القديم، الذي لا يزال يعمل دون مساس، ثم تصلح المشكلة على staging وتعيد المحاولة. ضبط TTL منخفض لـ DNS قبل التحويل يبقي ذلك الـ rollback في حدود دقائق.

هل عليّ ترقية كل شيفرتي دفعة واحدة؟

تحتاج إلى ما يكفي من عمل التوافق كي يعمل التطبيق نظيفاً على بيئة تشغيل PHP 8 الهدف، لكن لست مضطراً لإعادة كتابة التطبيق. تنتقل تطبيقات قديمة كثيرة بمجموعة مركّزة من الإصلاحات؛ ويمكن أن تحدث إعادة هيكلة أكبر لاحقاً بمجرد وجود التطبيق بأمان على المنصة.

هل شيفرتي القديمة آمنة بمجرد تعرّضها للإنترنت مجدداً؟

يجلس الـ WAF على الحافة و Auto SSL أمام التطبيق، يصفّيان حركة الهجوم الشائعة ويفرضان HTTPS قبل أن تصل الطلبات إلى الأصل. مع إبقاء خادم التطبيق قابلاً للوصول عبر الحافة فقط، يمنح هذا الشيفرة القديمة حماية لم تمتلكها قط على خادمها القديم.