Files
fitness/deploy/README.md
T

4.9 KiB

النشر إلى CloudPanel

هذا إعداد أولي للنشر من Git عبر SSH. لا ينشئ موقع CloudPanel أو DNS أو شهادة TLS أو قاعدة MySQL؛ تلك خطوات تجهيز أولي تُنفذ لحساب Site User. يستخدم المنفذ 2101 افتراضيًا حسب إعداد المستخدم.

إعداد الخادم مرة واحدة

  1. أنشئ PHP Site في CloudPanel باسم النطاق المطلوب ومستخدم موقع مستقل. اضبط document root بعد أول نسخة ليشير إلى <DEPLOY_ROOT>/current/public.
  2. أنشئ قاعدة MySQL ومستخدمًا خاصًا بالموقع من CloudPanel، بصلاحيات قاعدة التطبيق فقط.
  3. أنشئ مجلد موقع النشر الذي يملكه Site User، على سبيل المثال /home/siteuser/htdocs/fitness.example.com.
  4. أضف مفتاح Git Deploy Key للقراءة فقط إلى حساب Git، واختبر أن Site User يستطيع git ls-remote على origin.
  5. أضف بصمة مفتاح SSH الخاص بالخادم إلى known_hosts على جهاز النشر. يعمل السكربت مع StrictHostKeyChecking=yes ولا يتجاوز التحقق.
  6. أنشئ <DEPLOY_ROOT>/shared/.env يدويًا على الخادم، مع إعداد DB ومفاتيح الخدمة. لا ترفع الملف إلى Git. السكربت يوقف النشر إذا كان الملف غير موجود.
  7. يحتوي المستودع الآن public/index.php وصفحتي API أوليتين تحت public/api/v1/. أعدّ جذر الإصدار ليستخدم public/ كـdocument root؛ ملف البيئة يقرأ من المسار المشترك خارج web root، وملفات الرفع الخاصة تحفظ في shared خارج public/.
  8. ثبّت شهادة TLS ووجّه DNS إلى الخادم من CloudPanel، ثم أضف health endpoint قبل أول نشر إنتاجي.

CloudPanel ينشئ PHP site ومستخدمه، ويمكن تغيير document root إلى مجلد public وفق دليل CloudPanel. واجهة الموقع وفحص الصحة والإعدادات العامة موجودة الآن. تسجيل الدخول ولوحة الإدارة والتطبيق ما زالت قيد التنفيذ، فلا تعتبر نقطة الدخول الحالية إصدارًا إنتاجيًا مكتملًا.

إعداد جهاز النشر

أضف remote باسم origin إلى repository بعد إنشائه، وادفع الفرع المقصود قبل النشر. عيّن المتغيرات في جلسة طرفية خاصة:

export DEPLOY_HOST='server.example.com'
export DEPLOY_USER='cloudpanel-site-user'
export DEPLOY_ROOT='/home/cloudpanel-site-user/htdocs/fitness.example.com'
export DEPLOY_DOMAIN='fitness.example.com'
export DEPLOY_PORT='2101'
export DEPLOY_REF='main'

تحقق من الإعداد المحلي دون اتصال SSH:

DEPLOY_DRY_RUN=1 bash deploy/sync-to-server.sh

بعد إنشاء public web root وضبط الخادم، نفّذ النشر من جذر المستودع:

bash deploy/sync-to-server.sh

السكريبت يرفض شجرة عمل غير نظيفة، ويتأكد أن HEAD يطابق آخر commit منشور للفرع نفسه في Git. يستخدم SSH بتهيئة غير تفاعلية، ثم يجلب ذلك الفرع على الخادم، يستخرج commit إلى مجلد مؤقت، ويفحص بناء PHP نحويًا إن كان PHP CLI متوفرًا. عند نجاح التحقق ينقل النسخة إلى مجلد الإصدار ويحوّل رابط current إليها. الفشل قبل ذلك يزيل مجلد الاستخراج المؤقت ويترك النسخة الحالية كما هي.

أول تشغيل يحتاج مفتاح SSH صالحًا للوصول إلى Site User عبر المنفذ 2101 ومفتاح Git صالحًا على الخادم. مفاتيح SSH لا تمرر كمتغير ولا تحفظ في هذا المستودع.

الاسترجاع

كل إصدار محفوظ تحت <DEPLOY_ROOT>/releases/<commit-sha>. إعادة نشر commit محفوظ تعيد تفعيل نفس الإصدار، ما يسمح بالاسترجاع إلى نسخة سابقة. لا تحذف مجلدات الإصدارات أثناء فترة المراجعة. استرجاع ملفات التطبيق لا يسترجع قاعدة البيانات؛ migrations تحتاج سياسة رجوع منفصلة ونسخة احتياطية مختبرة.

لا ينفذ السكربت أوامر SQL أو يغيّر صلاحيات قاعدة البيانات أو ينشئ مستخدمين. بعد إضافة migrations، تُدار كخطوة إصدار مراجعة ومختبرة، ولا تُنفّذ تلقائيًا من آلية النشر قبل تحديد سياسة التراجع.