دليل النشر

بيئة تجريبية لموقع ووردبريس لعميل: أنشئها واختبر قبل الإنتاج

انشر على VPS Cloud ←

دليل عملي

بيئة تجريبية لموقع ووردبريس لعميل: أنشئها واختبر قبل الإنتاج

النشر12 دقيقةً للقراءةعدد الخطوات: 10

يستغرق تحديث النواة أو إحدى الإضافات ثوانيَ، وقد يكلّف ساعات أمام عميل يبيع عبر الإنترنت. ومع ذلك فالبيئة التجريبية سيئة العزل أسوأ من غيابها: تُفهرَس في محركات البحث، أو ترسل رسائل بريد حقيقية إلى عملاء الموقع، أو تطمس عناوين الإنتاج عند العودة. يبني هذا الدليل خطوة بخطوة نسخة آمنة من موقع ووردبريس لعميل، بأوامر `wp-cli` المفيدة، ويختبر التحديثات واحدًا تلو الآخر، ويقرأ الأخطاء في `debug.log`، ثم ينقل التغييرات إلى الإنتاج دون طمس قاعدة البيانات الحية ومع خطة تراجع جاهزة.

المحتويات· لماذا بيئة تجريبية بدل الاختبار على الموقع المباشر1/14
  1. 01لماذا بيئة تجريبية بدل الاختبار على الموقع المباشر
  2. 02ما تقدمه لك البيئة التجريبية
  3. 03المتطلبات بالأرقام قبل النسخ
  4. 04إنشاء البيئة التجريبية خطوة بخطوة
  5. 05العزل الحقيقي: noindex وحده لا يكفي
  6. 06تعطيل البريد والمدفوعات والمهام المجدولة
  7. 07قائمة التحقق قبل لمس أي إضافة
  8. 08اختبر التحديثات واحدًا تلو الآخر
  9. 09حين يكسر التحديث الموقع: قراءة debug.log
  10. 10استكشاف الأخطاء: الأعراض الأخرى التي تصادفها فعلًا
  11. 11الملفات أم قاعدة البيانات: ما الذي يُنقل وكيف
  12. 12النقل إلى الإنتاج، وإمكان العودة
  13. 13عادة التحصين
  14. 14روتين يصمد على مستوى محفظة مواقع

لماذا بيئة تجريبية بدل الاختبار على الموقع المباشر

إضافة نماذج لم تعد تعمل، وقالب فقد تنسيقه، وشاشة «حدث خطأ فادح في هذا الموقع»: أعطال تأتي بعد تحديث بدا بسيطًا. مع ثلاثة مواقع تكفي الحيطة. أما مع ثلاثين موقعًا فإما أن تحدّث في الظلام وإما أن تتوقف عن التحديث، وعندها تصبح الثغرة غير المسدودة هي الكلفة.

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

ما تقدمه لك البيئة التجريبية

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

المتطلبات بالأرقام قبل النسخ

احسب ثلاثة أضعاف حجم الموقع المباشر من مساحة القرص: الموقع ونسخته وتصدير قاعدة البيانات. اعرف حجم wp-content بالأمر du -sh wp-content وحجم قاعدة البيانات في phpMyAdmin أو بالأمر wp db size. خصّص نطاقًا فرعيًا لكل عميل، مثل staging.your-domain.com، واستخدم إصدار PHP نفسه المستخدم في الإنتاج: بيئة تجريبية بإصدار أحدث تعتمد إعدادًا ليس إعداد العميل. يظهر هذا الإصدار في الأدوات › سلامة الموقع › المعلومات، والإصدارات المدعومة حاليًا محدّثة في php.net/supported-versions.php.

تحتاج أيضًا إلى طرفية فيها wp-cli (اتصال SSH على حساب يسمح به، أو خادم VPS). يصف هذا الدليل النسخ اليدوي، الملفات ثم قاعدة البيانات، وهو يُظهر بالضبط ما يُنسخ. وإن كان WP Toolkit متاحًا في حسابك فإن استنساخه ينتج هذه النسخة بدلًا عنك (راجع دليل «تثبيت ووردبريس من cPanel»)؛ ويبقى باقي الدليل (noindex والمصادقة وإيقاف البريد والاختبارات) سارياً كما هو. لتثبيت موقع جديد من cPanel راجع الدليل المخصص لذلك.

