[{"data":1,"prerenderedAt":234},["ShallowReactive",2],{"seo-verification":3,"blog-laravel-octane-على-vps-frankenphp-docker-traefik-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-laravel-octane-على-vps-frankenphp-docker-traefik-ar",{"id":9,"slug":10,"slugs":11,"title":14,"excerpt":15,"readTime":16,"views":17,"isPinned":18,"publishedAt":19,"updatedAt":20,"category":21,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":29,"ctaBody":29,"ctaButton":141,"ctaUrl":142,"relatedPosts":143},436,"laravel-octane-على-vps-frankenphp-docker-traefik",{"fr":12,"en":13,"ar":10,"es":13},"deployer-laravel-vps-octane","laravel-octane-vps-frankenphp-docker-traefik","‎Laravel Octane على ‎VPS: ‎FrankenPHP و‎Docker و‎Traefik","الانتقال من ‎PHP-FPM إلى ‎Laravel Octane مع ‎FrankenPHP في ‎Docker Compose خلف ‎Traefik، وفهم تغييرات دورة حياة الطلبات لتجنب تسريبات الذاكرة في الإنتاج.",11,0,false,"2026-10-12T00:00:00+00:00","2026-10-13T14:10:28+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[28],{"id":22,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-octane-poster.svg","يُنشئ ‎PHP-FPM عملية لكل طلب — فعّال للتطبيقات الصغيرة، لكنه مكلف مع تزايد حركة المرور. يُغيّر ‎Laravel Octane هذا النهج: يُحمَّل التطبيق مرة واحدة في الذاكرة ويستجيب لآلاف الطلبات دون إعادة تهيئة. الكسب حقيقي: تُظهر المعايير الرسمية لـ ‎Laravel أرباحاً من ‎4× إلى ‎6× في الطلبات\u002Fالثانية مقارنةً بـ ‎PHP-FPM 8.3. ‎FrankenPHP، برنامج تشغيل ‎Octane الموصى به منذ ‎Laravel 11، يدمج خادم ‎HTTP مباشرة في الثنائي ‎PHP — لا حاجة لـ ‎nginx أمامه. على ‎VPS مع وصول ‎root و‎Docker Compose و‎Traefik، تكون عملية الترحيل نظيفة وقابلة للتكرار.",[34,38,49,52,83,86,97,131,135,138],{"type":35,"title":36,"body":37},"h2","‎PHP-FPM مقابل ‎Laravel Octane — ما الذي يتغير فعلاً","يتبع ‎PHP-FPM نموذج «لا شيء مشترك»: كل طلب يُحمّل الإطار من الصفر، وينفذ الكود، ويحرر الذاكرة. هذا متين بالتصميم — أي تسريب في طلب ما يموت معه. ‎Octane يكسر هذا العقد. يُهيّأ التطبيق مرة واحدة، ثم تتتالى الطلبات في نفس العملية. المكسب في الأداء هائل، لكن مسؤولية المطوّر تزداد.",{"type":39,"title":40,"items":41},"ul","ست فروق هيكلية يجب معرفتها",[42,43,44,45,46,47,48],"**دورة حياة مشتركة** — حاوية ‎IoC الخاصة بـ ‎Laravel والمزودين والـ ‎singletons تُنشأ مرة واحدة وتبقى بين جميع طلبات العامل. قيمة مكتوبة في ‎singleton في الطلب ‎N لا تزال موجودة في الطلب ‎N+1.","**مكسب أداء موثق** — تُظهر معايير توثيق ‎Laravel Octane الرسمية ‎4× إلى ‎6× طلبات\u002Fثانية مقارنةً بـ ‎PHP-FPM 8.3 على نقاط نهاية نموذجية، بفضل حذف تهيئة ‎PHP في كل طلب.","**المتغيرات الثابتة = تسريبات مضمونة** — أي خاصية ‎`static` مكتوبة خلال طلب تلوث الطلبات التالية. واجهات ‎Laravel Facades تخفي مراجع ثابتة؛ بعضها يُنظّفه ‎Octane والبعض الآخر لا.","**الملفات الثابتة تُخدَم بواسطة ‎FrankenPHP** — يتضمن الثنائي خادم ‎HTTP كاملاً. على ‎VPS، لا حاجة لـ ‎nginx أمام ‎PHP: يتعامل ‎FrankenPHP مع ‎TLS و‎HTTP\u002F2 و‎HTTP\u002F3 بشكل أصلي.","**ذاكرة ‎RSS مستقرة ≠ ذاكرة مسربة** — ترتفع ذاكرة العملية عند بدء التشغيل ثم تستقر. التسريب الحقيقي يظهر كنمو مستمر عبر آلاف الطلبات، ليس المستوى الأولي.","**العمال والتزامن** — يبدأ ‎Octane ‎`--workers=N` عملية. كل عامل يحتفظ بحالته الخاصة، لكن نفس العامل يعالج طلباته بالتسلسل.","**توافق ‎Laravel 10 و11** — ‎Octane 2.x يدعم ‎Laravel 10+. ‎FrankenPHP كبرنامج تشغيل متاح منذ ‎`laravel\u002Foctane` 2.3. ‎PHP 8.2 كحد أدنى، ‎PHP 8.3 موصى به.",{"type":35,"title":50,"body":51},"المتطلبات الأساسية قبل البدء","‎VPS مع **2 ‎GB RAM على الأقل** (‎4 GB موصى به لـ ‎stack كامل مع ‎Redis وعمال الطوابير)، وصول ‎root، ‎Docker 25+ و‎Docker Compose v2. يجب أن يعمل التطبيق على **‎Laravel 10 أو 11** مع تثبيت ‎`laravel\u002Foctane` 2.x. سيدير ‎Traefik 3.x شهادات ‎Let's Encrypt وتوجيه ‎HTTPS. لا حاجة لـ ‎nginx إضافي: ‎FrankenPHP يستبدل طبقة ‎HTTP بالكامل.",{"type":53,"title":54,"steps":55},"steps","نشر ‎Laravel Octane + ‎FrankenPHP + ‎Traefik في ‎Docker Compose",[56,59,62,65,68,71,74,77,80],{"title":57,"body":58},"تثبيت ‎laravel\u002Foctane ونشر الإعداد","في مشروع ‎Laravel:\n\n```bash\ncomposer require laravel\u002Foctane\nphp artisan octane:install --server=frankenphp\n```\n\nهذا ينشر `config\u002Foctane.php` ويضيف متغيرات البيئة إلى `.env.example`. تحقق من تعيين `OCTANE_SERVER=frankenphp`.",{"title":60,"body":61},"كتابة ‎Dockerfile لـ ‎FrankenPHP","```dockerfile\nFROM dunglas\u002Ffrankenphp:1-php8.3-alpine\n\nRUN install-php-extensions \\\n    pdo_mysql \\\n    redis \\\n    opcache \\\n    pcntl \\\n    zip \\\n    intl\n\nWORKDIR \u002Fapp\n\nCOPY --chown=www-data:www-data . .\n\nRUN composer install --no-dev --optimize-autoloader --no-interaction \\\n && php artisan config:cache \\\n && php artisan route:cache \\\n && php artisan view:cache\n\nEXPOSE 8000\n\nCMD [\"php\", \"artisan\", \"octane:frankenphp\", \"--host=0.0.0.0\", \"--port=8000\", \"--workers=4\", \"--max-requests=500\"]\n```\n\nخيار `--max-requests=500` يُعيد تشغيل العامل بعد 500 طلب: شبكة أمان ضد تسريبات الذاكرة المتبقية.",{"title":63,"body":64},"كتابة ‎docker-compose.yml الكامل","```yaml\nservices:\n  app:\n    build: .\n    restart: unless-stopped\n    environment:\n      APP_ENV: production\n      APP_KEY: ${APP_KEY}\n      DB_HOST: db\n      REDIS_HOST: redis\n      CACHE_DRIVER: redis\n      SESSION_DRIVER: redis\n      QUEUE_CONNECTION: redis\n      OCTANE_SERVER: frankenphp\n    networks:\n      - internal\n      - traefik\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.app.rule=Host(`${DOMAIN}`)\"\n      - \"traefik.http.routers.app.entrypoints=websecure\"\n      - \"traefik.http.routers.app.tls.certresolver=letsencrypt\"\n      - \"traefik.http.services.app.loadbalancer.server.port=8000\"\n    depends_on:\n      db:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\n  worker:\n    build: .\n    restart: unless-stopped\n    command: [\"php\", \"artisan\", \"queue:work\", \"redis\", \"--sleep=3\", \"--tries=3\", \"--max-time=3600\"]\n    networks:\n      - internal\n    depends_on:\n      db:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\n\n  scheduler:\n    build: .\n    restart: unless-stopped\n    command: [\"sh\", \"-c\", \"while true; do php artisan schedule:run >> \u002Fdev\u002Fnull 2>&1; sleep 60; done\"]\n    networks:\n      - internal\n\n  db:\n    image: mysql:8.0\n    restart: unless-stopped\n    volumes:\n      - db_data:\u002Fvar\u002Flib\u002Fmysql\n    networks:\n      - internal\n    healthcheck:\n      test: [\"CMD\", \"mysqladmin\", \"ping\", \"-h\", \"localhost\"]\n      interval: 10s\n      timeout: 5s\n      retries: 5\n\n  redis:\n    image: redis:7-alpine\n    restart: unless-stopped\n    volumes:\n      - redis_data:\u002Fdata\n    networks:\n      - internal\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 10s\n      timeout: 3s\n      retries: 5\n\nvolumes:\n  db_data:\n  redis_data:\n\nnetworks:\n  internal:\n  traefik:\n    external: true\n```",{"title":66,"body":67},"نشر ‎Traefik مع شهادات تلقائية","```bash\ndocker network create traefik\nmkdir -p \u002Fopt\u002Ftraefik\u002Fletsencrypt\ntouch \u002Fopt\u002Ftraefik\u002Fletsencrypt\u002Facme.json\nchmod 600 \u002Fopt\u002Ftraefik\u002Fletsencrypt\u002Facme.json\ndocker compose -f \u002Fopt\u002Ftraefik\u002Fdocker-compose.yml up -d\n```",{"title":69,"body":70},"‫تهيئة ملف ‎.env‬ للإنتاج","المتغيرات الأساسية التي يجب تعريفها على ‎VPS‬:\n\n```bash\nAPP_ENV=production\nAPP_DEBUG=false\nAPP_KEY=base64:...  # يُنشأ بـ php artisan key:generate\nDOMAIN=your-domain.com\nDB_DATABASE=laravel\nDB_USERNAME=laravel\nDB_PASSWORD=strong_password\nDB_ROOT_PASSWORD=root_strong_password\nOCTANE_SERVER=frankenphp\nCACHE_DRIVER=redis\nSESSION_DRIVER=redis\nQUEUE_CONNECTION=redis\n```\n\nلا تُودّع ‎.env‬ في ‎git‬ أبدًا. على ‎VPS‬، أدِره عبر ‎scp‬ أو مدير الأسرار.",{"title":72,"body":73},"تشغيل عمليات الترحيل بدون توقف","```bash\ndocker compose run --rm app php artisan migrate --force\n```\n\nللنشر بدون توقف، استخدم علامة `--step` على الترحيلات التي تضيف أعمدة ‎NOT NULL.",{"title":75,"body":76},"تشغيل الـ ‎stack والتحقق من ‎healthcheck","```bash\ndocker compose up -d --build\ndocker compose ps\n```\n\nانتظر حتى يصل ‎`db` و‎`redis` إلى حالة ‎`healthy` قبل أن يبدأ ‎`app`.",{"title":78,"body":79},"التحقق من الحالة باستخدام ‎octane:status","```bash\ndocker compose exec app php artisan octane:status\n```\n\nتعرض هذه الأمر الخادم النشط (‎frankenphp)، عدد العمال وحالتهم. استجابة ‎`running` تؤكد أن العمال يستجيبون.",{"title":81,"body":82},"إعادة تحميل العمال عند النشر","```bash\ndocker compose build app worker scheduler\ndocker compose up -d --no-deps app worker scheduler\n```\n\nلإعادة التحميل بدون قطع الاتصالات النشطة:\n\n```bash\ndocker compose exec app php artisan octane:reload\n```",{"type":35,"title":84,"body":85},"قائمة التحقق من التوافق قبل التبديل إلى الإنتاج","الانتقال إلى ‎Octane لا يتطلب إعادة كتابة التطبيق، لكن بعض الأنماط الشائعة تنكسر بصمت. راجع هذه القائمة على كودك قبل أول نشر.",{"type":39,"title":87,"items":88},"8 نقاط يجب التحقق منها",[89,90,91,92,93,94,95,96],"**‎Singletons ذات حالة قابلة للتغيير** — أي خدمة مسجلة بـ ‎`$this->app->singleton()` تخزن بيانات خاصة بالطلب يجب إعادة تهيئتها في ‎`OctaneServiceProvider`. مراجعة: ‎`grep -r 'singleton' app\u002FProviders`.","**الجلسات** — مع ‎`SESSION_DRIVER=redis` تصمد الجلسات بشكل صحيح. قد يُسبب برنامج التشغيل ‎`file` حالات تنافس مع عمال متعددين. الترحيل إلى ‎`redis` أو ‎`database` موصى به.","**اتصالات قاعدة البيانات** — يحتفظ ‎Octane باتصالات ‎DB دائمة لكل عامل. تحقق من أن ‎MySQL يقبل ‎`max_connections ≥ workers × replicas`.","**المتغيرات الثابتة في النماذج أو الخدمات** — ‎`static $cache = []` في نموذج ‎Eloquent يستمر بين الطلبات. استبدله بحقن التبعية بنطاق الطلب.","**مستمعو الأحداث غير الأكفاء** — مستمع مسجل في ‎`boot()` يُسجَّل مرة واحدة فقط، لكنه يُنفَّذ في كل طلب يُطلق الحدث. مشكلة فقط إذا كان يجمع حالة عامة.","**المهام والطوابير** — لا تعمل ‎Jobs في عملية ‎Octane الرئيسية بل في حاوية ‎`worker` منفصلة. لا تعديلات مطلوبة على كود ‎Jobs.","**الملفات المرفوعة والتخزين** — تأكد من تركيب مجلد ‎`\u002Fapp\u002Fstorage` كـ ‎volume لكي تستمر الملفات بين إعادة بناء الصورة.","**الحزم التابعة لجهات خارجية** — تحقق من توافق ‎Octane لكل حزمة تستخدمها. عطّل ‎Debugbar وTelescope في الإنتاج.",{"type":98,"title":99,"headers":100,"rows":105},"comparison","‎FrankenPHP مقابل ‎Swoole مقابل ‎RoadRunner: اختيار برنامج تشغيل ‎Octane",[101,102,103,104],"المعيار","FrankenPHP","Swoole","RoadRunner",[106,111,116,121,126],[107,108,109,110],"التثبيت","صورة ‎Docker رسمية ‎`dunglas\u002Ffrankenphp` — لا حاجة لتجميع امتداد ‎PECL","امتداد ‎PECL ‎`swoole` — يتطلب ‎`pecl install swoole` أو صورة مخصصة","ثنائي ‎Go منفصل (`roadrunner`) — يُنزَّل عبر ‎Composer",[112,113,114,115],"HTTP\u002F2 و‎HTTP\u002F3","أصلي — ‎FrankenPHP مبني على ‎Caddy الذي يدعم ‎HTTP\u002F3 (QUIC) تلقائياً","يدعم ‎HTTP\u002F2، ‎HTTP\u002F3 ليس أصلياً","‎HTTP\u002F2 عبر مكوّن إضافي، ‎HTTP\u002F3 غير مدعوم أصلياً",[117,118,119,120],"توافق امتدادات ‎PHP","واسع جداً — مبني على ‎PHP-FPM الرسمي، معظم الامتدادات تُثبَّت بشكل طبيعي","عدم توافق معروف مع بعض الامتدادات الحاجبة","واسع، لكن بعض امتدادات ‎PECL قد تحتاج تكيفات",[122,123,124,125],"توصية ‎Laravel الرسمية","برنامج التشغيل الموصى به منذ ‎Laravel 11 (2024)، مذكور أولاً في وثائق ‎Octane","برنامج التشغيل الأولي التاريخي، لا يزال مدعوماً","مدعوم، بديل لـ ‎Swoole، شائع في نظام ‎Symfony",[127,128,129,130],"تعقيد التشغيل","منخفض — حاوية واحدة، ‎Dockerfile بسيط، لا خادم منفصل","متوسط — يجب تجميع الامتداد مع نسخة ‎PHP الصحيحة","متوسط — يجب مزامنة ثنائي ‎RoadRunner مع نسخة حزمة ‎Composer",{"type":132,"title":133,"body":134},"tip","مراقبة ‎Octane في الإنتاج باستخدام ‎octane:status","تستعلم الأمر ‎`php artisan octane:status` عن خادم ‎FrankenPHP في الوقت الفعلي وتعرض عدد العمال النشطين والحالة الإجمالية. دمجها في المراقبة:\n\n```bash\ndocker compose exec -T app php artisan octane:status | grep -q 'running' && echo OK || echo FAIL\n```\n\nلإعادة تحميل العمال بدون قطع الاتصالات:\n\n```bash\ndocker compose exec app php artisan octane:reload\n```\n\nراقب ذاكرة ‎RSS للعملية الرئيسية: النمو المستمر يشير إلى تسريب. الأمر ‎`docker stats app` يعطي الذاكرة في الوقت الفعلي.",{"type":35,"title":136,"body":137},"استكشاف الأخطاء: أخطاء الإنتاج الشائعة","**تسريب ذاكرة تدريجي**: ذاكرة الحاوية ‎`app` تنمو باستمرار. السبب المحتمل: ‎singleton يجمع بيانات لكل طلب. قلل ‎`--max-requests` إلى 100 ريثما تحدد المصدر.\n\n**‎502 Bad Gateway من ‎Traefik**: تحقق من أن الحاوية على شبكة ‎`traefik`، وأن التسمية ‎`traefik.http.services.app.loadbalancer.server.port=8000` تطابق المنفذ المكشوف، وأن الحاوية في حالة ‎`healthy`.\n\n**عامل يُعيد التشغيل في حلقة**: ابحث عن ‎`FATAL` في ‎`docker compose logs app`. السبب الأكثر شيوعاً: ترحيل لم يُنفَّذ يرفع ‎`QueryException`.\n\n**جلسات مفقودة بين الطلبات**: انتقل إلى ‎`SESSION_DRIVER=redis`.\n\n**منطقة زمنية خاطئة**: أضف ‎`APP_TIMEZONE` في ‎`.env` و‎`RUN apk add --no-cache tzdata` في ‎Dockerfile.",{"type":35,"title":139,"body":140},"لمزيد من المعلومات","لديك الآن ‎stack عامل لـ ‎Laravel Octane على ‎VPS. المقالات التالية تغطي الخطوات التالية الطبيعية: [نشر ‎Laravel على ‎VPS](\u002Fblog\u002Fdeployer-laravel-vps)، [النشر مع ‎Traefik](\u002Fblog\u002Fdeployer-avec-traefik)، [قائمة فحص ‎Docker Compose للإنتاج](\u002Fblog\u002Fdocker-compose-production-checklist)، [استضافة ‎Redis على ‎VPS](\u002Fblog\u002Fheberger-redis-vps)، [نهاية عمر ‎PHP 8.2](\u002Fblog\u002Fphp-82-fin-de-vie-checklist-migration).","عرض خطط ‎VPS ServOrbit","\u002Fvps-cloud",[144,161,180,196,220],{"id":145,"slug":146,"slugs":147,"title":151,"excerpt":152,"readTime":22,"views":17,"isPinned":18,"publishedAt":153,"updatedAt":154,"category":155,"categories":156,"featuredImage":29,"bgImage":30,"posterImage":158,"relatedSolution":159},5,"نشر-laravel-على-خادم-vps-دليل-الإنتاج",{"fr":148,"en":149,"ar":146,"es":150},"deployer-laravel-vps","deploying-laravel-on-a-vps-a-production-guide","desplegar-laravel-en-un-vps","نشر Laravel على خادم VPS: دليل الإنتاج","انقل Laravel إلى بيئة الإنتاج على خادم VPS: PHP وworkers والذاكرة المؤقتة وقاعدة البيانات وreverse proxy وHTTPS مُهيّأة بشكل نظيف.","2026-02-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},[157],{"id":22,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-poster.svg",{"categorySlug":26,"appSlug":160},"laravel-stack",{"id":162,"slug":163,"slugs":164,"title":168,"excerpt":169,"readTime":170,"views":171,"isPinned":18,"publishedAt":172,"updatedAt":154,"category":173,"categories":177,"featuredImage":29,"bgImage":30,"posterImage":179,"relatedSolution":29},38,"انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps",{"fr":165,"en":166,"ar":163,"es":167},"deployer-avec-traefik","deploy-your-applications-with-traefik-on-a-vps","desplegar-con-traefik","انشر تطبيقاتك باستخدام Traefik على خادم VPS","انشر Traefik كوكيل عكسي على خادم VPS الخاص بك: توجيه تلقائي لحاويات Docker، وشهادات SSL من Let's Encrypt، وموازنة أحمال.",3,2,"2026-05-13T00:00:00+00:00",{"id":170,"name":174,"slug":175,"color":176,"icon":175},"النشر","deploiement","bg-success\u002F10 text-success",[178],{"id":170,"name":174,"slug":175,"color":176,"icon":175},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":181,"slug":182,"slugs":183,"title":187,"excerpt":188,"readTime":189,"views":17,"isPinned":18,"publishedAt":190,"updatedAt":191,"category":192,"categories":193,"featuredImage":29,"bgImage":30,"posterImage":195,"relatedSolution":29},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":184,"en":185,"ar":182,"es":186},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق Docker Compose للإنتاج: 10 إعدادات أساسية، فحوصات صحية، أسرار بدون توقف، استراتيجية التراجع، استكشاف الأخطاء الشائعة.",12,"2026-08-06T00:00:00+00:00","2026-09-29T14:40:45+00:00",{"id":170,"name":174,"slug":175,"color":176,"icon":175},[194],{"id":170,"name":174,"slug":175,"color":176,"icon":175},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":197,"slug":198,"slugs":199,"title":203,"excerpt":204,"readTime":205,"views":17,"isPinned":18,"publishedAt":206,"updatedAt":207,"category":208,"categories":214,"featuredImage":29,"bgImage":30,"posterImage":216,"relatedSolution":217},58,"استضافة-redis-على-خادم-vps",{"fr":200,"en":201,"ar":198,"es":202},"heberger-redis-vps","hosting-redis-on-a-vps","alojar-redis-en-un-vps","استضافة ‎Redis‎ على خادم ‎VPS‎: الدليل الشامل","انشر ‎Redis‎ على خادم ‎VPS‎ السحابي: متطلبات ‎RAM‎ و‎CPU‎، الأمان (‎ACL‎ و‎TLS‎)، استمرارية ‎RDB\u002FAOF‎، استكشاف الأخطاء والتوافر العالي.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":209,"name":210,"slug":211,"color":212,"icon":213},6,"قواعد البيانات","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[215],{"id":209,"name":210,"slug":211,"color":212,"icon":213},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":218,"appSlug":219},"قواعد-البيانات","redis-stack",{"id":221,"slug":222,"slugs":223,"title":227,"excerpt":228,"readTime":16,"views":171,"isPinned":18,"publishedAt":229,"updatedAt":154,"category":230,"categories":231,"featuredImage":29,"bgImage":30,"posterImage":233,"relatedSolution":29},206,"نهاية-دعم-php-82-دليل-الترحيل",{"fr":224,"en":225,"ar":222,"es":226},"php-82-fin-de-vie-checklist-migration","php-82-end-of-life-planning-your-migration","php-82-fin-de-vida-planificar-la-migracion","نهاية دعم PHP 8.2 : قائمة التحقق للترحيل","يبلغ PHP 8.2 نهاية دورة حياته في 31 ديسمبر 2026. جرد بيئاتك، قارن الإصدارات، واتبع قائمة تحقق مفصّلة للترحيل إلى PHP 8.3 أو 8.4.","2026-08-01T00:00:00+00:00",{"id":22,"name":23,"slug":24,"color":25,"icon":26},[232],{"id":22,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fphp-82-fin-de-vie-checklist-migration-poster.svg",1791900918298]