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

ماذا يعني "تسليم جاهز للإنتاج" عملياً
تسليم جاهز للإنتاج يعني أن فريق العمليات يستطيع تشغيل التطبيق دون تخمين. يمكنهم نشر إصدار معروف، التأكد من صحّته، الرد على التنبيهات، والتعافي من إصدار سيئ أو انقطاع. إذا أيّ من ذلك يعتمد على ذاكرة مطور واحد، فالتسليم غير مكتمل.
عامل التسليم كحزمة تجيب عن سؤال واحد: إذا اختفى البنّاؤون لأسبوع، هل يمكن لفريق العمليات الحفاظ على أمان وتوافر النظام؟
حزمة جيدة تغطي عادة ما يفعله التطبيق، ما معنى "الصحة"، كيف تعمل الإصدارات (نشر، تحقق، تراجع)، أين توجد الإعدادات، كيف تُدار الأسرار، وكيف تراقب النسخ الاحتياطية وتستجيب للحوادث.
بنفس الأهمية ما الذي لا تغطيه الحزمة. التسليم ليس وعداً بإضافة ميزات، إعادة هيكلة، إعادة تصميم الشاشات، أو "تنظيف الأمور لاحقاً". هذه مشاريع منفصلة بنطاق خاص.
قبل أن تعتبره مكتملًا، اتفق على الملكية وأزمنة الاستجابة. على سبيل المثال: العمليات تملك وقت التشغيل وتنفّذ النشر؛ فريق المنتج يملك خارطة الطريق؛ فريق التطوير يقدّم فترة دعم محددة بعد التسليم للإصلاحات والأسئلة.
أنشئ جرد نظام بسيط (ما يعمل أين)
يمكن للفريق أن يملك فقط ما يستطيع رؤيته. جرد صفحة واحدة بسيط يمنع التخمين أثناء النشر والحوادث والتدقيق. اجعل المحتوى بلغة بسيطة ومحددة.
سجّل كل جزء يعمل من النظام وأين يعيش: واجهة برمجة التطبيقات الخلفية، تطبيق الويب، العمال الخلفيون، المهام المجدولة، وكيف تتصل تطبيقات الجوال. حتى لو تم توزيع iOS/Android عبر المتاجر، فهي تعتمد على نفس الخلفية.
ضمّن الخدمات الخارجية التي لا يمكن للتطبيق العمل بدونها. إذا كنت تستخدم PostgreSQL، طابور رسائل، تخزين كائنات، أو واجهات طرف ثالث (مدفوعات مثل Stripe، الرسائل، البريد الإلكتروني/SMS، Telegram)، فاكتب اسم الخدمة بالضبط وما تُستخدم له.
التقط متطلبات الشبكة حتى لا تتحول الاستضافة إلى تجربة وخطأ: النطاقات المطلوبة (app، api، admin)، المنافذ والبروتوكولات، من يجدد شهادات TLS، أين تُدار DNS، وأي قوائم سماح دخول/خروج.
أخيراً، اكتب العبء المتوقع بأرقام حقيقية: ذروة الطلبات في الدقيقة، المستخدمون النشطون، أحجام الحمولة النموذجية، حجم قاعدة البيانات الحالي، والنمو المتوقع. حتى النطاقات التقريبية تساعد العمليات في ضبط الحدود والتنبيهات.
إذا بنيت باستخدام AppMaster، قم بجرد الخلفية المولَّدة، تطبيق الويب، والتكاملات حتى يعرف فريق العمليات ما يجب نشره معاً.
جهز إعدادات البيئات كحزمة (بدون كشف الأسرار)
الإعدادات في الإنتاج عادةً ما تفشل في الجزء الممل: الإعداد الذي يعيش فقط في رأس شخص ما. عامل الإعداد كمخرَج قابل للتسليم. يجب أن يستطيع العمليات رؤية الإعدادات الموجودة، ما يختلف بين البيئات، وكيفية تغييرها بأمان.
ابدأ بتسمية كل بيئة موجودة اليوم، حتى لو بدت مؤقتة. معظم الفرق لديها dev وstaging وproduction، بالإضافة إلى نسخ مثل "production-eu" أو "staging-us". اذكر أي بيئة تُستخدم لاختبار الإصدارات، هجرات البيانات، وتمارين الحوادث.
قدّم مرجع إعداد واحد يسرد أسماء المتغيرات وقيم أمثلة آمنة (لا تُدرج بيانات اعتماد حقيقية). اجعل أماكن الحشو واضحة.
يجب أن تتضمن حزمة التسليم:
- قائمة بالبيئات وما الغرض من كل منها
- مرجع مفاتيح الإعداد (متغيرات البيئة أو مفاتيح ملفات الإعداد)، النوع المتوقع، وقيمة مثال غير سرّية
- الفروقات المعروفة بين البيئات (أعلام الميزات، حدود المعدل، أحجام الكاش، وضع البريد الإلكتروني، مستوى السجل)
- القيم الافتراضية وما يحدث إذا افتقد مفتاح
- أين يُخزن الإعداد وكيف يُطبق أثناء النشر
أضف عملية تغيير بسيطة. على سبيل المثال: طلب في تذكرة، مراجعة من مالك الخدمة، تطبيق في staging أولاً، ثم ترقية إلى production في نافذة مجدولة مع خطة تراجع إذا ارتفعت معدلات الخطأ.
إذا كنت تصدّر وتستضيف تطبيق AppMaster بنفسك، التزم بنفس القاعدة: أرسل مجموعة نظيفة وموثقة من مفاتيح الإعداد مع الشيفرة المولّدة حتى يتمكن فريق العمليات من تشغيلها بثبات عبر البيئات.
الأسرار وبيانات الاعتماد: التخزين، التدوير، والوصول
الأسرار هي أسرع طريقة لتحويل تسليم نظيف إلى حادث أمني. الهدف واضح: يجب أن يعرف العمليات كل سر يحتاجه التطبيق، أين يُخزن، من يستطيع قراءته، وكيف يغيّره دون توقف النظام.
ابدأ بقائمة أسرار قصيرة يمكن للعمليات مسحها خلال دقيقة. لكل عنصر، اذكر ماذا يفتح (قاعدة البيانات، SMTP، Stripe، مفتاح توقيع JWT)، أين يعيش (vault، مخزن أسرار سحابي، Kubernetes Secret، ملف مشفّر)، ومن يملك عملية التدوير.
اكتب خطوات التدوير كالوصفة وليس كسياسة. أدرج الترتيب الدقيق، كم من الوقت يجب أن يبقى السر القديم سارياً، والفحص الواحد الذي يثبت نجاح العملية.
قائمة التدوير (مثال)
استخدم هذا النمط لكل سر:
- أنشئ قيمة السر الجديدة وخزنها في مدير الأسرار المعتمد.
- نفّذ تغيير الإعداد بحيث يستخدم التطبيق القيمة الجديدة.
- تحقق: تسجيلات الدخول، المدفوعات، أو مكالمات API تنجح ومعدلات الأخطاء طبيعية.
- اسحب صلاحية السر القديم وتأكد أنه لم يعد يعمل.
- سجّل تاريخ التدوير، من فعله، وتاريخ الاستحقاق القادم.
كن واضحاً بشأن توقعات التشفير. يجب أن تكون الأسرار مشفّرة في الراحة في مخزن الأسرار ومحميّة أثناء النقل (TLS) بين التطبيق واعتمادياته. لا تضع الأسرار في التحكم بالمصدر، أو في نواتج البناء، أو في مستندات مشتركة.
حدّد وصول الطوارئ (break-glass). إذا حال انقطاع دون الوصول الطبيعي، بين من يمكنه الموافقة على الوصول الطارئ، كم يدوم، وما يجب تدقيقه لاحقاً.
حزمة النشر: النواتج، الإصدارات، والتراجع
يمكن للعمليات أن تملك فقط ما يمكنهم إعادة إنتاجه. حزمة نشر جيدة تُسهّل الإجابة عن ثلاث أسئلة: ماذا نشغّل بالضبط، كيف نعيد نشره، وكيف نعود بسرعة إذا تعطل شيء؟
ضمّن "فاتورة المواد" للبناء بوضوح. سمّ نوع الناتج وكيفية التحقق منه، لا تذكر فقط أين يعيش:
- تفاصيل الناتج: اسم/وسم صورة الحاوية (أو اسم الثنائي/الحزمة)، إصدار التطبيق، تاريخ البناء، checksum
- مرجع المصدر: وسم الإصدار أو هاش الالتزام المستخدم للبناء، بالإضافة إلى أي أعلام بناء مهمة
- الأهداف المدعومة: VM، حاويات (Docker)، أو Kubernetes، وأي واحد هو الافتراضي الموصى به
- خطوات النشر: المتطلبات (وقت التشغيل، قاعدة البيانات، التخزين)، الترتيب الدقيق، وزمن النشر النموذجي
- هجرات قاعدة البيانات: كيف تعمل (تلقائياً عند البدء أم يدوياً)، أين السجلات، وكيف تؤكد النجاح
أضف مثالًا صغيرًا وملموسًا. على سبيل المثال: "انشر v1.8.2 بتحديث وسم الصورة، تشغيل الهجرات، ثم إعادة تشغيل العمال. إذا فشلت فحوصات الصحة خلال 10 دقائق، ارجع إلى v1.8.1 وأوقف مهمة الهجرة."
التراجع، بدون تخمين
خطة التراجع يجب أن تقرأ كتعليمات يمكنك اتباعها في الثانية صباحاً. يجب أن تحدد:
- الإشارة التي تفعّل التراجع (معدل خطأ، فشل فحص الصحة، تسجيل دخول معطّل)
- آخر إصدار صالح معروف وأين مخزن
- ما إذا كانت تغييرات قاعدة البيانات قابلة للعكس، وماذا تفعل إذا لم تكن
إذا بُني التطبيق باستخدام AppMaster وصُدِّر كشيفرة لاستضافة ذاتية، أدرج نسخة الشيفرة المولَّدة، تعليمات البناء، وتوقّعات وقت التشغيل حتى يتمكن الفريق من إعادة بناء نفس الإصدار لاحقاً.
المراقبة والتنبيه: ما الذي نقيسه ومتى يتم الاتصال
التسليم ليس كاملاً حتى يرى العمليات ما يفعله التطبيق ويحصل على تحذير قبل أن يشتكي المستخدمون.
اتفق على السجلات التي يجب أن تتوفر وأين تهبط (ملف، syslog، منصة سجلات). تأكد أن السجلات متزامنة زمنياً وتحتوي على معرّف طلب أو معرّف ارتباط حتى تكون الحوادث قابلة للتتبع نهاية لنهاية.
عادةً تريد سجلات التطبيق (الأحداث الرئيسية والأخطاء)، سجلات الأخطاء (stack traces والوظائف الفاشلة)، سجلات الوصول (الطلبات وحالات الاستجابة)، سجلات التدقيق (إجراءات المسؤول وتصدير البيانات)، وسجلات البنية التحتية (إعادة التشغيل، ضغط العقد، مشاكل القرص).
بعدها، عرّف مجموعة صغيرة من المقاييس التي تعكس تأثير المستخدم وصحة النظام. لو اخترت خمسة فقط: الكمون (p95/p99)، معدل الأخطاء، التشبع (CPU/ذاكرة/قرص)، عمق الطابور، وفحوصات التوافر من خارج شبكتك.
قواعد التنبيه يجب أن تكون غير غامضة: ماذا يفعّلها، الشدة (استدعاء مقابل تذكرة)، من هو المتواصل على الخط، ومتى يتم التصعيد. أضف لقطة dashboard "الجيد المعروف" وملاحظة قصيرة تصف ما هو الطبيعي (نطاق الكمون النموذجي، معدل الأخطاء المتوقع، عمق الطوابير المعتاد). هذا السياق يمنع التنبيهات المزعجة ويساعد المستجيبين الجدد على التصرف بسرعة.
النسخ الاحتياطية والاسترداد: اجعل الاستعادة قابلة للتكرار
النسخ الاحتياطية ليست شيئًا "تمتلكه" فقط. هي شيء يمكنك الاستعادة منه عند الطلب.
اكتب النطاق الدقيق: قاعدة البيانات، تخزين الملفات (التحميلات، التقارير، الفواتير)، والأجزاء التي ينسى الناس عادةً، مثل الإعدادات التي ليست في الشيفرة ومفاتيح التشفير المطلوبة لقراءة البيانات المحمية.
احتفظ بالأهداف بمصطلحات بسيطة. RPO هو مقدار البيانات التي يمكنك خسارتها (مثلاً 15 دقيقة). RTO هو المدة التي يمكنك أن تكون فيها متوقفاً (مثلاً ساعة واحدة). اختر أرقاماً تتفق عليها الأعمال لأنها تحدد التكلفة والجهد.
ضمّن:
- ما الذي يُؤخذ نسخة احتياطية منه، أين يُخزن، وفترة الاحتفاظ
- من يمكنه تشغيل النسخ والاسماء، وكيف يُوافق على الوصول
- إجراء استرجاع خطوة بخطوة مع فحوصات تحقق
- أين سجلات الاسترجاع، وما الذي يعني "نجاح"
- أوضاع الفشل الشائعة (مفتاح خاطئ، دلو مفقود، عدم تطابق المخطط) والحل
إذا صدّرت واستضفت تطبيقاً مبنياً بـ AppMaster، أدرج خطوات استعادة PostgreSQL وأي دلاء تخزين خارجية والمفاتيح المستخدمة للحقول المشفّرة.
جدول تجربة استرجاع. سجّل الوقت، ما الذي تعطّل، وما الذي غيّرته حتى تكون الاستعادة القادمة أسرع وأقل توتراً.
كتب التشغيل والنداء الوردي: كيف يتعامل العمليات مع الحوادث الحقيقية
التسليم ليس حقيقياً حتى يُنادى شخص ما في الثانية صباحاً ويصلح المشكلة دون تخمين. كتب التشغيل تحول المعرفة القبلية إلى خطوات يمكن لفرد على الاستدعاء اتباعها.
ابدأ بالحوادث التي تتوقع حدوثها أولاً: انقطاع كامل، بطء الطلبات، ونشر يكسر شيئاً. اجعل كل كتاب تشغيل قصيراً. ضع الفحوصات الأسرع في الأعلى حتى يحصل المستجيب على إشارة خلال دقائق.
ما الذي يحتويه كتاب تشغيل جيد
حافظ على بنية متناسقة لتكون قابلة للمسح تحت الضغط:
- ما يراه المستخدمون وكيف تؤكد ذلك (مثال: معدل أخطاء أعلى من X%، فشل إتمام الدفع)
- الفحوصات الأولى (حالة الخدمة، نشر حديث، صحة التبعيات، حالة القرص/CPU، اتصالات قاعدة البيانات)
- الفحوصات التالية (أي سجلات تفتح، لوحات المراقبة المفتاحية، تغييرات الإعداد الأخيرة، عمق الطوابير)
- نقاط القرار (متى تتراجع، متى توفّر سعات إضافية، متى تعطّل ميزة)
- التصعيد (من يملك التطبيق، من يملك البنية التحتية، ومتى يتم مناداتهم)
إذا تم تصدير التطبيق أو استضافته ذاتياً من AppMaster، أدرج أين تعمل الخدمات المولّدة، كيفية إعادة تشغيلها بأمان، وأي قيم إعداد متوقعة لكل بيئة.
بعد الحادث: التقط الحقائق الصحيحة
احتفظ بقائمة فحص ما بعد الحادث قصيرة. سجّل الجدول الزمني، ما تغيّر أخيراً، رسائل الخطأ الدقيقة، المستخدمين المتأثرين، وما العمل الذي أصلح المشكلة. ثم حدّث كتاب التشغيل بينما لا تزال التفاصيل طازجة.
التحكم في الوصول والأذونات: من يمكنه فعل ماذا
يمكن للعمليات أن يملِك النظام فقط إذا كان واضحاً من يمكنه لمس ماذا، وكيف يُتتبّع الوصول.
اكتب الأدوار التي تستخدمها فعلاً. للعديد من الفرق، هذه كافية:
- منفّذ النشر: ينشر الإصدارات المعتمدة ويبدأ التراجع
- مسؤول قاعدة البيانات: يُجري تغييرات المخطط ويستعيد النسخ
- عارض فقط: يشاهد لوحات التحكم، السجلات، والإعدادات دون تعديل
- قائد الحادث: يوافق الإجراءات الطارئة أثناء الانقطاع
وثّق «سياسة الباب» بخطوات بسيطة: من يمنح الوصول، أين يُمنح (SSO، IAM السحابي، مستخدمي قاعدة البيانات، CI/CD، لوحات الإدارة)، من يسحبه، وكيف تؤكد أنه أُزيل أثناء إيقاف الخدمة عن موظف.
لا تنسَ الوصول غير البشري. أدرج كل حساب خدمة ورمز يُستخدم بواسطة المهام، التكاملات، والمراقبة، مع ملاحظة أقل امتياز لكلٍ (مثال: "يمكنه القراءة من الدلو X فقط"). إذا صدّرت شيفرة AppMaster للاستضافة الذاتية، أدرج أي متغيرات بيئة أو ملفات إعداد تعرف هذه الهويات، لكن لا تضع قيم الأسرار في وثيقة التسليم.
حدد أيضاً توقعات سجلات التدقيق: ما الذي يجب تسجيله (تسجيل الدخول، النشر، تغيير الإعداد، إجراءات مسؤول قاعدة البيانات)، من يمكنه قراءة السجلات، الاحتفاظ، وأين تُخزّن السجلات، وكيف تطلبها أثناء حادث أو مراجعة.
أساسيات الأمان والامتثال (بلغة بسيطة)
ملاحظات الأمان يجب أن تكون قابلة للقراءة من غير المتخصّصين، لكنها محددة بما يكفي ليتمكن العمليات من التصرف. أضف ملخص صفحة واحدة يجيب: ما البيانات التي نخزنها، أين تعيش، ومن يمكنه الوصول إليها؟
ابدأ بأنواع البيانات: ملفات تعريف العملاء، تذاكر الدعم، بيانات المدفوعات الوصفية، الملفات. اذكر الفئات الحساسة مثل البيانات الشخصية (PII: الأسماء، الإيميلات، أرقام الهواتف)، بيانات الاعتماد، وأي بيانات مُنظَّمة تهم الشركة. إذا صدّرت الشيفرة للاستضافة الذاتية (بما في ذلك من AppMaster)، اذكر أين تنتهي هذه البيانات في قاعدة البيانات وأي خدمات تقرأها.
ثم اكتب قواعد الاحتفاظ والحذف بمصطلحات عملية. قل ما تحتفظ به، كم من الوقت، وكيف يعمل الحذف (حذف ناعم مقابل حذف نهائي، الحذف المؤجّل، النسخ الاحتياطية). إذا كانت هناك حاجات قانونية أو تسجيلات، اذكر من يوافق الاستثناءات.
غالباً ما تتسرّب السجلات أكثر من قواعد البيانات. كن واضحاً أين قد تظهر PII (سجلات الوصول، سجلات الأخطاء، أحداث التحليلات) وكيف تقللها أو تغمّشها. إذا حقل يجب ألا يُسجل أبداً، اذكر تلك القاعدة.
اجعل الموافقات صريحة:
- تغييرات المصادقة تحتاج إلى موافق مسمّى.
- تغييرات متعلقة بالمدفوعات (مفاتيح Stripe، نقاط نهاية الويبهوك، منطق الاسترداد) تحتاج إلى موافق مسمّى.
- تغييرات نموذج الأدوار والصلاحيات تحتاج إلى موافق مسمّى.
- نوافذ تحديث الأمان وقواعد التغيير الطارئ مكتوبة.
إذا أنك تستطيع إضافة شيء واحد فقط، أضف ملاحظة أدلة: أين تُحفظ سجلات التدقيق وكيف تُصدّر عندما يطلب أحد الدليل.
سيناريو تسليم نموذجي: العمليات تتولّى الملكية خلال أسبوع
تتولّى العمليات بوابة عملاء بناها فريق صغير وتُنقل إلى بنية تحتية جديدة مستضافة ذاتياً. الهدف ليس فقط "أن تعمل"، بل أن "العمليات يمكنها تشغيلها دون منادات البنّائين".
كيف يبدو الأسبوع
اليوم 1: العمليات تقوم بنشر أول نظيف في بيئة جديدة باستخدام حزمة التسليم فقط. التطبيق يعمل، لكن تسجيل الدخول يفشل لأن متغير بيئة لمزود البريد مفقود. يُضاف ذلك إلى قالب البيئات، ويُعاد النشر حتى يعمل التطبيق من الصفر.
اليوم 2: يُطلق أول تنبيه عن قصد. العمليات تُجري فشلًا مسيطراً (توقّف خدمة أو منع البريد الصادر) وتؤكد: المقاييس تُظهر المشكلة، التنبيهات تصل إلى القناة الصحيحة، والرسالة تشرح الإجراء التالي.
اليوم 3: تنتهي صلاحية رمز في بيئة الدفع التجريبية. لأن موقع بيانات الاعتماد وخطوات التدوير موثّقة، يستبدل العمليات الرمز دون تخمين أو كشف أسرار.
اليوم 4: قص DNS. سجل خاطئ يشير إلى IP قديم، والبوابة تبدو متوقفة لبعض المستخدمين. تستخدم العمليات كتاب التشغيل للتحقق من DNS، TLS، وفحوصات الصحة بالترتيب الصحيح.
اليوم 5: أول اختبار استعادة للنسخة الاحتياطية. تستعيد العمليات إلى قاعدة بيانات جديدة وتثبت أن البوابة تستطيع تحميل بيانات حقيقية.
كيف يبدو "المكتمل" بعد أسبوع
التطبيق اشتغل لمدة 7 أيام دون إصلاحات غامضة، استرجاع واحد ناجح، تنبيهات واضحة، ونشر متكرر يمكن للعمليات تنفيذه بمفردهم.
أخطاء شائعة في التسليم تسبب حوادث ليلاً
أسرع طريقة لتحويل تسليم هادئ إلى حريق الساعة 2 صباحاً هي افتراض أن "أخبرنا العمليات بكل شيء" يعني "يمكن للعمليات تشغيله بدوننا".
أنماط الفشل الشائعة بعد تسليم للاستضافة الذاتية تشمل أسرار مشتركة في جداول أو محادثات، تراجعات تعتمد على مطوّر، نسخ احتياطية موجودة لكن لم تُختبر الاستعادة، تنبيهات تصدر طوال اليوم لأن العتبات لم تُضبَط، وتفاصيل البيئة التي تعيش فقط في رأس شخص ما (المنافذ، أسماء DNS، جداول cron، أذونات السحابة).
مثال: تصدّر شيفرة المصدر من AppMaster للاستضافة الذاتية، والنشر الأول يعمل. بعد أسبوعين يكسر تغيير إعداد تسجيلات الدخول. إذا كانت الأسرار ممرّرة في دردشة والتراجع يحتاج البنّاء الأصلي، يضيع الوقت في إرجاع الحالة السابقة.
فحوصات سريعة قبل أن تقول "التسليم مكتمل"
قبل إغلاق التذكرة، اجري تجربة بدء من جديد قصيرة. أعطِ حزمة التسليم إلى مهندس عمليات واحد وبيئة نظيفة (VM جديد، مساحة Kubernetes جديدة، أو مشروع سحابي فارغ). إذا استطاعوا النشر والمراقبة واستعادة التطبيق ضمن زمن محدد (مثلاً ساعتان)، فأنت قريب من الاكتمال.
استخدم هذه الفحوصات:
- أعد البناء والنشر من الصفر باستخدام النواتج المعبأة، مستندات الإعداد، وكتب التشغيل فقط (بما في ذلك التراجع).
- تحقق أن كل سر موجود في المكان المتفق عليه، وأن خطوات التدوير مكتوبة ومجربة.
- افتح لوحات التحكم وتأكد أنها تجيب على الأسئلة الأساسية: هل يعمل، هل هو بطيء، هل يُخطئ، هل ينفد من الموارد؟
- فعّل اختبار تنبيه آمن للتأكد من توجيه الاستدعاءات، المالكين، وساعات الهدوء.
- أجرِ اختبار استعادة حقيقي في بيئة منفصلة، ثم وثّق الخطوات والنتيجة المتوقعة.
إذا كنت تصدّر شيفرة مولّدة للاستضافة الذاتية، تأكد أيضاً أن العمليات تعرف أين تُسجّل مدخلات البناء، الإصدارات، ووسوم الإصدارات حتى تظل الإصدارات المستقبلية قابلة لإعادة الإنتاج.
الخطوات التالية: نهِ الملكية وابقَ على تحديث الحزمة
أجرِ عرضاً نهائياً مع الأشخاص الذين سيحمِلون جرس المناداة. عاملها كتدريب. أثبت أن النشر، التراجع، الاسترجاع، والتنبيهات تعمل جميعها باستخدام الحزمة الدقيقة التي تُسلّم.
العرض النهائي يغطي عادة: النشر على بيئة اختبار ثم الإنتاج بالخطوات نفسها، التراجع للإصدار السابق والتحقق من استمرار عمل التطبيق، الاستعادة من النسخ الاحتياطية في بيئة نظيفة والتحقق من فحص بسيط حقيقي (تسجيل دخول، إنشاء سجل، إرسال رسالة)، تفعيل اختبار تنبيه آمن، والتأكد من مكان العثور على السجلات ولوحات التحكم أثناء الحادث.
اجعل الملكية صريحة. عيّن مالكاً مسمَّى لكل كتاب تشغيل (نشر، حادث، استرجاع) ولكل طريق تنبيه (المستدعى الأساسي، البديل، سلوك ما بعد ساعات العمل). إذا لم يملك أحد تنبيهاً، فإما يتجاهل أو يوقظ الشخص الخطأ.
اكتب خطة Day 2 قصيرة حتى يعرف العمليات ما الذي يحسّنه بعد الأسبوع الأول: ضبط العتبات، مراجعة التكاليف، تنظيف النواتج القديمة، ومراجعة الوصول. اجعلها صغيرة ومحددة زمنياً.
إذا بنيت باستخدام AppMaster (appmaster.io)، أدرج الشيفرة المصدرية المصدّرة أو تفاصيل هدف النشر الدقيقة (السحابة، المناطق، إعدادات البناء، الخدمات المطلوبة) حتى يستطيع العمليات إعادة إنتاج التطبيق دون الاعتماد على مساحة مشروع البنائين الأصلية. اضبط وتيرة بسيطة لتحديث الحزمة كلما تغيّرت المتطلبات، حتى لا تنحرف كتب التشغيل عن الواقع.
الأسئلة الشائعة
تسليم جاهز للإنتاج يعني أن فريق العمليات يستطيع نشر إصدار معروف، التأكد من صحّته، الاستجابة للتنبيهات، والتعافي من الأعطال دون الاعتماد على ذاكرة مطور معين. إذا اختفاء البنائين لمدة أسبوع سيعرض وقت التشغيل للخطر، فالتسليم غير مكتمل.
ابدأ بصفحة واحدة تحتوي على كل المكوّنات العاملة ومكان تشغيلها: API، تطبيق الويب، العمال الخلفيون، المهام المجدولة، قاعدة البيانات، التخزين، والخدمات الخارجية المطلوبة. أضف النطاقات، المنافذ، من يملك DNS/TLS، وحِمل التقريبي حتى يعمل فريق العمليات دون تخمين.
قدّم مرجع إعداد واحد يسرد كل مفتاح إعداد، نوعه، وقيمة مثال آمنة، بالإضافة إلى الفروقات بين dev/staging/prod. اترك بيانات الاعتماد الحقيقية خارج هذا المرجع، ووثق أين يخزن الإعداد وكيف يُطبَّق أثناء النشر ليكون التغيير قابلاً للتكرار.
جهّز قائمة قصيرة بالأسرار تذكر ما يفتَح كل سر، أين يُخزَّن، من يستطيع قراءته، ومن مسؤول عن تدويره. اكتب خطوات التدوير كقائمة فحص مع خطوة تحقق واضحة، وضمّن عملية طوارئ (break-glass) مع متطلبات التدقيق.
يحتاج فريق العمليات إلى معرفة ما الذي يعمل وكيف يعاد إنتاجه: اسم/وسم الحاوية أو الحزمة، الإصدار، تاريخ البناء، checksum، ومرجع الشيفرة المستخدم للبناء. أضف الهدف الموصى به للنشر، ترتيب النشر، زمن النشر المتوقع، وكيف تُشغَّل هجرات قاعدة البيانات وتُحقَّق.
عرّف الإشارات التي تفعّل التراجع (مثل فشل فحوصات الصحة أو ارتفاع معدل الخطأ)، آخر إصدار معروف صالح، والخطوات الدقيقة للعودة بسرعة. اذكر ما إذا كانت تغييرات قاعدة البيانات قابلة للعكس، وماذا تفعل إذا لم تكن كذلك، حتى لا يصبح التراجع مرتكزاً على الارتجال.
اختر مجموعة صغيرة من المقاييس التي تعكس تأثير المستخدم: زمن الاستجابة (p95/p99)، معدل الأخطاء، تشبّع الموارد، عمق الطوابير، وفحص توافر خارجي. اجعل قواعد التنبيه واضحة: ماذا يفعّلها، شدة الحدث، من يتلقى الاستدعاء، وماذا يعني الوضع الطبيعي.
وثّق ما يُؤخذ نسخة احتياطية منه، أين يُخزَّن، فترة الاحتفاظ، ومن يمكنه تنفيذ عمليات الاسترجاع. أدرج إجراء استرجاع خطوة بخطوة مع فحص تحقق، وحدد موعد تجربة استرجاع؛ فالنسخ الاحتياطية لا معنا لها إلا إذا أمكن الاسترجاع منها عند الطلب.
اجعل كتب التشغيل قصيرة ومتسقة: الأعراض، الفحوصات الأولى، الفحوصات التالية، نقاط القرار، والتصعيد. ركّز على الحوادث المرجحة أولاً (انقطاع كامل، بطء، نشر خاطئ)، وحدث كتاب التشغيل فوراً بعد الحادث بينما لا تزال التفاصيل طازجة.
دوّن الأدوار المستخدمة فعلاً (منفّذ النشر، مسؤول قواعد البيانات، عارض فقط، قائد الحوادث)، كيف يُمنَح الوصول ويُسحب، وما الذي يجب تسجيله للتدقيق. لا تنسَ حسابات الخدمة والرموز؛ اذكر ما يمكن لكل منها الوصول إليه ومكان تعريف هوياتها دون تضمين قيم السرّ.