إنشاء البيئة التجريبية خطوة بخطوة

  1. خذ نسخة احتياطية من الإنتاج قبل أي كتابة

    من مجلد الموقع المباشر:
    mkdir -p ~/preprod-backups
    wp db export ~/preprod-backups/before-staging.sql --single-transaction
    tar -czf ~/preprod-backups/files-before-staging.tar.gz -C ~/public_html .
    تأكد من وجود الملفين ومن أنهما غير فارغين بالأمر ls -lh ~/preprod-backups. النسخ الاحتياطية للباقة لا تغني عن هذه الخطوة: فتكرارها يختلف بحسب الباقة، وقد يعود تاريخها إلى عدة أيام.

  2. أنشئ النطاق الفرعي ومجلده

    أنشئ staging.your-domain.com في cPanel (يشرح دليل «إنشاء نطاق فرعي في cPanel» الشاشة) مع مجلد جذر خاص به، ويُفضَّل خارج public_html، مثل ~/staging.your-domain.com. المجلد الموضوع داخل public_html يمكن بلوغه أيضًا من عنوان في الموقع المباشر. انتظر حتى تُصدَر شهادة TLS للنطاق الفرعي قبل الاختبار.

  3. انسخ الملفات

    rsync -a --exclude='wp-content/cache/' ~/public_html/ ~/staging.your-domain.com/
    كيّف مسار المصدر مع مجلد جذر موقع العميل. بلا طرفية، يتيح مدير ملفات cPanel ضغط المجلد ونقله ثم استخراجه في مجلد النطاق الفرعي.

  4. أنشئ قاعدة بيانات ومستخدمًا مخصصين

    في قسم قواعد بيانات MySQL في cPanel، أنشئ قاعدة جديدة ومستخدمًا، وامنحه كل الصلاحيات على هذه القاعدة وحدها. ثم افتح wp-config.php الخاص بالنسخة وغيّر DB_NAME وDB_USER وDB_PASSWORD. هذا أغلى خطأ في هذا الدليل: نسخ wp-config.php دون تغيير هذه الأسطر الثلاثة يجعل البيئة التجريبية تكتب في قاعدة بيانات الإنتاج.

  5. استورد قاعدة البيانات

    من مجلد النسخة:
    cd ~/staging.your-domain.com
    wp db import ~/preprod-backups/before-staging.sql
    wp option get siteurl
    يجب أن يعرض الأمر الأخير عنوان الإنتاج بعد: هذا طبيعي، فالعناوين لم تُستبدل بعد. وإن فشل فإن wp-config.php ما زال يشير إلى قاعدة بيانات خاطئة.

  6. استبدل العناوين، مع تجربة جافة أولًا

    wp search-replace 'https://your-domain.com' 'https://staging.your-domain.com' --all-tables --skip-columns=guid --dry-run
    اقرأ التقرير: يسرد الجداول وعدد الاستبدالات. ثم أعد الأمر نفسه دون --dry-run. يخزّن ووردبريس إعدادات كثيرة في بيانات متسلسلة (serialized) تحمل فيها كل سلسلة طولها: أمر sed على ملف التصدير يغيّر طول العنوان دون تصحيح هذا العدد فتصبح الإعدادات غير مقروءة. أما wp search-replace فيفهم هذه البيانات ويعيد كتابتها بشكل صحيح.

  7. اضبط إعدادات البيئة التجريبية في wp-config.php

    أضف فوق السطر «That's all, stop editing»:
    define('WP_ENVIRONMENT_TYPE', 'staging');
    define('DISABLE_WP_CRON', true);
    define('DISALLOW_FILE_EDIT', true);
    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);
    تذهب الأخطاء إلى wp-content/debug.log دون أن تظهر للزوار. الثابت WP_ENVIRONMENT_TYPE موجود منذ ووردبريس 5.5 ويقبل local وdevelopment وstaging وproduction: يسمح للقوالب والإضافات بالتكيف، لكنه لا يخفي الموقع عن محركات البحث، ومن هنا الخطوة التالية.

  8. أغلق الوصول واطلب noindex

    في الإعدادات › القراءة، فعّل «منع محركات البحث من فهرسة هذا الموقع»، أو من سطر الأوامر: wp option update blog_public 0. ثم أضف مصادقة HTTP إلى مجلد النسخة: ملف .htpasswd يُنشأ بالأمر htpasswd -c ~/.htpasswd-staging client، ثم في ملف .htaccess الخاص بالمجلد التوجيهات AuthType Basic وAuthName "Preproduction" وAuthUserFile الذي يشير إلى هذا الملف وRequire valid-user. وإن تعذّر ذلك فقيّد الوصول بقائمة عناوين IP.

  9. افحص النسخة كما يفعل الروبوت

    curl -sI https://staging.your-domain.com/
    يجب أن يكون الرد 401. ثم بالبيانات:
    curl -s -u client https://staging.your-domain.com/ | grep -i robots
    يجب أن تظهر وسم meta name='robots' يحتوي على noindex. وإن استبدلته إضافة تخزين مؤقت أو إضافة سيو فهي التي ينبغي ضبطها. وأخيرًا تحقق من أن القالب لا يحتوي على عنوان إنتاج مكتوب يدويًا: grep -r "https://your-domain.com" wp-content/themes.

  10. اربط البيئة التجريبية بروتين الوكالة

    اجعل هذا الإعداد نموذجًا: نطاق فرعي لكل عميل، في حساب cPanel الخاص بالعميل، مع قائمة التحقق نفسها. ترتيب العمليات لنقل موقع إلى استضافة أخرى يتناوله دليل «نقل موقع ووردبريس لعميل دون توقف»؛ أما البيئة التجريبية الموصوفة هنا فهي أداة دائمة لا خطوة من خطوات التحويل.

