# دليل النشر والتشغيل

## المتطلبات

- PHP 8.2+ مع BCMath وPDO وOpenSSL وMbstring وFileinfo.
- MySQL 8 أو PostgreSQL 15، وNode.js لبناء الواجهة.
- خادم ويب يوجّه الجذر إلى `public/` ويمنع الوصول إلى `.env` و`storage` و`vendor`.
- عامل Queue دائم، وCron يشغّل `php artisan schedule:run` كل دقيقة.

## نشر الإنتاج

1. انسخ المشروع، وأنشئ `.env` من `.env.example` بقيم إنتاجية مستقلة.
2. اضبط `APP_ENV=production` و`APP_DEBUG=false` و`APP_URL=https://...` و`SESSION_ENCRYPT=true` و`SESSION_SECURE_COOKIE=true` وبيانات قاعدة البيانات والبريد والتخزين.
3. أنشئ `APP_KEY` مرة واحدة واحفظه خارج الخادم؛ فقدانه يمنع فك النسخ والبيانات المشفرة.
4. نفّذ `composer install --no-dev --optimize-autoloader` ثم `npm ci && npm run build`.
5. نفّذ `php artisan migrate --force` ثم `php artisan storage:link`.
6. نفّذ `php artisan optimize` وأعد تشغيل PHP-FPM/Apache وعمال الطابور.
7. شغّل عاملاً مثل `php artisan queue:work database --queue=default --sleep=1 --tries=3 --timeout=300 --max-time=3600` تحت Supervisor أو خدمة Windows، وأعد تشغيله بعد كل نشر عبر `php artisan queue:restart`. إعداد `DB_QUEUE_AFTER_COMMIT=true` ضروري لمنع تنفيذ الإشعارات قبل اكتمال المعاملة.
8. أضف مهمة دقيقة واحدة: `php artisan schedule:run`.

## فحوص ما بعد النشر

- افتح `/up` لفحص العملية و`/health/ready` لفحص اتصال قاعدة البيانات والكاش، ثم سجّل الدخول بحساب محدود الصلاحيات.
- نفّذ `php artisan migrate:status` و`php artisan route:list`.
- أنشئ نسخة مشفرة: `php artisan backups:create full`، ثم تحقق منها واختبر استعادتها معزولاً.
- افحص عامل الطابور، إرسال تقرير مجدول، انتهاء حجز متجر، وتنبيه تشغيلي.

## التحديث والرجوع

خذ نسخة مشفرة قبل كل تحديث. انشر الكود في إصدار منفصل، نفّذ الترحيلات، ثم بدّل رابط الإصدار. الرجوع يكون إلى إصدار الكود السابق مع قاعدة متوافقة؛ لا تُرجع ترحيلاً مالياً على الإنتاج قبل مراجعة النسخة وخطة البيانات.
