استكشاف أخطاء عملية نشر مستضافة ذاتيًا وإصلاحها
شخّص أعطال بدء التشغيل والترحيل والتخزين والبريد والنشر والنطاق والوكيل والبحث من دون إتلاف حالة يمكن استعادتها.
- 3 دقيقة قراءة
- آخر تحديث 22/08/2026
ابدأ بنتيجة المستخدم التي فشلت وبأول خطأ ذي صلة. احتفظ بنسخة من .env الحالي
وقاعدة البيانات والتخزين والسجلات قبل إعادة إنشاء الخدمات. لا تحذف وحدات
التخزين ولا تنفّذ إعادة ضبط نظيفة كاختصار لاستكشاف الأخطاء وإصلاحها.
جمع لقطة تشخيصية آمنة
نفّذ من مجلد عملية النشر:
docker compose -f docker-compose.prod.yml ps
docker compose -f docker-compose.prod.yml logs migrate
docker compose -f docker-compose.prod.yml logs --since=15m server worker app
docker compose -f docker-compose.prod.yml config --services
لا تنشر ناتج docker compose config أو ملف .env؛ فقد تتضمن التهيئة المصيّرة
أسرارًا. عند طلب المساعدة، أرفق وسم Nibleaf وملخّصه الرقمي، وإصدار Compose،
والخدمة المتأثرة، والخطأ بعد تنقيحه، والسلوك المتوقع، والوقت الدقيق.
المكدّس لا يبدأ
| العَرَض | السبب المرجح | الفحص التالي |
|---|---|---|
| يخرج Compose قبل إنشاء الخدمات | قيمة مطلوبة في البيئة فارغة. | اقرأ خطأ الاستبدال وقارن .env بالقالب من الإصدار نفسه. |
| ينتظر التطبيق الخادم | فحص سلامة الخادم يفشل أو لم يكتمل migrate. | اقرأ سجل migrate ثم أول خطأ للخادم. |
| ترفض بيئة الإنتاج سر المصادقة | القيمة فارغة أو ضعيفة أو قيمة تجريبية افتراضية معروفة. | أنشئ قيمة مستقلة جديدة، ولا تعد التشغيل إلا بعد تحديث .env. |
| سحب الصورة مرفوض أو الصورة مفقودة | الوسم غير موجود أو فشل الوصول إلى السجل. | تحقق من الوسم في صفحة الإصدار ونفّذ docker compose pull مباشرة. |
لا تتخطَّ عمليات الترحيل بإزالة الاعتماديات من ملف Compose.
فشل عمليات الرفع في المتصفح
يستخدم المتصفح STORAGE_PUBLIC_ENDPOINT، لا اسم مضيف Docker الداخلي. تحقق من
DNS وTLS وCORS للحاوية وبيانات الاعتماد ووضع نمط المسار والمضيف الموقّع. افتح
خطأ الشبكة في المتصفح وقارن مصدره بـAPP_URL و
STORAGE_CORS_ALLOWED_ORIGINS.
قد ينجح فحص سلامة التخزين الداخلي بينما يفشل مسار الرفع العام.
البريد الإلكتروني لا يصل
افحص سجل عامل المعالجة (worker)، والتحقق من المُرسِل، وتدفق الرسائل في Postmark أو عنوان SMTP، ومجلد البريد العشوائي لدى المستلم، ونشاط المزوّد. يتطلب تسجيل الدخول دون كلمة مرور تسليم رمز لمرة واحدة. في غياب Postmark أو SMTP، يسجّل عامل المعالجة رسائل بريد التطوير بدلًا من تسليمها في بيئة التطوير أو عندما يكون التسليم اختياريًا فقط. يفشل التسليم المطلوب في الإنتاج إذا لم يُضبط Postmark أو SMTP.
عملية نشر تبقى في طابور المهام أو تفشل
تحقق من سلامة عامل المعالجة واتصاله بطابور المهام، ثم اقرأ خطأ عملية النشر وسجل
العامل عند وقت النشر. يجب أن يواصل الموقع العام تقديم الإصدار السابق ذي الحالة
READY. صحّح السبب وانشر إلى الأمام؛ ولا تعدّل حالة قاعدة البيانات يدويًا.
عملية تصدير أو Git تبقى في طابور المهام
تحقق مما إذا كان WORKER_QUEUES فارغًا أو يتضمن طابور export أو git
المطلوب. ثم افحص سلامة عامل المعالجة وسجل التشغيل أو العملية الدائم في لوحة
التحكم. بالنسبة إلى أعطال PDF وحدها، تحقق من EXPORT_CHROMIUM_PATH داخل عامل
المعالجة. وبالنسبة إلى أعطال Git، حافظ على سجل العملية والتعارض؛ وأعد المحاولة
عبر مسار التسوية الموثّق بدلًا من الدفع القسري إلى فرع التأليف.
لا يمكن لتغيير GIT_CREDENTIAL_ENCRYPTION_KEY إصلاح خطأ فك التشفير، وسيجعل
بيانات الاعتماد الحالية غير قابلة للقراءة. استعد المفتاح الصحيح أو اتبع تدويرًا
منضبطًا عبر قطع الاتصال وإعادة وصله.
نطاق يعرض الموقع الخطأ
تحقق من DNS واسم الشهادة وحالة النطاق الأساسي وتمرير Host الأصلي وأهداف
النطاق الأساسي وCNAME المهيّأة. اختبر التطبيق مباشرة بترويسة المضيف المقصودة
من بيئة مشغّل موثوقة فقط. إذا استبدل الوكيل جميع مضيفي العملاء باسم المنبع
الداخلي، فلن يتمكن Nibleaf من تحديد المشروع.
جميع الزوار يشتركون في حصة واحدة لتحديد المعدل
التقط سلسلة التمرير عند مدخل الشبكة. هيّئ الوكيل لتجاهل ترويسات التمرير غير
الموثوقة، ثم اضبط TRUSTED_PROXY_HOPS على عدد الوكلاء العامين الذين يضيفون
العناوين فعلًا. لا ترفع القيمة حتى تتوقف الطلبات عن الفشل؛ فالقيمة المفرطة
تضعف إسناد العنوان إلى صاحبه.
البحث لا يعثر على تعديل حديث
لا تدخل تغييرات المسودة في البحث العام حتى تصبح عملية النشر بالحالة READY.
تأكد من أن الصفحة منشورة وقابلة للفهرسة، وابحث عن عنوانها الدقيق، ثم عن عبارة
مميزة من متنها. بالنسبة إلى العربية، اختبر تنويعات الكتابة بعد التطبيع وراجع
العربية واتجاه RTL.
بالنسبة إلى السلوك الحساس أمنيًا، أوقف استكشاف الأخطاء علنًا واستخدم مسار
الإبلاغ الخاص الوارد في ملف SECURITY.md بالمستودع.