[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"seo-verification":3,"blog-حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة-ma-ar":6,"promo-bar-likely":145},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-حزمة-تطوير-docker-على-خادم-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":130,"ctaBody":131,"ctaButton":132,"ctaUrl":133,"relatedPosts":134},139,"حزمة-تطوير-docker-على-خادم-vps-بيئة-جاهزة-للبرمجة",{"fr":12,"en":13,"ar":10,"es":14},"stack-dev-docker-vps","docker-dev-stack-on-a-vps-an-environment-ready-for-coding","stack-dev-docker-en-vps","حزمة تطوير Docker على خادم VPS: بيئة جاهزة للبرمجة","أنشئ حزمة تطوير Docker كاملة على خادم VPS: Nginx وPHP-FPM وPostgreSQL وRedis وMailpit وAdminer — docker-compose.yml مفصّل، SSH tunneling، استكشاف الأخطاء.",10,1,false,"2026-02-06T00:00:00+00:00","2026-11-09T20:55:19+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\u002Fstack-dev-docker-vps-poster.svg",{"categorySlug":27,"appSlug":34},"docker-dev-stack","تُجنِّب حزمة التطوير عن بُعد إشباع جهازك المحلي وتمنحك عنوان IP ثابتًا لاستقبال الـ webhooks والعروض التوضيحية واختبارات التكامل. على خادم VPS من ServOrbit، يصبح Docker Compose ورشة كاملة: خدمات Nginx وPHP-FPM أو Node وPostgreSQL وRedis وMailpit وAdminer تعمل معًا في حاويات معزولة ودائمة، يمكن الوصول إليها عبر SSH من أي جهاز. يوضّح هذا الدليل تكوين الحزمة وضبط الخدمات وأفضل الممارسات للعمل الجماعي دون تعارضات.",[37,41,51,54,57,79,82,85,88,92,122,125,127],{"type":38,"title":39,"body":40},"h2","لماذا تستضيف حزمة تطوير Docker على خادم VPS؟","تعمل بيئة التطوير المحلية، لكنها تبقى مرتبطة بجهاز واحد: فتغيير محطة العمل أو إدماج زميل جديد أو الوصول من بلد آخر يصبح كله مصدر احتكاك. بمركزة حزمة Docker الخاصة بك على خادم VPS، تحصل على خادم تطوير مشترك، يعمل دائمًا، ويمكن الوصول إليه عبر SSH أو المتصفح من أي مكان. تكسب أيضًا في قابلية إعادة الإنتاج: إذ يُعرَّف كل خدمة في ملف `docker-compose.yml`، ما يقضي على مشكلة « إنه يعمل على جهازي » الشهيرة.",{"type":42,"title":43,"items":44},"ul","ما يمكنك فعله بحزمة تطوير Docker",[45,46,47,48,49,50],"تشغيل عدة خدمات في آنٍ واحد (Nginx وMySQL وRedis وPHP-FPM وNode.js) في حاويات معزولة دون تعارض في المنافذ أو الإصدارات","مشاركة بيئة تطوير متطابقة بين جميع أعضاء الفريق بفضل ملف docker-compose.yml المُدار بإصدارات في Git","اختبار عمليات ترحيل قاعدة البيانات أو تحديثات التبعيات في حاوية مؤقتة دون المخاطرة بالبيئة الرئيسية","استضافة خادم CI\u002FCD خفيف (Gitea وDrone CI) مباشرة على خادم VPS نفسه لأتمتة عمليات النشر الداخلية","الوصول إلى خدمات التطوير عبر نطاقات فرعية أو reverse proxies من نوع Traefik\u002FNginx دون فتح منافذ غير ضرورية","نسخ حزمتك بالكامل احتياطيًا واستعادتها بأوامر قليلة بفضل أحجام Docker ولقطات (snapshots) خادم VPS",{"type":38,"title":52,"body":53},"المتطلبات الأساسية: الحد الأدنى الموصى به","تستهلك حزمة كاملة تشمل PostgreSQL وRedis وNginx وتطبيقًا ما **4 غيغابايت من RAM** على الأقل — في حال أقل من ذلك، يُوقف Docker OOM killer تشغيل PostgreSQL أو Redis في منتصف عملية ترحيل دون رسالة خطأ على مستوى التطبيق. يجب أن يعمل خادم VPS على **Ubuntu 22.04 LTS** أو Debian 12، مع تثبيت **Docker Engine 26+** و**Docker Compose v2.22+** (الأمر يُكتب `docker compose` بدون شرطة). تحقق من الإصدار بـ `docker compose version`: تتطلب ميزة `watch` المستخدمة لاحقًا الإصدار v2.22 على الأقل، الذي صدر في سبتمبر 2023.",{"type":38,"title":55,"body":56},"مكونات الحزمة: دور كل خدمة","تجمع حزمة مرجع ServOrbit ستة خدمات متكاملة.\n\n**Nginx** يلعب دور reverse proxy أمامي: يستقبل طلبات HTTP على المنفذ 80 ويوجهها إلى PHP-FPM (عبر FastCGI) أو إلى خادم Node.js. ضبط `nginx\u002Fdefault.conf` مُحمَّل كـ volume ليبقى قابلًا للتعديل دون إعادة بناء الصورة.\n\n**PHP-FPM 8.3** (أو Node.js 22 حسب ملف الحزمة) ينفِّذ كود التطبيق. كلا الخيارين متاحان في Marketplace ServOrbit؛ يتضمن ملف `docker-compose.yml` الخدمتين — عطِّل التي لا تحتاجها باستخدام `profiles`.\n\n**PostgreSQL 16** يخزِّن البيانات الدائمة. المنفذ 5432 غير مكشوف على المضيف افتراضيًا — يصل إليه فقط شبكة Docker الداخلية `dev_net`، مما يمنع أي كشف عرضي على عنوان IP العام للخادم.\n\n**Redis 7** يعمل كـ cache وكوسيط رسائل. كـ PostgreSQL، يبقى على الشبكة الداخلية (المنفذ 6379) ويمكن الوصول إليه من كود التطبيق باسم الخدمة `redis`.\n\n**Mailpit 1.x** يحل محل خادم SMTP حقيقي أثناء التطوير: يلتقط جميع رسائل البريد الإلكتروني الصادرة ويعرضها في واجهة ويب على المنفذ 8025. لا يلزم أي إعداد SMTP خاص جهة التطبيق — ما عليك سوى الإشارة إلى `mailpit:1025`.\n\n**Adminer** (المنفذ 8080) يوفر واجهة ويب خفيفة لإدارة PostgreSQL أو MySQL دون عميل ثقيل. لا يمكن الوصول إليه إلا من الخادم نفسه أو عبر SSH tunnel.",{"type":58,"title":59,"steps":60},"steps","تثبيت حزمة تطوير Docker على خادم VPS من ServOrbit",[61,64,67,70,73,76],{"title":62,"body":63},"اطلب خادم VPS Cloud من ServOrbit","توجَّه إلى صفحة \u002Fvps-cloud واختر عرضًا مناسبًا لاستخدامك. بالنسبة لحزمة تطوير قياسية (بضع حاويات، قاعدة بيانات، reverse proxy)، يشكِّل خادم VPS بـ 2 vCPU و4 غيغابايت من RAM نقطة انطلاق جيدة. أكمل الطلب: يُجهَّز خادم VPS الخاص بك في أقل من 60 ثانية على نظام Ubuntu 22.04 LTS.",{"title":65,"body":66},"الوصول إلى Marketplace في مساحة العميل","سجِّل الدخول إلى مساحة العميل الخاصة بك على ServOrbit، ثم افتح قسم « Marketplace » من لوحة معلومات خادم VPS الخاص بك. يسرد Marketplace جميع التطبيقات المتاحة للتثبيت بنقرة واحدة، مُنظَّمة حسب الفئة. اختر فئة « التطوير » لتصفية الحزم الموجَّهة للتطوير.",{"title":68,"body":69},"بدء تثبيت حزمة تطوير Docker","انقر على بطاقة « Docker Dev Stack »، ثم على زر « Install ». تنشر الأتمتة Docker Engine وDocker Compose وملف docker-compose.yml مُهيَّأ مسبقًا مع الخدمات الأساسية (Nginx وPHP-FPM وPostgreSQL 16 وRedis وMailpit لاختبار الرسائل الإلكترونية وAdminer). يستغرق التثبيت الكامل عادةً بين دقيقتين و4 دقائق حسب حجم خادم VPS.",{"title":71,"body":72},"استرجاع بيانات الاعتماد والوصول إلى الواجهة","بمجرد اكتمال التثبيت، تعرض مساحة العميل معلومات الاتصال المُولَّدة تلقائيًا: عنوان IP لخادم VPS، وكلمة مرور PostgreSQL، وعنوان URL للوصول إلى Mailpit (افتراضيًا على المنفذ 8025). اتصل عبر SSH باستخدام `ssh root@\u003CIP_VPS>` للتحقق من حالة الحاويات عبر `docker compose ps` في الدليل `\u002Fopt\u002Fdocker-dev-stack`.",{"title":74,"body":75},"تهيئة مشروعك الأول وتخصيص الحزمة","انسخ شيفرتك المصدرية إلى `\u002Fopt\u002Fdocker-dev-stack\u002Fapp\u002F` أو عدِّل ملف `\u002Fopt\u002Fdocker-dev-stack\u002Fdocker-compose.yml` لإضافة أو إزالة خدمات وفق احتياجاتك. أعد تشغيل الحزمة باستخدام `docker compose up -d` لتطبيق التغييرات. لعرض خدماتك على اسم نطاق، هيِّئ سجل DNS يشير إلى عنوان IP لخادم VPS وكيِّف تهيئة Nginx المضمَّنة في الدليل `\u002Fopt\u002Fdocker-dev-stack\u002Fnginx\u002F`.",{"title":77,"body":78},"أول تسجيل دخول","لا يوجد حساب لإنشائه: يفتح الرابط مباشرة صندوق البريد التجريبي Mailpit، دون كلمة مرور. أما PostgreSQL (المنفذ 5432) وRedis (المنفذ 6379) فلا يمكن الوصول إليهما إلا من الخادم نفسه؛ وتجدون بيانات اعتماد Postgres في الملف `\u002Fopt\u002Fdocker-dev-stack\u002F.env`.",{"type":38,"title":80,"body":81},"ضبط الخدمات: الأحجام والشبكات ومتغيرات البيئة","يُعلن ملف `docker-compose.yml` الخاص بالحزمة عن ثلاثة أحجام مسمَّاة — `postgres_data` و`redis_data` و`app_data` — مُحمَّلة في `\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata` و`\u002Fdata` و`\u002Fvar\u002Fwww\u002Fhtml` على التوالي. هذه الأحجام تنجو من `docker compose down`: تبقى بيانات قاعدة البيانات والملفات المرفوعة سليمة بين عمليات إعادة التشغيل.\n\nتشترك جميع الخدمات في شبكة `dev_net` الداخلية من نوع bridge. Nginx هو الخدمة الوحيدة التي تكشف منفذًا على المضيف (80)؛ أما البقية فتبقى معزولة وتتواصل باسم الخدمة — `postgres` و`redis` و`mailpit`.\n\nالمتغيرات الحساسة (كلمة مرور PostgreSQL، المفتاح السري للتطبيق) لا تُكتَب أبدًا بشكل مباشر في `docker-compose.yml`. تُقرأ من `\u002Fopt\u002Fdocker-dev-stack\u002F.env` عبر التوجيه `env_file`. هذا الملف مُستبعَد من مستودع Git بواسطة `.gitignore`. يمكن لمتغيرات البيئة غير الحساسة (المنفذ، إصدار PHP، اسم القاعدة) أن تظهر مباشرة في ملف Compose تحت مفتاح `environment`، لتكون مرئية عند مراجعة الكود.",{"type":38,"title":83,"body":84},"الوصول من الحاسوب المحمول: SSH tunneling وreverse proxy","PostgreSQL وAdminer وRedis غير مكشوفة على عنوان IP العام للخادم. للوصول إليها من جهازك المحلي، افتح SSH tunnel: `ssh -L 5432:localhost:5432 -L 8080:localhost:8080 root@\u003CIP_VPS>` ينشئ توجيهَين محليَّين — منفذ 5432 على حاسوبك يشير إلى PostgreSQL، ومنفذ 8080 إلى Adminer. يتصل عميل SQL المعتاد لديك على `localhost:5432` كأن قاعدة البيانات تعمل محليًا.\n\nلخدمات HTTP (Nginx وMailpit)، هناك مقاربتان. إن توفّر لديك اسم نطاق، أعد ضبط سجل `A` ليشير إلى عنوان IP للخادم وضبط Nginx لخدمة `dev.yourdomain.com` عبر HTTP بسيط (دون TLS في بيئة تطوير). وإن عملت دون نطاق، يكفي SSH tunnel: `ssh -L 8025:localhost:8025 root@\u003CIP_VPS>` يتيح الوصول إلى Mailpit على `localhost:8025`.",{"type":38,"title":86,"body":87},"أفضل الممارسات: التطوير مقابل الإنتاج","في التطوير، يمركز ملف `.env` جميع الأسرار. في الإنتاج، تحل أسرار Docker (‏`docker secret`) أو مدير أسرار خارجي (Vault أو AWS Secrets Manager) محل الملف الاعتيادي — فملف `.env` مُصادَق عليه بالخطأ يكشف بيانات الاعتماد في تاريخ Git.\n\nتستحق حدود الموارد (`deploy.resources.limits`) الضبط منذ مرحلة التطوير: قد يستهلك PostgreSQL كل RAM المتاحة إذا انحرف استعلام ما. ابدأ بـ `memory: 512m` على PostgreSQL وبـ `memory: 256m` على Redis وبـ `memory: 256m` على PHP-FPM، ثم اضبط حسب ملفات الاستخدام الفعلية.\n\nلا تُحمِّل أبدًا socket Docker (‏`\u002Fvar\u002Frun\u002Fdocker.sock`) في حاوية تطبيق إلا عند الضرورة القصوى: حاوية تصل إلى هذا الـ socket يمكنها إطلاق حاويات أخرى بامتيازات root على المضيف. في التطوير المخاطرة محدودة، لكن العادات المكتسبة هنا تُعاد في الإنتاج.",{"type":89,"title":90,"body":91},"tip","إعادة التحميل الفوري مع docker compose watch","يُقدِّم Docker Compose v2.22+‏ الأمرَ `docker compose watch`، المتاح منذ سبتمبر 2023. فعِّله بإضافة كتلة `develop.watch` في خدمة `app` من ملف `docker-compose.yml`: حدِّد المسارات المراقَبة والإجراء المرتبط (`sync` لنسخ الملفات إلى الحاوية دون إعادة تشغيلها، أو `rebuild` لإعادة بناء الصورة). ثم شغِّل `docker compose watch` بدلًا من `docker compose up -d`: تُنشر تعديلات الملفات فورًا داخل الحاوية، دون إعادة تشغيل يدوية. تحقق من إصدارك أولًا بـ `docker compose version`.",{"type":93,"title":94,"headers":95,"rows":100},"comparison","متغيرات الحزمة حسب نوع مشروعك",[96,97,98,99],"الحزمة","الخدمات الرئيسية","حالة الاستخدام","RAM الموصى بها",[101,106,110,114,118],[102,103,104,105],"LAMP","‏Nginx + PHP-FPM 8.3‏، MariaDB 10.11‏، Redis","‏WordPress وOctoberCMS وLaravel","‏4 غيغابايت",[107,108,109,105],"MERN","‏Node.js 22‏، MongoDB 7‏، Redis","‏REST API + React\u002FVue SPA",[111,112,113,105],"‏Django \u002F PostgreSQL","‏Python 3.12‏، PostgreSQL 16‏، Redis‏، Celery","تطبيقات Python وML وDjango REST API",[115,116,117,105],"‏PHP + PostgreSQL","‏Nginx + PHP-FPM 8.3‏، PostgreSQL 16‏، Redis‏، Mailpit","‏Symfony وAPI Platform وDrupal",[119,120,121,105],"‏Full Node","‏Node.js 22‏، PostgreSQL 16‏، Redis‏، Mailpit","‏NestJS وExpress وFastify",{"type":38,"title":123,"body":124},"استكشاف الأخطاء: 4 أخطاء شائعة","**المنفذ مشغول بالفعل.** الخطأ `Bind for 0.0.0.0:80 failed: port is already allocated` يدل على أن خدمة على المضيف (Apache أو nginx النظامي) تستمع بالفعل على المنفذ 80. أوقف الخدمة النظامية (`systemctl stop nginx` أو `systemctl stop apache2`) أو غيِّر منفذ المضيف في `docker-compose.yml` إلى `\"8080:80\"` وصِل إلى الحزمة على المنفذ 8080.\n\n**صلاحيات الحجم.** خطأ `Permission denied` على حجم مُحمَّل يأتي غالبًا من uid\u002Fgid مختلف في الحاوية عن المضيف. أضف `user: \"1000:1000\"` في الخدمة المعنية، أو غيِّر صلاحيات الدليل على المضيف بـ `chown -R 1000:1000 \u002Fopt\u002Fdocker-dev-stack\u002Fapp`.\n\n**شبكة bridge غير موجودة.** الرسالة `network dev_net declared as external, but could not be found` تظهر إن استخدمت `external: true` على شبكة لم تُنشأ بعد. احذف `external: true`: ينشئ Docker Compose الشبكة تلقائيًا عند أول `docker compose up`.\n\n**RAM غير كافية.** يعرض PostgreSQL `FATAL: out of memory` أو يُعيد التشغيل باستمرار إن كان VPS بحجم غير كافٍ. تحقق بـ `free -m`: يجب توفُّر 4 غيغابايت على الأقل للحزمة الكاملة. قلِّص `shared_buffers` في ضبط PostgreSQL (`command: postgres -c shared_buffers=128MB`) أو انتقل إلى عرض VPS أعلى.",{"type":89,"body":126},"نصيحة احترافية: التقط لقطة (snapshot) عند الطلب لخادم VPS من ServOrbit من مساحة العميل قبل إجراء تعديلات عميقة على تهيئة Docker. تتيح لك اللقطة العودة إلى حالة مستقرة بنقرة واحدة إذا كسر تحديث حاوية أو تغيير في ملف Compose بيئتك. تذكَّر أيضًا استخدام ملف `.env` لتخزين متغيراتك الحساسة (كلمات المرور، مفاتيح API) واستبعاده من مستودع Git الخاص بك عبر `.gitignore` — حتى على خادم تطوير، تلك عادة جيدة يُستحسن ترسيخها من البداية.",{"type":89,"title":128,"body":129},"الوثائق الرسمية","للتهيئة المتقدِّمة والخيارات الخاصة بالأداة وتغييرات الإصدار، راجع \u003Ca href=\"https:\u002F\u002Fdocs.docker.com\u002Fcompose\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">الوثائق الرسمية لـ Docker Compose\u003C\u002Fa>. يغطِّي هذا الدليل النشر على خادم VPS من ServOrbit؛ وتبقى وثائق الناشر المرجع للضبط الدقيق.","انشر حزمة تطوير Docker في دقائق على خادم VPS Cloud من ServOrbit","استفد من خادم VPS Cloud مع تثبيت بنقرة واحدة لبيئة Docker الخاصة بك، مع دعم مشمول وصيغة شهرية دون التزام.","أطلق خادم VPS Cloud الخاص بي","\u002Fvps-cloud",[135,154,177],{"id":136,"slug":137,"slugs":138,"title":142,"excerpt":143,"readTime":144,"views":18,"isPinned":19,"noindex":145,"publishedAt":146,"updatedAt":147,"category":148,"categories":149,"featuredImage":30,"bgImage":31,"posterImage":151,"relatedSolution":152},136,"تثبيت-docker-على-vps-قاعدة-نظيفة-لتطبيقاتك",{"fr":139,"en":140,"ar":137,"es":141},"demarrer-avec-docker-vps","installing-docker-on-a-vps-a-clean-base-for-your-apps","instalar-docker-en-un-vps","تثبيت Docker على VPS: قاعدة نظيفة لتطبيقاتك","جهّز VPS موثوقًا بـ Docker: العزل، وCompose، والأحجام (volumes)، والشبكة، وأفضل الممارسات للنشر دون ارتجال.",3,true,"2026-02-10T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[150],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fdemarrer-avec-docker-vps-poster.svg",{"categorySlug":27,"appSlug":153},"docker-starter",{"id":155,"slug":156,"slugs":157,"title":161,"excerpt":162,"readTime":163,"views":164,"isPinned":19,"noindex":19,"publishedAt":165,"updatedAt":166,"category":167,"categories":171,"featuredImage":30,"bgImage":31,"posterImage":173,"relatedSolution":174},41,"نشر-تطبيقاتك-باستخدام-coolify-على-vps",{"fr":158,"en":159,"ar":156,"es":160},"deployer-avec-coolify","deploy-your-applications-with-coolify-on-a-vps","desplegar-aplicaciones-con-coolify-en-un-vps","نشر تطبيقاتك باستخدام ‏Coolify على خادم ‏VPS","دليل شامل لنشر ‏Coolify على خادم ‏VPS: التثبيت، وإعداد ‏HTTPS، وربط ‏Git، ونشر أول تطبيق، وقواعد البيانات، والنسخ الاحتياطية، واستكشاف الأخطاء.",12,2,"2026-05-10T00:00:00+00:00","2026-10-31T01:54:10+00:00",{"id":144,"name":168,"slug":169,"color":170,"icon":169},"النشر","deploiement","bg-success\u002F10 text-success",[172],{"id":144,"name":168,"slug":169,"color":170,"icon":169},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-coolify-poster.svg",{"categorySlug":175,"appSlug":176},"نشر-التطبيقات-وdevops","coolify",{"id":178,"slug":179,"slugs":180,"title":184,"excerpt":185,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":186,"updatedAt":187,"category":188,"categories":189,"featuredImage":30,"bgImage":31,"posterImage":191,"relatedSolution":192},35,"انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps",{"fr":181,"en":182,"ar":179,"es":183},"deployer-avec-portainer","deploy-your-applications-with-portainer-on-a-vps","desplegar-aplicaciones-con-portainer-en-un-vps","انشر تطبيقاتك باستخدام Portainer على خادم VPS","أدِر Docker بصريًا باستخدام Portainer على خادم VPS الخاص بك: حاويات، وstacks، وأحجام (volumes)، وشبكات تُدار من واجهة ويب واضحة.","2026-05-16T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":144,"name":168,"slug":169,"color":170,"icon":169},[190],{"id":144,"name":168,"slug":169,"color":170,"icon":169},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":175,"appSlug":193},"portainer",1794270285182]