العزل الحقيقي: noindex وحده لا يكفي

يطلب noindex من محركات البحث ألا تحتفظ بصفحة، لكنه لا يمنع أحدًا من قراءتها. البيئة التجريبية المفتوحة للجميع ينتهي بها الأمر في رابط مُلصق في تذكرة أو خريطة موقع أو لقطة شاشة، وعندها تنشر محتوى مكررًا عن الإنتاج. والحمايتان متكاملتان: noindex يطلب من المحركات عدم الفهرسة، ومصادقة HTTP أو قائمة عناوين IP تمنع الوصول.

فخ واحد: إن حجبت النطاق الفرعي عبر robots.txt فلن يقرأ الروبوت الصفحة ولن يرى وسم noindex أبدًا. ومع وجود المصادقة لا فائدة من هذا الملف.

تعطيل البريد والمدفوعات والمهام المجدولة

تحتوي النسخة على عملاء الموقع الحقيقيين: مشتركون ومشترون وعناوين طلبات. يجب إيقاف كل ما يُرسل تلقائيًا قبل أي اختبار، وإلا خرج تذكير سلة متروكة أو تذكير موعد أو تجديد اشتراك مرتين من النسخة. تُطلَق المهام المجدولة في ووردبريس بالزيارات: في البيئة التجريبية عطّلها بـ DISABLE_WP_CRON وشغّلها يدويًا بالأمر wp cron event run --due-now حين تريد اختبارها.

قائمة التحقق قبل لمس أي إضافة

  • البريد — إضافة الإرسال في وضع الاختبار أو محوّلة إلى صندوق للمراجعة، وإشعارات المتجر متوقفة.
  • المدفوعات — البوابة في وضع الاختبار، ومفاتيح الإنتاج مسحوبة من النسخة، وعناوين الاستدعاء (webhooks) غير مسجلة للبيئة التجريبية.
  • المهام المجدولة — DISABLE_WP_CRON مضبوط، والأحداث المعلقة مسرودة بالأمر wp cron event list.
  • تعديل الملفات — DISALLOW_FILE_EDIT مفعّل حتى لا يُعدَّل الكود من لوحة الإدارة.
  • سجل الأخطاء — WP_DEBUG_LOG مفعّل وWP_DEBUG_DISPLAY على false.
  • التكاملات الخارجية — أنظمة العملاء والأدلة وأدوات الإحصاء ومفاتيح API الخاصة بالإنتاج مستبدلة أو مسحوبة.
  • محركات البحث — noindex مضبوط والمصادقة قائمة، مع فحص ذلك بـ curl كما سبق.

اختبر التحديثات واحدًا تلو الآخر

اسرد ما ينتظر التحديث بالأمر wp plugin list --update=available. ثم حدّث إضافة واحدة في كل مرة: wp plugin update plugin-name، وتصفّح الصفحات المهمة (الرئيسية ونموذج الاتصال والسلة وتسجيل الدخول) واقرأ نهاية السجل بالأمر tail -n 30 wp-content/debug.log. لا تنتقل إلى التالية إلا حين يهدأ السجل. افعل الشيء نفسه مع القالب بالأمر wp theme update theme-name ثم مع النواة بالأمر wp core update.

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

حين يكسر التحديث الموقع: قراءة debug.log

العَرَض الكلاسيكي هو شاشة «حدث خطأ فادح في هذا الموقع». يدخل ووردبريس عندها في وضع الاسترداد ويرسل رابطًا إلى عنوان الإدارة، وهذا يفترض أن إرسال البريد يعمل: وهو معطّل في البيئة التجريبية، فلا تنتظره. السبب موجود في السجل: tail -n 40 wp-content/debug.log. ابحث عن آخر سطر يبدأ بـ PHP Fatal error، مثل Call to undefined function أو Cannot declare class، ودوّن مسار الملف: المجلد الواقع تحت wp-content/plugins/ يسمّي الإضافة المعطوبة. عطّلها دون المرور بلوحة الإدارة بالأمر wp plugin deactivate plugin-name، فيعود الموقع وتعرف المتسبب.

