[{"data":1,"prerenderedAt":192},["ShallowReactive",2],{"seo-verification":3,"blog-انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps-ma-ar":6,"promo-bar-likely":191},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-انشر-تطبيقاتك-باستخدام-portainer-على-خادم-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":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":124,"ctaBody":125,"ctaButton":126,"ctaUrl":127,"relatedPosts":128},35,"انشر-تطبيقاتك-باستخدام-portainer-على-خادم-vps",{"fr":12,"en":13,"ar":10,"es":14},"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)، وشبكات تُدار من واجهة ويب واضحة.",10,1,false,"2026-05-16T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"النشر","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdeployer-avec-portainer-poster.svg",{"categorySlug":33,"appSlug":34},"نشر-التطبيقات-وdevops","portainer","Portainer هو واجهة الويب المرجعية لإدارة Docker وDocker Swarm. بدلًا من حفظ عشرات الأوامر، تُدير حاوياتك وstacks وأحجامك من لوحة تحكم بصرية. إليك كيفية نشره على خادم VPS الخاص بك واستخدامه يوميًا.",[37,41,51,54,73,76,79,88,91,98,119,121],{"type":38,"title":39,"body":40},"h2","لماذا تثبّت Portainer على خادم VPS الخاص بك","تصبح إدارة Docker من سطر الأوامر مملّة بسرعة عندما تتراكم لديك الحاويات: فالعثور على سجلّات خدمة ما، أو فحص حجم (volume)، أو إعادة تشغيل stack، أو التحقق من استخدام الموارد يتطلب التنقل بين عدة أوامر. يعرض Portainer كل ذلك في واجهة ويب: ترى حالة كل حاوية، وتطّلع على السجلّات المباشرة، وتفتح وحدة تحكم تفاعلية، وتنشر stacks عبر محرّر `docker-compose`، وتراقب استهلاك CPU\u002FRAM. على خلاف منصة PaaS مثل CapRover أو Dokku، لا يبني Portainer شفرتك: فهو أداة لإدارة بيئة Docker القائمة لديك وعرضها بصريًا. إنه مثالي للفرق التي تريد وصولًا واضحًا وقابلًا للتفويض إلى خادم Docker دون منح وصول SSH للجميع.",{"type":42,"title":43,"items":44},"ul","ما يبسّطه Portainer يوميًا",[45,46,47,48,49,50],"نظرة شاملة في الوقت الحقيقي على جميع حاوياتك وصورك وأحجامك وشبكاتك.","نشر stacks عبر محرّر `docker-compose` مدمج، دون لمس SSH.","سجلّات مباشرة ووحدة تحكم تفاعلية داخل كل حاوية، مباشرةً في المتصفح.","إدارة دقيقة للصلاحيات: أنشئ حسابات وفرقًا بوصول محدود.","مراقبة استهلاك CPU وRAM والشبكة لكل خدمة.","إدارة عدة مضيفي Docker أو عناقيد Swarm من واجهة واحدة.",{"type":38,"title":52,"body":53},"متطلبات Portainer","Portainer خفيف للغاية لأنه لا يفعل سوى إدارة Docker، دون أداة بناء أو قاعدة بيانات ثقيلة. خادم VPS بذاكرة 1 غيغابايت من RAM ومعالج vCPU واحد يكفي وأكثر لتشغيل Portainer نفسه؛ ثم حدّد حجم خادم VPS وفقًا للتطبيقات التي تنوي استضافتها عليه. مع ذلك، خصّص 20 غيغابايت من قرص SSD لصور Docker. يجب تثبيت Docker Engine مسبقًا (يتصل Portainer بمقبس ‎`\u002Fvar\u002Frun\u002Fdocker.sock`). يُنصح باسم نطاق ‎`portainer.mydomain.com` ومنفذ 443 مفتوح لعرض الواجهة عبر HTTPS. مهم: يمنح Portainer تحكمًا كاملًا في Docker، لذا لا تترك واجهته معرَّضة مباشرةً على الإنترنت دون وكيل عكسي (reverse proxy) ومصادقة قوية. أما المنافذ، فتنشر وثائق التثبيت الحالية المنفذ `9443` (واجهة HTTPS بشهادة موقَّعة ذاتيًا)؛ والمنفذ `8000` (نفق TCP) لا يلزم إلا لوكلاء Edge، والمنفذ `9000` (HTTP) منفذ اختياري موروث من الإصدارات القديمة. نفتح هنا المنفذ 9443 فقط، ولمدة الإعداد فقط.",{"type":55,"title":56,"steps":57},"steps","انشر Portainer في 5 خطوات",[58,61,64,67,70],{"title":59,"body":60},"جهّز Docker على خادم VPS","ثبّت Docker إن لم يكن مثبتًا بالفعل: ‎`curl -fsSL https:\u002F\u002Fget.docker.com | sh`. تحقق بـ `docker ps`. أنشئ حجمًا مخصصًا لحفظ بيانات Portainer: `docker volume create portainer_data`.",{"title":62,"body":63},"شغّل حاوية Portainer","ابدأ Portainer CE: ‎`docker run -d -p 9443:9443 --name portainer --restart=always -v \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock -v portainer_data:\u002Fdata portainer\u002Fportainer-ce:lts`. تستخدم وثائق التثبيت الرسمية الوسم `lts` (دعم طويل الأمد)؛ وهو الذي نعتمده لخادم إنتاج بدل `latest`. تصبح الواجهة متاحة على المنفذ 9443 عبر HTTPS موقَّع ذاتيًا.",{"title":65,"body":66},"أنشئ حساب المسؤول","اقرأ أولًا رمز الإعداد (setup token) من السجلّات: `docker logs portainer`، السطر `setup_token=`. ومنذ الإصدارين 2.43 و2.39.4 تتطلبه أي نسخة جديدة لإنشاء أول مسؤول. ثم افتح ‎`https:\u002F\u002FYOUR_VPS_IP:9443`: يجب إنشاء الحساب خلال 5 دقائق من أول تشغيل، وإلا يتوقف Portainer من تلقاء نفسه لأسباب أمنية (رسالة «timed out for security purposes»). في هذه الحالة يمنحك `docker stop portainer` ثم `docker start portainer` 5 دقائق إضافية. اختر كلمة مرور قوية (12 حرفًا على الأقل).",{"title":68,"body":69},"اعرضه بشكل سليم عبر وكيل عكسي","ضع Caddy أو Nginx Proxy Manager أمام Portainer لتقديم الواجهة على ‎`portainer.mydomain.com` بشهادة Let's Encrypt حقيقية. ثم أغلِق الوصول المباشر إلى المنفذ 9443. انتبه: المنفذ الذي ينشره Docker يتجاوز قواعد `ufw` (يحوّله Docker قبل السلاسل التي يرشّحها ufw)، لذا لا يكفي `ufw deny 9443`. أعد إنشاء الحاوية مع ‎`-p 127.0.0.1:9443:9443` ليبلغها الوكيل المحلي وحده.",{"title":71,"body":72},"انشر أول stack لك","في قائمة «Stacks»، انقر «Add stack»، والصق ملف ‎`docker-compose.yml` في المحرّر (مثلًا تطبيق + PostgreSQL)، سمِّ الـ stack وانقر «Deploy the stack». ينشئ Portainer الحاويات والشبكة والأحجام، وتتابع حالتها في الوقت الحقيقي.",{"type":74,"body":75},"tip","فعّل «Access Controls» في Portainer لتفويض إدارة stack محدد إلى مطوّر دون منحه وصولًا إلى الخادم بأكمله. للمزيد، انشر وكيل Portainer على خادم VPS ثانٍ واربطه بمثيلك الرئيسي: عندئذٍ تدير عدة خوادم Docker من نقطة واحدة. انسخ احتياطيًا بانتظام الحجم `portainer_data`، الذي يحتوي على مستخدميك ونقاط النهاية (endpoints) وتعريفات stacks، إضافةً إلى مجلدات الـ stacks المنشورة من Git (‎`compose\u002F`).",{"type":38,"title":77,"body":78},"النشر من Git عبر تحديثات GitOps","يكفي لصق ملف compose للبدء، لكن الـ stack المرتبط بمستودع Git يُحدَّث وحده ويحتفظ بسجلّه خارج الواجهة. في «Stacks > Add stack» اختر «Git Repository» ثم املأ المصدر والمرجع (الفرع) ومسار ملف compose. يستنسخ Portainer عندئذٍ المستودع في حجم بياناته تحت ‎`compose\u002F\u003Cid الـ stack>`. وهذه الآلية، وحدها، هي موضوع قسم استكشاف الأخطاء أدناه.",{"type":42,"title":80,"items":81},"الإعدادات التي ينبغي معرفتها",[82,83,84,85,86,87],"المصدر والمرجع و«Compose path»: المستودع والفرع ومسار ملف compose من الجذر؛ و«Additional paths» تدمج ملفات YAML أخرى، كخيارات `-f` متعددة.","«GitOps updates» بالاستعلام الدوري: يتحقق Portainer من المستودع على فترات منتظمة («Fetch interval»).","«GitOps updates» عبر webhook: يولّد Portainer عنوان URL يُستدعى من مستودعك أو من GitHub Action لإطلاق التحديث عند الطلب.","«Re-pull image»: يعيد سحب الصور عند كل تحديث، مثل `--pull=always`.","«Force redeployment»: يعيد النشر عند كل فترة أو webhook حتى لو لم يتغير المستودع، فيستبدل التعديلات المحلية.","زر «Pull and redeploy» في صفحة الـ stack: يجلب آخر commit ويعيد النشر فورًا.",{"type":38,"title":89,"body":90},"استكشاف الأخطاء: «Unable to move git repository directory: Target path already exists»","العَرَض بدقة: على stack منشور من Git، يفشل «Pull and redeploy» (أو تحديث GitOps التلقائي) بالرسالة `Unable to move git repository directory: Target path already exists`، ولا تُحدَّث الحاويات. هذه هي المشكلة رقم 10428 في مستودع portainer\u002Fportainer، فُتحت في أكتوبر 2023 مع Portainer CE 2.19.1 (مستودع GitHub خاص، عقدة Edge)، ووُصفت بأنها متقطعة: كان إعادة التشغيل أو الانتظار يزيلها أحيانًا. ولا يزال الإبلاغ عنها مستمرًا في 2026.\n\nالحالة في المصدر، بحسب الفحص في 29 أكتوبر 2026: المشكلة ما زالت مفتوحة. تحمل وسم bug وأولوية «2 - High»، وأُسندت إلى مطوّر في Portainer في يوليو 2026، وانتقل وسم الإصدار المستهدف فيها من 3.0.0 إلى 3.1.0 في أكتوبر 2026. لا يوجد pull request مرتبط بها، والإصلاح الوحيد المقترح commit في fork لأحد المستخدمين لم يُدمج قط. إذن لا يوجد إصلاح رسمي في هذا التاريخ: يبقى الحل البديل أدناه ساريًا، ولا ينبغي انتظار إصدار بعينه لحل المشكلة.",{"type":42,"title":92,"items":93},"الأسباب التي أبلغ عنها المستخدمون (فرضيات لم يؤكدها الناشر)",[94,95,96,97],"مجلد متبقٍّ `\u003Cid>-old` داخل ‎`compose\u002F`: أثناء التحديث يبدو أن Portainer يعيد تسمية مجلد الـ stack إلى `\u003Cid>-old` قبل نقل النسخة الجديدة؛ وإن بقي مجلد من محاولة سابقة فشل النقل.","نشر مقطوع: حاوية Portainer تجمّدت ثم أُعيد تشغيلها في منتصف النشر، أو صفحة أُعيد تحميلها أثناء «Pull and redeploy»، فتركت الحالة غير متسقة لدى عدة مستخدمين (لم يتمكن المشرف من إعادة إنتاجها بهذه الطريقة).","صور ضخمة: اشتبه المُبلِّغ الأول في انتهاء مهلة على stack يضم صورة تقارب 2 غيغابايت.","صيغة فبراير 2026: يصبح الخطأ ‎`stat \u002Fdata\u002Fcompose\u002F61: no such file or directory`، أي أن مجلد الـ stack اختفى. لا يفيد الحل البديل أدناه في هذه الحالة.",{"type":55,"title":99,"steps":100},"حل بديل حذر في 6 خطوات",[101,104,107,110,113,116],{"title":102,"body":103},"حدّد الـ stack ومعرّفه","دوّن اسم الـ stack الفاشل ومعرّفه الرقمي، وهو اسم المجلد ‎`compose\u002F\u003Cid>`. لا تلمس مجلد `\u003Cid>` نفسه أبدًا: المقصود وحده هو مجلد `\u003Cid>-old`.",{"title":105,"body":106},"أوقف Portainer وانسخ الحجم احتياطيًا","أوقف Portainer لتجميد قاعدة بياناته: `docker stop portainer`. ثم أرشِف الحجم كله: ‎`docker run --rm -v portainer_data:\u002Fdata -v \"$PWD\":\u002Fbackup alpine tar czf \u002Fbackup\u002Fportainer_data-before-fix.tgz -C \u002Fdata .`. تأكد من وجود الأرشيف وأنه غير فارغ قبل المتابعة.",{"title":108,"body":109},"اعرض مجلد compose","اعرض محتواه: ‎`docker run --rm -v portainer_data:\u002Fdata alpine ls -la \u002Fdata\u002Fcompose`. ابحث عن مجلد اسمه معرّف الـ stack متبوعًا بـ `-old` (مثل `61-old`).",{"title":111,"body":112},"اعزل المجلد المتبقي دون حذفه","انقله خارج الحجم: ‎`docker run --rm -v portainer_data:\u002Fdata -v \"$PWD\":\u002Fbackup alpine mv \u002Fdata\u002Fcompose\u002F61-old \u002Fbackup\u002F`. استبدل 61 بمعرّفك. يفيد المستخدمون بأن حذف هذا المجلد يكفي؛ وعزله يعطي الأثر نفسه مع إبقاء طريق للتراجع.",{"title":114,"body":115},"أعد التشغيل وكرّر التحديث","`docker start portainer` ثم «Pull and redeploy» على الـ stack. تحقق من أن الحاويات أُعيد إنشاؤها فعلًا بالإصدار الجديد، لا أن رسالة الخطأ اختفت فحسب.",{"title":117,"body":118},"إن استمر الفشل","إن لم يوجد مجلد `-old` أو كان مجلد `\u003Cid>` غائبًا، فلا ينطبق هذا الحل البديل. والحل المُبلَّغ عنه حينها هو حذف الـ stack وإعادة إنشائه من Git. قبل ذلك تأكد من أن بيانات تطبيقك في أحجام مسمّاة وانسخها احتياطيًا. لا تستعد أرشيف الخطوة 2 إلا إذا ساء شيء.",{"type":74,"body":120},"الوقاية. ليس أي من هذه التدابير إصلاحًا مضمونًا، فالناشر لم يؤكد السبب: إنها تقلّل فقط فرص ترك مجلد `-old` خلفك. لا تُعد تحميل الصفحة ولا تُعد تشغيل Portainer أثناء «Pull and redeploy». اسحب الصور الضخمة مسبقًا بـ `docker pull` لتقصير النشر. بعد كل تحديث فاشل، تحقق فورًا من وجود مجلد `-old` في ‎`compose\u002F`. انسخ `portainer_data` احتياطيًا قبل تحديث Portainer. للخدمة الحرجة، لا تعتمد على زر الواجهة وحده: احتفظ بنشر احتياطي عبر `docker compose pull && docker compose up -d` على الخادم. تابع المشكلة #10428 لتعرف متى يصل الإصلاح.",{"type":38,"title":122,"body":123},"تثبيت Portainer من متجر ServOrbit","كل ما سبق يمكن تنفيذه يدويًا، ومن المفيد معرفة كيفية القيام بذلك. وإن كنت تفضّل عدم القيام بذلك، فإن Portainer CE متاح في [متجر ServOrbit](\u002Fapplications\u002Fنشر-التطبيقات-وdevops\u002Fportainer) ويُثبَّت على خادم VPS بنقرة واحدة. يُنشر القالب بصورة ‎`portainer\u002Fportainer-ce:latest` عبر Docker Compose، ويُركّب مقبس ‎`\u002Fvar\u002Frun\u002Fdocker.sock` وينشئ حجم `portainer_data` للحفاظ على البيانات — دون الحاجة إلى جلسة SSH للإعداد الأساسي. الواجهة غير منشورة على الإنترنت: يربطها القالب بالعنوان المحلي للخادم (‎`127.0.0.1`، منفذ HTTP رقم 9000)، فتصل إليها عبر نفق SSH أو بإضافة نطاق مخصص من مساحة العميل. عند أول دخول يرشدك Portainer عبر معالج إعداد لإنشاء حساب المسؤول: وإن طلب رمز إعداد (setup token) فهو في سجلّات الحاوية (`docker compose logs`، السطر `setup_token=`). وكأي قالب في المتجر، يُقدَّم كدليل تثبيت، دون دعم للتطبيق نفسه. وإن فضّلت البقاء على فرع الدعم طويل الأمد، فاستبدل الوسم `latest` بـ `lts` في ملف compose.","أدِر Docker بصريًا باستخدام Portainer","خادم VPS Cloud من ServOrbit يُسلَّم مع Docker جاهز للاستخدام يتيح لك تثبيت Portainer بأمر واحد وقيادة جميع حاوياتك من واجهة ويب واضحة.","احصل على خادم VPS Cloud الخاص بي","\u002Fapplications\u002Fنشر-التطبيقات-وdevops\u002Fportainer",[129,151,174],{"id":130,"slug":131,"slugs":132,"title":136,"excerpt":137,"readTime":138,"views":18,"isPinned":19,"noindex":19,"publishedAt":139,"updatedAt":140,"category":141,"categories":146,"featuredImage":29,"bgImage":30,"posterImage":148,"relatedSolution":149},104,"portainer-مقابل-dokploy-أي-واجهة-لإدارة-docker",{"fr":133,"en":134,"ar":131,"es":135},"portainer-vs-dokploy","portainer-vs-dokploy-which-docker-management-interface","portainer-vs-dokploy-interfaz-de-gestion-docker","‏Portainer مقابل Dokploy: أيهما تختار في 2026؟","مقارنة شاملة بين ‏Portainer 2.x‏ و‏Dokploy‏ على خادم VPS: ثغرات CVE الحرجة، نهاية الإصدار المجتمعي، والانتقال خطوة بخطوة.",12,"2026-03-08T00:00:00+00:00","2026-11-08T01:13:15+00:00",{"id":142,"name":143,"slug":144,"color":145,"icon":144},5,"مقارنات","comparatif","bg-info\u002F10 text-info",[147],{"id":142,"name":143,"slug":144,"color":145,"icon":144},"\u002Fblog\u002Fcovers\u002Fportainer-vs-dokploy-poster.svg",{"categorySlug":33,"appSlug":150},"dokploy",{"id":152,"slug":153,"slugs":154,"title":158,"excerpt":159,"readTime":160,"views":18,"isPinned":19,"noindex":19,"publishedAt":161,"updatedAt":162,"category":163,"categories":169,"featuredImage":29,"bgImage":30,"posterImage":171,"relatedSolution":172},161,"استضافة-dockge-على-vps-مدير-مرئي-لـ-docker-compose",{"fr":155,"en":156,"ar":153,"es":157},"self-host-dockge-vps","how-to-self-host-dockge-on-a-vps-visual-docker-compose-manager","alojar-dockge-en-un-vps","استضافة Dockge على VPS: مدير مرئي لـ Docker Compose","انشر Dockge على خادم VPS الخاص بك — مدير مرئي خفيف ومفتوح المصدر لحُزم Docker Compose. أنشئ تطبيقات متعددة الحاويات وحرّرها وراقبها من واجهة ويب أنيقة، دون سطر الأوامر.",4,"2026-07-03T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":164,"name":165,"slug":166,"color":167,"icon":168},7,"الاستضافة الذاتية","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[170],{"id":164,"name":165,"slug":166,"color":167,"icon":168},"\u002Fblog\u002Fcovers\u002Fself-host-dockge-vps-poster.svg",{"categorySlug":33,"appSlug":173},"dockge",{"id":175,"slug":176,"slugs":177,"title":181,"excerpt":182,"readTime":17,"views":183,"isPinned":19,"noindex":19,"publishedAt":184,"updatedAt":21,"category":185,"categories":186,"featuredImage":29,"bgImage":30,"posterImage":188,"relatedSolution":189},33,"انشر-تطبيقاتك-باستخدام-caprover-على-خادم-vps",{"fr":178,"en":179,"ar":176,"es":180},"deployer-avec-caprover","deploy-your-applications-with-caprover-on-a-vps","desplegar-aplicaciones-con-caprover-en-un-vps","انشر تطبيقاتك باستخدام CapRover على خادم VPS","دليل CapRover الشامل: التثبيت، captain-definition، CI\u002FCD مع GitHub Actions، الكتلة متعددة العقد، النسخ الاحتياطية وإصلاح أخطاء 502 وBuild Failed وDocker API.",2,"2026-05-18T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[187],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-caprover-poster.svg",{"categorySlug":33,"appSlug":190},"caprover",true,1794270258353]