[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"seo-verification":3,"blog-نشر-تطبيق-symfony-على-vps-ma-ar":6,"promo-bar-likely":187},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-نشر-تطبيق-symfony-على-vps-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":35,"sections":36,"ctaTitle":128,"ctaBody":129,"ctaButton":130,"ctaUrl":131,"relatedPosts":132},48,"نشر-تطبيق-symfony-على-vps",{"fr":12,"en":13,"ar":10,"es":14},"deployer-symfony-vps","deploy-a-symfony-application-on-a-vps","desplegar-symfony-en-un-vps","نشر Symfony على خادم VPS: دليل شامل","ثبّت وأعدّ وأمّن تطبيق ‎Symfony‎ على خادم ‎VPS‎ يعمل بـ‎Ubuntu‎ مع ‎PHP 8.3‎ و‎Deployer PHP‎ و‎nginx‎ و‎Supervisor‎ و‎Redis‎.",9,3,false,"2026-05-03T00:00:00+00:00","2026-11-08T01:13:13+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-symfony-vps-poster.svg",{"categorySlug":24,"appSlug":34},"symfony-stack","يمنحك خادم ‎VPS‎ التحكم الكامل الذي يستحقه ‎Symfony‎: ‎PHP 8.3‎، وامتدادات أصيلة، وعمال غير متزامنين، وصلاحية ‎root‎ الكاملة. يغطي هذا الدليل تثبيت ‎PHP 8.3‎ والنشر الآلي عبر ‎Deployer PHP‎ وإعداد ‎nginx‎ و‎Supervisor‎ للطوابير وتعزيز الأمان. في النهاية اكتشف كيف يؤتمت ‎Marketplace ServOrbit‎ هذه البنية بأكملها في دقائق.",[37,41,52,55,83,110,113,116,119,122,125],{"type":38,"title":39,"body":40},"h2","لماذا تشغيل Symfony على VPS بدلاً من الاستضافة المشتركة؟","تفرض الاستضافة المشتركة إصدار ‎PHP‎ المثبت على الخادم، وتعطّل امتدادات عدة، وتمنع تشغيل العمليات الدائمة في الخلفية. يتطلب ‎Symfony 7.4 LTS‎ كحد أدنى ‎PHP 8.2‎، ويتطلب ‎Symfony 8‎ ‎PHP 8.4‎ — وهي إصدارات لا توفرها كثير من بيئات الاستضافة المشتركة حتى الآن. على خادم ‎VPS‎ تختار ‎PHP 8.3‎ منذ اليوم الأول وتثبّت ‎ext-redis‎ و‎ext-intl‎ وما تحتاج إليه.\n\nتحتاج ‎Symfony Messenger‎ إلى عمليات ‎Worker‎ دائمة يديرها ‎Supervisor‎ أو ‎systemd‎، وهذا مستحيل على الاستضافة المشتركة. على ‎VPS‎ تبدأ بأمر واحد وتُعاد تلقائياً بعد أي توقف.",{"type":42,"title":43,"items":44},"ul","ما يتيحه VPS لـ Symfony",[45,46,47,48,49,50,51],"‎**وصول root كامل**‎ — ثبّت أي امتداد ‎PHP‎ وعدّل ‎OPcache‎ سطراً بسطر دون فتح تذكرة دعم","‎**PHP 8.3 أصيل**‎ — استفد من ‎typed class constants‎ والسمة ‎`#[Override]`‎ دون انتظار ترقية الخادم المشترك","‎**‎Supervisor‎ وعمال دائمون**‎ — شغّل ‎`messenger:consume`‎ باستمرار مع إعادة تشغيل تلقائية لمعالجة الطوابير","‎**‎Redis‎ محلي**‎ — ثبّت ‎Redis‎ على نفس الخادم للجلسات وذاكرة التخزين المؤقت لـ‎Doctrine‎ وبروتوكولات ‎Messenger‎","‎**PHP متعدد الإصدارات عبر ondrej\u002Fphp**‎ — أبقِ ‎PHP 8.1‎ لتطبيق قديم و‎PHP 8.3‎ لتطبيق جديد على نفس المضيف","‎**Xdebug والتنميط في التدريج**‎ — فعّل ‎Blackfire‎ أو ‎Xdebug‎ على بيئة المراجعة دون المساس بالإنتاج، وأضف الأداة للإنتاج وقت الحاجة فقط","‎**نشر ذري مع Deployer**‎ — صفر وقت توقف عبر الروابط الرمزية والرجوع بأمر واحد",{"type":38,"title":53,"body":54},"المتطلبات المحددة — الموارد والبرامج","‎**نظام التشغيل**‎: ‎Ubuntu 24.04 LTS‎ أو ‎Debian 12‎.\n\n‎**PHP**‎: ‎8.3‎ موصى به لـ‎Symfony 7.4 LTS‎ (الحد الأدنى ‎8.2‎). يتطلب ‎Symfony 8‎ ‎PHP 8.4‎: استبدل حينها ‎`8.3`‎ بـ‎`8.4`‎ في أسماء الحزم. الامتدادات المطلوبة: ‎`php8.3-cli`‎ و‎`php8.3-fpm`‎ و‎`php8.3-mbstring`‎ و‎`php8.3-xml`‎ و‎`php8.3-curl`‎ و‎`php8.3-opcache`‎.\n\n‎**Composer**‎: الإصدار ‎2.x‎ إلزامي.\n\n‎**قاعدة البيانات**‎: ‎MySQL 8.0+‎ أو ‎PostgreSQL 16+‎.\n\n‎**الحد الأدنى من الذاكرة RAM**‎:\n- ‎1 GB‎: التطوير أو التطبيقات الخفيفة بدون طوابير\n- ‎2 GB‎: الإنتاج مع ‎Symfony Messenger‎ وبروتوكول ‎Redis‎ واحد\n- ‎4 GB‎: عمال متعددون و‎Redis‎ وجلسات عالية التردد\n\n‎**المنافذ المطلوبة**‎: ‎80‎ و‎443‎ و‎22‎. أغلق كل شيء آخر.",{"type":56,"title":57,"steps":58},"steps","تثبيت PHP 8.3 و Symfony CLI على Ubuntu VPS",[59,62,65,68,71,74,77,80],{"title":60,"body":61},"تحديث النظام وتثبيت المتطلبات الأساسية","`apt update && apt upgrade -y && apt install -y curl git unzip software-properties-common`",{"title":63,"body":64},"إضافة مستودع ‎`ondrej\u002Fphp`‎","`add-apt-repository ppa:ondrej\u002Fphp && apt update`",{"title":66,"body":67},"تثبيت ‎PHP 8.3-FPM‎ والامتدادات المطلوبة","`apt install -y php8.3-fpm php8.3-cli php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-intl php8.3-opcache php8.3-redis php8.3-mysql`",{"title":69,"body":70},"التحقق من الإصدار المثبت وحالة الخدمة","`php --version && systemctl status php8.3-fpm`",{"title":72,"body":73},"تثبيت ‎Composer 2.x‎ عالمياً","`curl -sS https:\u002F\u002Fgetcomposer.org\u002Finstaller | php -- --install-dir=\u002Fusr\u002Flocal\u002Fbin --filename=composer`",{"title":75,"body":76},"تثبيت ‎Symfony CLI‎","`curl -1sLf 'https:\u002F\u002Fdl.cloudsmith.io\u002Fpublic\u002Fsymfony\u002Fstable\u002Fsetup.deb.sh' | bash && apt install -y symfony-cli`",{"title":78,"body":79},"التحقق من استيفاء جميع متطلبات ‎Symfony‎","`symfony check:requirements`",{"title":81,"body":82},"تثبيت ‎nginx‎ و‎Redis‎","`apt install -y nginx redis-server && systemctl enable --now nginx redis-server`",{"type":56,"title":84,"steps":85},"نشر تطبيق Symfony للإنتاج باستخدام Deployer PHP",[86,89,92,95,98,101,104,107],{"title":87,"body":88},"في مشروع ‎Symfony‎ المحلي، أضف ‎Deployer‎ كاعتمادية تطوير","`composer require deployer\u002Fdeployer --dev`",{"title":90,"body":91},"تهيئة إعدادات ‎Deployer‎ (اختر وصفة ‎`symfony`‎)","`.\u002Fvendor\u002Fbin\u002Fdep init`",{"title":93,"body":94},"تعديل ‎`deploy.php`‎ في جذر المشروع","require 'recipe\u002Fsymfony.php';\nset('repository', 'git@github.com:your-org\u002Fyour-app.git');\nhost('your-vps.example.com')\n    ->set('remote_user', 'deploy')\n    ->set('deploy_path', '\u002Fvar\u002Fwww\u002Fsymfony-app');",{"title":96,"body":97},"على الخادم، إنشاء مستخدم النشر","`useradd -m -s \u002Fbin\u002Fbash deploy && usermod -aG www-data deploy`",{"title":99,"body":100},"إنشاء ‎`.env.local`‎ على الخادم في ‎`{{deploy_path}}\u002Fshared\u002F`‎","APP_ENV=prod\nAPP_DEBUG=false\nAPP_SECRET=\u003Cسر-عشوائي-32-حرف>\nDATABASE_URL=mysql:\u002F\u002Fuser:pass@127.0.0.1:3306\u002Fsymfony_db",{"title":102,"body":103},"تشغيل أول عملية نشر من الجهاز المحلي","`.\u002Fvendor\u002Fbin\u002Fdep deploy your-vps.example.com`",{"title":105,"body":106},"التحقق من الرابط الرمزي ‎`current\u002F`‎","`ls -la \u002Fvar\u002Fwww\u002Fsymfony-app\u002F`",{"title":108,"body":109},"عند الحاجة، الرجوع فوراً للإصدار السابق","`.\u002Fvendor\u002Fbin\u002Fdep rollback your-vps.example.com`",{"type":38,"title":111,"body":112},"إعداد nginx لـ Symfony","أنشئ ‎`\u002Fetc\u002Fnginx\u002Fsites-available\u002Fsymfony-app`‎ بهذه الكتلة الأساسية. لا يُمرَّر إلى ‎PHP-FPM‎ إلا ‎`index.php`‎: أي ملف ‎`.php`‎ آخر في ‎`public\u002F`‎ يعيد ‎404‎ بدلاً من تنفيذه:\n\n```nginx\nserver {\n    listen 80;\n    server_name your-domain.com;\n    root \u002Fvar\u002Fwww\u002Fsymfony-app\u002Fcurrent\u002Fpublic;\n    index index.php;\n\n    location \u002F {\n        try_files $uri \u002Findex.php$is_args$args;\n    }\n\n    location ~ ^\u002Findex\\.php(\u002F|$) {\n        fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.3-fpm.sock;\n        fastcgi_split_path_info ^(.+\\.php)(\u002F.*)$;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;\n        fastcgi_param DOCUMENT_ROOT $realpath_root;\n        internal;\n    }\n\n    # any other .php file in public\u002F: 404, never executed\n    location ~ \\.php$ {\n        return 404;\n    }\n\n    location ~ \u002F\\.ht {\n        deny all;\n    }\n}\n```\n\nفعّل الموقع واختبر الإعدادات قبل إعادة تحميل ‎nginx‎:\n`ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsymfony-app \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F && nginx -t && systemctl reload nginx`",{"type":38,"title":114,"body":115},"متغيرات البيئة والأمان","يقرأ ‎Symfony‎ ملف ‎`.env`‎ ثم ‎`.env.local`‎ ثم ‎`.env.prod.local`‎. في الإنتاج، يجب وضع جميع القيم الحساسة في ‎`.env.local`‎ — لا تلتزم بها في ‎git‎ أبداً.\n\nالمتغيرات الأساسية في الإنتاج:\n\n```dotenv\nAPP_ENV=prod\nAPP_DEBUG=false\nAPP_SECRET=\u003C64-chars-hex-random>\nDATABASE_URL=\"mysql:\u002F\u002Fdbuser:password@127.0.0.1:3306\u002Fsymfony_prod\"\nMAILER_DSN=smtp:\u002F\u002Fuser:pass@smtp.example.com:587\nMESSENGER_TRANSPORT_DSN=redis:\u002F\u002F127.0.0.1:6379\u002Fmessages\n```\n\nأنشئ ‎`APP_SECRET`‎ عشوائياً: `openssl rand -hex 32`. لا تعيد استخدام القيمة الافتراضية للمشروع.\n\n‎**APP_DEBUG=false**‎ حاسم: في وضع ‎debug‎ يكشف ‎Symfony‎ تتبعات المكدس الكاملة واستعلامات ‎SQL‎ في المتصفح — تسريب خطير في الإنتاج.",{"type":38,"title":117,"body":118},"الطوابير غير المتزامنة مع Symfony Messenger و Supervisor","يؤخّر ‎Symfony Messenger‎ المهام الثقيلة (إرسال البريد، توليد ‎PDF‎، الـ‎webhooks‎) إلى طابور معالجة غير متزامن. على الخادم يضمن ‎Supervisor‎ استمرار تشغيل العامل وإعادة تشغيله بعد أي توقف.\n\nثبّت ‎Supervisor‎:\n`apt install -y supervisor`\n\nأنشئ ‎`\u002Fetc\u002Fsupervisor\u002Fconf.d\u002Fsymfony-messenger.conf`‎:\n\n```ini\n[program:symfony-messenger]\ncommand=\u002Fvar\u002Fwww\u002Fsymfony-app\u002Fcurrent\u002Fbin\u002Fconsole messenger:consume async --time-limit=3600\nuser=deploy\nautostart=true\nautorestart=true\nstartretries=3\nredirect_stderr=true\nstdout_logfile=\u002Fvar\u002Flog\u002Fsupervisor\u002Fsymfony-messenger.log\n```\n\nشغّل العامل:\n`supervisorctl reread && supervisorctl update && supervisorctl start symfony-messenger`",{"type":120,"body":121},"tip","‎**تعزيز الأمان بثلاث أوامر.**‎ احجب الوصول إلى ‎`.git\u002F`‎ في ‎nginx‎ (أضف ‎`location ~ \u002F\\.git { deny all; }`‎). ثبّت ‎fail2ban‎: ‎`apt install -y fail2ban`‎. قيّد صلاحيات مجلد النشر: ‎`chmod 750 \u002Fvar\u002Fwww\u002Fsymfony-app && chown -R deploy:www-data \u002Fvar\u002Fwww\u002Fsymfony-app`‎. أعدّ ‎OPcache‎ مع ‎`opcache.validate_timestamps=0`‎ في الإنتاج للأداء الأقصى.",{"type":38,"title":123,"body":124},"استكشاف الأخطاء — أكثر 4 مشكلات شيوعاً","‎**1. `The environment variable \"APP_SECRET\" is not set.`**‎\n‎`APP_SECRET`‎ غائب من ‎`.env.local`‎ على الخادم. تحقق من وجود الملف في ‎`{{deploy_path}}\u002Fshared\u002F`‎.\n\n‎**2. خطأ 500 صامت — سجلات فارغة**‎\nمع ‎`APP_DEBUG=false`‎ يكتب ‎Symfony‎ في ‎`var\u002Flog\u002Fprod.log`‎. اقرأ هذا الملف: ‎`tail -f \u002Fvar\u002Fwww\u002Fsymfony-app\u002Fcurrent\u002Fvar\u002Flog\u002Fprod.log`‎. في الغالب هي مشكلة صلاحيات — صحّحها بـ ‎`chown -R deploy:www-data var\u002F`‎.\n\n‎**3. `Connection refused` على قاعدة البيانات**‎\n‎DATABASE_URL‎ تشير إلى ‎`127.0.0.1`‎ لكن ‎MySQL‎ يستمع على ‎`localhost`‎ (‎Unix socket‎) — أو العكس. اختبر مباشرة: ‎`mysql -u dbuser -p -h 127.0.0.1 symfony_db`‎.\n\n‎**4. `Unable to write in the \"cache\" directory`**‎\n‎Symfony‎ لا يستطيع الكتابة في ‎`var\u002Fcache\u002F`‎. الحل: ‎`chmod -R 775 var\u002Fcache var\u002Flog && chown -R deploy:www-data var\u002F`‎.",{"type":38,"title":126,"body":127},"النشر من Marketplace ServOrbit","إذا كنت تفضل تجنب ساعات الإعداد اليدوي، يثبّت قالب ‎**symfony-stack**‎ في ‎Marketplace ServOrbit‎ تلقائياً البرمجيات الواردة في هذا الدليل على ‎Ubuntu 24.04‎: ‎PHP 8.3-FPM‎ وامتداداته و‎Composer‎ و‎nginx‎ و‎PostgreSQL 16‎ و‎Redis‎ و‎Supervisor‎. لا توجد واجهة ويب: تحصل على وصول ‎root‎ عبر ‎SSH‎ لإعداد كتلة ‎nginx‎ وعامل ‎Supervisor‎ والصلاحيات كما هو موضح أعلاه. يثبّت القالب ‎PostgreSQL‎ وليس ‎MySQL‎: اكتب ‎`DATABASE_URL`‎ بصيغة ‎`postgresql:\u002F\u002F…`‎ في ‎`.env.local`‎.\n\nتحتفظ بالتحكم الكامل: الخادم ملكك ولا يوجد أي ربط تجاري، ويمكنك استخدام ‎Deployer PHP‎ تماماً كما هو موضح أعلاه من أول اتصال ‎SSH‎.","Symfony جاهز في 5 دقائق","اطلب خادم VPS مُعدّاً مسبقاً مع PHP 8.3 وnginx وRedis وSupervisor — البنية الكاملة لـSymfony مثبّتة ومؤمّنة دون إعداد يدوي.","نشر Symfony على VPS","\u002Fapplications\u002Fالتطوير\u002Fsymfony-stack",[133,151,169],{"id":134,"slug":135,"slugs":136,"title":140,"excerpt":141,"readTime":23,"views":142,"isPinned":19,"noindex":19,"publishedAt":143,"updatedAt":144,"category":145,"categories":146,"featuredImage":30,"bgImage":31,"posterImage":148,"relatedSolution":149},5,"نشر-laravel-على-خادم-vps-دليل-الإنتاج",{"fr":137,"en":138,"ar":135,"es":139},"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 مُهيّأة بشكل نظيف.",1,"2026-02-09T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[147],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-laravel-vps-poster.svg",{"categorySlug":27,"appSlug":150},"laravel-stack",{"id":152,"slug":153,"slugs":154,"title":158,"excerpt":159,"readTime":160,"views":142,"isPinned":19,"noindex":19,"publishedAt":161,"updatedAt":162,"category":163,"categories":164,"featuredImage":30,"bgImage":31,"posterImage":166,"relatedSolution":167},43,"نشر-تطبيق-nodejs-على-vps",{"fr":155,"en":156,"ar":153,"es":157},"deployer-nodejs-vps","deploy-a-nodejs-application-on-a-vps","desplegar-una-aplicacion-nodejs-en-un-vps","نشر تطبيق Node.js على VPS","انشر تطبيق Node.js في بيئة الإنتاج على VPS: PM2 وبروكسي عكسي Nginx وشهادة SSL من Let's Encrypt وبدء تشغيل تلقائي عند الإقلاع.",8,"2026-05-08T00:00:00+00:00","2026-11-08T01:13:12+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[165],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-nodejs-vps-poster.svg",{"categorySlug":24,"appSlug":168},"nodejs-stack",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":18,"views":178,"isPinned":19,"noindex":19,"publishedAt":179,"updatedAt":180,"category":181,"categories":182,"featuredImage":30,"bgImage":31,"posterImage":184,"relatedSolution":185},44,"نشر-تطبيق-django-على-vps",{"fr":173,"en":174,"ar":171,"es":175},"deployer-django-vps","deploy-a-django-application-on-a-vps","desplegar-una-aplicacion-django-en-un-vps","نشر تطبيق Django على VPS","انشر Django على VPS: Gunicorn وNginx وPostgreSQL وDocker وSSL. دليل كامل لمطوّري Python الراغبين في الاستضافة الذاتية.",7,"2026-05-07T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[183],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdeployer-django-vps-poster.svg",{"categorySlug":24,"appSlug":186},"django",true,1794270315032]