استكشاف الأخطاء: الأعراض الأخرى التي تصادفها فعلًا

  • الموقع يحوّل إلى الإنتاج — ما زال wp option get siteurl وwp option get home يعرضان العنوان القديم، أو أن منشئ الصفحات يحتفظ بعناوين مكتوبة يدويًا؛ أعد الاستبدال، مع --precise عند الحاجة.
  • «Error establishing a database connection» — قيم DB_NAME أو DB_USER أو DB_PASSWORD أو DB_HOST في النسخة خاطئة، أو أن المستخدم لا يملك صلاحيات على القاعدة الجديدة.
  • صور أو أنماط تُحمَّل من الإنتاج — العناوين المهرّبة، مثل https:\/\/ في بيانات JSON الخاصة بمنشئي الصفحات، أفلتت من الاستبدال؛ أعده بهذه الصيغة.
  • حلقة تسجيل دخول أو خروج فوري — ملفات تعريف الارتباط تخص النطاق القديم؛ امسحها وتحقق من siteurl وhome.
  • البيئة التجريبية تظهر في محرك بحث — وُضع noindex متأخرًا أو أن إضافة تستبدله؛ انتقل إلى مصادقة HTTP واطلب إزالة العنوان.

الملفات أم قاعدة البيانات: ما الذي يُنقل وكيف

مرّر الجدول أفقيًا

العنصرأين يعيشكيف يُنقل إلى الإنتاج
القالب والقالب الفرعيملفاتانشر المجلد المعتمد، أو أعد `wp theme update` بالإصدار الذي اختبرته
الإضافاتملفاتأعد `wp plugin update plugin-name --version=X` بالإصدار الذي اختبرته
الإضافات الإلزامية (mu-plugins)ملفاتانسخ الملف المعتمد مع حفظ القديم بجانبه
الوسائط المرفوعة (uploads)ملفاتلا تدفعها أبدًا من البيئة التجريبية إلى الإنتاج: فالإنتاج يواصل استقبال وسائط جديدة
إعدادات الإضافاتقاعدة البيانات (الخيارات)أعد الإعداد يدويًا على الإنتاج، أو `wp option update` مع تسمية الخيار
الطلبات والنماذج والحسابات والتعليقاتقاعدة البياناتلا تطمسها أبدًا: هذه البيانات تعيش في جهة الإنتاج
جداول ينشئها تحديثقاعدة البياناتدع الإضافة تنشئها بإعادة التحديث على الإنتاج

النقل إلى الإنتاج، وإمكان العودة

في موقع فيه معاملات لا تستورد أبدًا قاعدة بيانات البيئة التجريبية في الإنتاج: أثناء اختباراتك وصلت طلبات وتسجيلات وإدخالات نماذج على الإنترنت، والاستيراد يمحوها. أعد بدلًا من ذلك تنفيذ التغييرات المعتمدة. التسلسل: نسخة احتياطية حديثة (wp db export وأرشيف الملفات كما في الخطوة 1)، ثم wp maintenance-mode activate، ثم التحديثات بالترتيب وبالإصدارات المدوّنة في السجل، ثم فحص الصفحات الأساسية، ثم wp maintenance-mode deactivate.

للتراجع، استعد الملفات أولًا: wp plugin install plugin-name --version=old --force أو أرشيف الخطوة 1. لا تستعد قاعدة البيانات إلا كحل أخير، وفقط إن كان التحديث قد غيّر جداول: سيضيع كل ما أُدخل منذ النسخة الاحتياطية، لذا يجب ألا يتجاوز عمر التصدير بضع دقائق. احتفظ بالنسخة الاحتياطية حتى يعتمد العميل الموقع المباشر.

عادة التحصين

بعد اعتماد التحديث، احذف نسخة قاعدة بيانات الإنتاج المتروكة في ~/preprod-backups وفي البيئة التجريبية: فالتصدير الكامل يحتوي على عناوين العملاء وطلباتهم وبصمات كلمات مرورهم. ولا تترك WP_DEBUG مفعّلًا على الموقع المباشر، فقد يحتوي السجل على مسارات واستعلامات.

روتين يصمد على مستوى محفظة مواقع

تُقاس البيئة التجريبية بانضباطها: الإعداد نفسه دائمًا، وقائمة التحقق نفسها، والسجل نفسه. وبالنسبة إلى وكالة يتسع الروتين في نموذج إجراء: نطاق فرعي لكل عميل، وقاعدة بيانات مخصصة، وnoindex مع المصادقة، وبريد متوقف، وتحديثات واحدًا واحدًا، ونشر بإعادة التنفيذ. ويعمل ذلك بصورة أفضل حين يعيش كل موقع عميل في حسابه الخاص بنسخه الاحتياطية وصلاحيات وصوله المنفصلة.

بيئة تجريبية لكل عميل على بنية تحتية معزولة

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

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة