5.4النشر (deployment) و CI/CD (Git والخادم والاستضافة)
الأساسي في 30 ثانية
- النشر (deployment) = الوضع على الخط: تشغيل التطبيق على خادم متاح — مشترك بسيط للبدء وPaaS/VPS لمزيد من التحكم.
- CI/CD = تسليم تلقائي: عند كل دفع الاختبار (PHPUnit) ثم النشر إذا نجح كل شيء — انتهى FTP اليدوي المحفوف بالمخاطر.
- الأسرار خارج الشيفرة: الإعداد والأسرار في متغيرات البيئة (.env خارج المستودع) — أبدا في Git.
حالة مصغرة متسلسلة — رياد يضع على الخط في قسنطينة
متجر رياد المحوسب يدور جيدا — لكن فقط على أجهزة الفريق في قسنطينة. ينشره: مستودع Git موصول ومتغيرات بيئة مُدخَلة على الاستضافة و HTTPS مفعَّل والأخطاء مسجلة بدلا من عرضها. ثم يضيف خط أنابيب: عند كل دفع تدور اختبارات PHPUnit ولا يتبعها النشر إلا إذا نجحت. الحلقة الأخيرة من الحالات 5.1-5.3 — يسلّم رياد خدمة حقيقية على الخط.
الحلقة الأخيرة من الحالات 5.1-5.3 — يختم رياد التصميم والأداء ودوكر (Docker) بالإنتاج.
1. الاستضافة والنشر (deployment) عبر Git
يشغّل النشر (deployment) التطبيق على خادم متاح عبر الإنترنت (بدلا من localhost). ولـ PHP ميزة الانتشار الواسع وسهولة الاستضافة: الاستضافة المشتركة (الأبسط والأوفر — المضيف يدير كل شيء — مثالية للبدء والمواقع الصغيرة، مع تحكم قليل) ومنصات PaaS (نشر (deployment) مبسط من مستودع Git) وVPS (مزيد من التحكم لكن مزيد من المسؤوليات: تثبيت PHP و Nginx/Apache و MySQL والتأمين و HTTPS) والسحابة للاتساع. والدور المحوري لـ Git: لا ننقل الملفات «باليد» عبر FTP بعد (مصدر أخطاء) — بل يسترجع الخادم الشيفرة من المستودع، أكثر موثوقية وقابلية تتبع. يبدأ رياد بمشترك للواجهة، ويستهدف VPS عندما يكبر المتجر.
التوصية: مشترك لوضع مشاريعكم على الخط بسرعة، و PaaS لنشر (deployment) مبسط حديث، و VPS لتعلم الإدارة أو كسب التحكم.
2. CI/CD وأساسيات الإنتاج
يؤتمت CI/CD مسار الشيفرة ← الإنتاج. التكامل المستمر: عند كل دفع يشغّل خط الأنابيب الاختبارات (PHPUnit) وتدقيق الجودة ليمسك المشاكل مبكرا. والنشر (deployment) المستمر: إذا نجح كل شيء، يُنشَر الرمز تلقائيا. وتنشئ GitHub Actions (أو GitLab CI) خطوط الأنابيب هذه. الفوائد: الأتمتة (لا حركات يدوية مضنية بعد) والموثوقية (لا شيء معطوب يذهب إلى الإنتاج) والسرعة والتتبع. أساسيات إنتاج PHP: الأسرار والإعداد عبر البيئة (ملف .env خارج المستودع) وHTTPS لا غنى عنه والأخطاء غير معروضة (مسجلة — فقد تفشي معلومات حساسة) وأوب.كاش (OPcache) مفعّل ومحمل Composer التلقائي محسّن والترحيلات منفَّذة عند النشر (deployment) وبيئات منفصلة (dev/staging/prod). يكتب رياد أول خط أنابيب له: التثبيت والاختبار والنشر (deployment) إذا كان أخضر — فهو التتويج، لا الإنشاء فقط بل التسليم.
وحتى بسيطا، يغيّر خط الأنابيب كل شيء: فالاختبارات لا تُنسى أبدا قبل نشر (deployment).
3. الاختيار دون خطأ
المفاضلة الجوهرية: البساطة مقابل التحكم. مشترك: بساطة قصوى للبدء وتحكم قليل. PaaS: بساطة حديثة دون إدارة خادم. VPS: تحكم كامل ومرونة، لكنكم تديرون كل شيء (الأمن والتحديثات والنسخ الاحتياطي). ولنموذج أولي يكفي نشر (deployment) بسيط؛ ومتى صار المشروع جادا أو يُنشَر بانتظام أو مع فريق، فحتى CI/CD بسيط يجلب قيمة حقيقية. يقارن رياد عروض المستضيفين (الصيغ والحدود تتطور غالبا، فيتحقق من التوثيق الحالي لحظة الاختيار) ويجعل اختيار البنية الحساسة مصادَقا عليه من مديرية الأنظمة (DSI) قبل كشف بيانات حقيقية، والنسخ الاحتياطي للقاعدة ضمنا.
وفي كل الحالات تبقى الأساسيات: الأسرار في متغيرات البيئة و HTTPS والأخطاء المسجلة وأوب.كاش (OPcache) والنسخ الاحتياطي والبيئات المنفصلة.
🔎 مثال ملموس — خط أنابيب رياد
عند كل دفع: التثبيت والاختبار والنشر (deployment) إذا كان أخضر.
# GitHub Actions (.github/workflows/ci.yml)
# عند كل دفع:
# composer install ← vendor/bin/phpunit ← النشر إذا كان أخضر
# الأسرار والإعداد: متغيرات البيئة (.env خارج المستودع)
# الإنتاج: HTTPS + OPcache + أخطاء مسجلة
القراءة: خط الأنابيب هو البوابة: لا شيء معطوب يمر.
الدرس: الأسرار تعيش في البيئة، أبدا في المستودع.
مفردات القسم
- النشر (deployment)
- تشغيل التطبيق على خادم متاح عبر الإنترنت.
مثال بسيط: متجر رياد يغادر localhost نحو عنوان عمومي.
ما ليس كذلك: إرسال الملفات عبر FTP باليد.
رد فعل: هل تطبيقي متاح خارج جهازي ؟
- الاستضافة المشتركة
- خادم مشترك يدير فيه المضيف PHP والقاعدة وخادم الويب.
مثال بسيط: يضع رياد فيه الواجهة على الخط بسرعة وبميزانية صغيرة.
ما ليس كذلك: خادم نديره بأنفسنا.
رد فعل: هل أحتاج التحكم أم البساطة ؟
- VPS
- خادم افتراضي مستأجَر نديره بأنفسنا.
مثال بسيط: سيثبّت رياد فيه PHP و MySQL و HTTPS بنفسه.
ما ليس كذلك: استضافة يُدار فيها كل شيء.
رد فعل: هل أنا مستعد لتحمل الأمن والنسخ الاحتياطي ؟
- CI/CD
- خط أنابيب يختبر عند كل دفع وينشر إذا نجح كل شيء.
مثال بسيط: دفع رياد يطلق PHPUnit ثم الوضع على الخط تلقائيا.
ما ليس كذلك: نشر (deployment) يدوي بضربات FTP.
رد فعل: هل يمكن لدفع أن يذهب إلى الإنتاج دون اختبارات ؟
- متغيرات البيئة
- الإعداد والأسرار توفرها البيئة، خارج الشيفرة.
مثال بسيط: كلمة سر قاعدة رياد تعيش في .env، أبدا في Git.
ما ليس كذلك: سر مكتوب صلبا في الشيفرة.
رد فعل: هل يتسكع سر في مستودعي ؟
في التطبيق — نشر (deployment) تطبيق PHP وأتمتته
- اختاروا استضافة مناسبة (مشتركة لموقع صغير و PaaS/VPS لمزيد من التحكم) وانشروا تطبيقكم عبر Git (لا FTP يدوي).
- اضبطوا الإنتاج: الأسرار والمعلمات عبر متغيرات البيئة (.env خارج المستودع) و HTTPS والأخطاء المسجلة (لا المعروضة) وأوب.كاش (OPcache) مفعّل.
- ضعوا خط أنابيب CI/CD (GitHub Actions): عند كل دفع، شغّلوا الاختبارات (PHPUnit) وانشروا تلقائيا إذا نجح كل شيء.
- ديروا ترحيلات القاعدة عند النشر (deployment) (الإطار) وبيئات منفصلة (dev / staging / production).
نص جاهز للقول — إعلان الوضع على الخط
«متجرنا جاهز للخروج من localhost: أنشره عبر Git — أسرار في متغيرات البيئة و HTTPS مفعَّل وأخطاء مسجلة. وأضيف خط أنابيب بسيطا: PHPUnit عند كل دفع، والنشر (deployment) فقط إذا نجح كل شيء. وقبل كشف بيانات حقيقية، أجعل اختيار البنية والنسخ الاحتياطي مصادَقا عليهما من مديرية الأنظمة (DSI).»
يُقال للمسؤول لاعتماد الوضع على الخط ومسار مديرية الأنظمة (DSI) في البيانات الحساسة.
نموذج للنسخ واللصق — خط CI عام لـ PHP
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- run: composer install --no-progress
- run: vendor/bin/phpunit
فردي / ميزانية صغيرة
رياد وحده: يكفي مشترك + خط أنابيب يختبر عند كل دفع — دون خادم يُدار.
شركة صغيرة جدا / فريق مصغر
بيئتا dev و prod منفصلتان والأسرار خارج المستودع: كل دفع مُختبَر قبل الوضع على الخط.
شركة صغيرة ومتوسطة في قسنطينة
يجعل رياد المستضيف والوصول والنسخ الاحتياطي مصادَقا عليها من مديرية الأنظمة (DSI) في قسنطينة قبل كشف بيانات زبائن حقيقية.
فريق يبدأ
ثنائي: أحدهما يكتب خط الأنابيب والآخر يتحقق من الأسرار و HTTPS والنسخ الاحتياطي؛ ومراجعة قبل أول نشر (deployment) تلقائي.
✓ ممارسات جيدة
- ابدؤوا باستضافة بسيطة (مشتركة/PaaS): على الخط بسرعة و HTTPS مُدار.
- ضعوا الإعداد والأسرار في متغيرات البيئة (.env خارج المستودع، أبدا في Git).
- أتمتوا الاختبارات + النشر (deployment) بخط أنابيب CI/CD (GitHub Actions).
✗ أخطاء شائعة
- وضع الأسرار في الشيفرة أو مستودع Git.
- النشر (deployment) دون HTTPS ولا نسخ احتياطي متحقق منه.
- النشر (deployment) يدويا عبر FTP وعلى العمى (دون اختبارات مؤتمتة مسبقا).
النقاط الأساسية
- النشر (deployment) = تشغيل تطبيق PHP على خادم متاح عبر الإنترنت. الخيارات: استضافة مشتركة (بسيطة واقتصادية) و PaaS و VPS (تحكم + مسؤوليات) والسحابة. و PHP سهلة الاستضافة.
- النشر (deployment) عبر Git (الخادم يسترجع الشيفرة) بدلا من FTP اليدوي (موثوق وقابل للتتبع). CI/CD (GitHub Actions) يؤتمت: CI (اختبارات PHPUnit عند كل دفع) + CD (النشر (deployment) إذا نجح).
- الإعداد والأسرار: عبر متغيرات البيئة (.env خارج مستودع Git)، أبدا مثبتة صلبا. أساسيات الإنتاج: HTTPS والأخطاء غير معروضة (مسجلة) وأوب.كاش (OPcache) مفعّل ومحمل Composer التلقائي محسّن والترحيلات.
- هذا المستوى يربط كل شيء: اللغة ← الويب ← القواعد ← POO ← الأطر ← الأمن ← الاختبارات ← التحسين ← دوكر (Docker) ← القيادة إلى الإنتاج. ومعرفة التسليم (النشر (deployment) + الأتمتة) تُتم مطور PHP المستقل.
تحدي 48 ساعة — طبّق غدا
انشروا تطبيقا واحدا (مستودع Git + HTTPS) مع أسراره في متغيرات البيئة: هل يطلق دفع اختبارات PHPUnit ؟
- أستطيع شرح CI مقابل CD في جملة واحدة.
- تطبيقي على الخط (HTTPS) دون سر في Git.
- أعرف متى أنتقل من المشترك إلى VPS.
أسئلة شائعة
كيف أختار أين وكيف أنشر (deployment) تطبيق PHP خاصتي، لا سيما عند البدء ؟
حسب حجم المشروع والحاجة إلى التحكم ومستواكم. فالاستضافة المشتركة الأبسط والأوفر — يدير المضيف كل شيء — مثالية للبدء والمواقع الصغيرة (PHP مدعومة فيها بكثافة، وهي ميزة). وتبسّط منصات PaaS النشر (deployment) من Git دون إدارة خادم. ويعطي VPS مزيدا من التحكم (الإصدارات والإعداد) لكن مزيدا من المسؤوليات (التثبيت والأمن و HTTPS والنسخ الاحتياطي) — مكوِّن وأكثر تطلبا. التوصية: ابدؤوا بمشترك أو PaaS لوضع مشاريعكم على الخط؛ وانتقلوا إلى VPS لتعلم الإدارة. قارنوا العروض لحظة الاختيار (فهي تتطور) واجعلوها مصادَقا عليها من مديرية الأنظمة (DSI) قبل كشف بيانات حساسة.
ما النقاط الأساسية التي لا تُنسى عند الوضع في إنتاج تطبيق PHP ؟
قائمة التحقق: الأسرار عبر البيئة (.env خارج المستودع، أبدا في Git)؛ وHTTPS إلزامي؛ والأخطاء غير معروضة (مسجلة — فالتفاصيل التقنية المفشاة قابلة للاستغلال)؛ وأوب.كاش (OPcache) مفعّل ومحمل Composer التلقائي محسّن (الأداء)؛ والترحيلات منفَّذة عند النشر (deployment)؛ وبيئات منفصلة (dev/staging/prod)؛ ونسخ احتياطي مخطط ومستعادة مُختبَرة. كل نقطة منسية من هذه تكلف غاليا: ثغرة أمنية أو بطء دون سبب أو ضياع بيانات. ويغلق خط أنابيب CI/CD الباب: فلا شيء غير مُختبَر يذهب إلى الإنتاج.
ماذا يفعل خط أنابيب CI/CD ؟