دليل النشر

‏Portainer مقابل Dokploy: أيهما تختار في 2026؟

انشر على VPS Cloud ←

مقارنة

مقارنات

‏Portainer مقابل Dokploy: أيهما تختار في 2026؟

‏Portainer‏ و‏Dokploy‏ واجهتا ويب لإدارة حاويات ‏Docker‏ على خادم ‏VPS‏. ‏Portainer‏ الأداة التاريخية — مستقرة وموثقة، لكنها تواجه تحديات في 2026 بسبب نهاية الإصدار المجتمعي وثغرات ‏CVE‏ بدرجة 9.4. ‏Dokploy‏ هو البديل مفتوح المصدر، الجاهز للـ‏PaaS‏، ويعالج بالضبط ما لم يعد ‏Portainer CE‏ يغطيه. هذا الدليل يحسم الاختيار: المعمارية، التراخيص، الأمان، والانتقال.

12 دقيقةً للقراءةعدد الخطوات: 10
المحتويات· لماذا تستضيف واجهة نشر على خادم VPS؟1/14
  1. 01لماذا تستضيف واجهة نشر على خادم VPS؟
  2. 02ما تكسبه بنشر هذا القالب على خادم VPS
  3. 03وضع Portainer في 2026: نهاية الإصدار المجتمعي
  4. 04ثغرات CVE الحرجة في Portainer 2.x: التحقق والتصحيح
  5. 05ثغرة CVE في Dokploy: السر المضمّن في الكود (< 0.29.3)
  6. 06المتطلبات الأساسية لاستضافة Portainer أو Dokploy
  7. 07الموارد الدنيا الموصى بها
  8. 08نشر Dokploy على خادم VPS (نسخة ≥ 0.29.13)
  9. 09Portainer كبديل — التثبيت السريع
  10. 10‏Portainer 2.x‏ مقابل ‏Dokploy‏ — مقارنة شاملة 2026
  11. 11متى تبقى على Portainer، ومتى تنتقل إلى Dokploy؟
  12. 12الانتقال من Portainer إلى Dokploy: خطوات ملموسة
  13. 13استكشاف الأخطاء: المشكلات الشائعة
  14. 14الأداتان ليستا حصرية دائماً

لماذا تستضيف واجهة نشر على خادم VPS؟

خادم ‏VPS‏ مزود بـ‏Docker‏ يترك لك واجهة وحيدة: سطر الأوامر. هذا كافٍ لجهاز واحد، مرهق لخمسة، وغير قابل للإدارة لفريق كامل. تجمع واجهة الويب السجلات وتحديثات الصور ومتغيرات البيئة وشهادات ‏TLS‏ في مكان واحد — دون الحاجة إلى خط أنابيب ‏CI/CD‏ متكامل منذ اليوم الأول.

تتنافس عائلتان: المديرون (‏Portainer‏، ‏Yacht‏) الذين يعرضون ‏Docker‏ كما هو، وPaaS الخفيف (‏Dokploy‏، ‏Coolify‏، ‏CapRover‏) الذي يضيف طبقة نشر — فروع ‏Git‏، نطاقات تلقائية، شهادات ‏Let's Encrypt‏. الفرق ليس شكلياً: يحدد ما إذا كان مطوروك قادرين على النشر بأنفسهم أم يحتاجون إلى وصول ‏SSH‏.

ما تكسبه بنشر هذا القالب على خادم VPS

  • ‏النشر من ‏Git‏ أو ‏Docker Hub‏ بنقرات قليلة، دون ‏SSH
  • ‏إدارة تلقائية لشهادات ‏TLS‏ عبر ‏Let's Encrypt
  • ‏متغيرات بيئة ذات إصدار، معزولة لكل مشروع
  • ‏سجلات مركزية وطرفية ويب من المتصفح
  • ‏لوحة صحة: ‏CPU‏، ‏RAM‏، حالة الحاويات
  • ‏إدارة الأقراص والشبكات في ‏Docker‏ دون حفظ الأوامر

وضع Portainer في 2026: نهاية الإصدار المجتمعي

كان ‏Portainer CE‏ (الإصدار المجتمعي) المرجع لسنوات. مع ‏Portainer 3‏، أوقفت الشركة الإصدار المجتمعي: لا يوجد إصدار ‏CE‏ في ‏Portainer 3‏، و‏CE 2.45‏ هو آخر إصدار مجتمعي. يُوزَّع ‏Portainer 3‏ بصيغة ‏Business Edition‏ (مجانًا حتى ثلاث عقد عبر ترخيص ‏«3 Nodes Free»‏)، ويمنح الأولوية لـ‏Kubernetes‏ في الميزات الجديدة مع الإبقاء على ‏Docker‏ و‏Swarm‏ و‏Podman‏. تواصل نسخ ‏CE 2.45‏ العمل وتتلقى تصحيحات ‏2.45 LTS‏ حتى أغسطس 2027، لكن دون أي ميزة جديدة.

لهذا التحول نتائج عملية متعددة. أولًا، عمليات التثبيت الجديدة التي تبحث عن واجهة ‏Docker‏ مجانية لا تجد خارطة طريق لـ‏CE‏. ثانيًا، صور portainer/portainer-ce لا تزال موجودة وتتلقى تصحيحات الفرع 2.45، لكنها لن تتطور بعد الآن. وبشكل حاسم — تراكمت على ‏Portainer 2.x‏ ثغرات حرجة، منها ثغرتا ‏CVE‏ بدرجة 9.4، تبقى قابلة للاستغلال على أي تثبيت غير محدّث.

إن كنت لا تزال تشغّل ‏Portainer 2.x‏، فالسؤال ليس «هل أنتقل بالمبدأ»: بل «هل نسختي محدّثة، وهل المخاطرة مقبولة؟»

ثغرات CVE الحرجة في Portainer 2.x: التحقق والتصحيح

تؤثر ثغرتان على جميع فروع ‏Portainer‏ حتى النسخ المصححة أدناه (النسخ السابقة لـ2.33.0 منتهية الدعم ولن تُصحَّح):

CVE-2026-44848‏ (CVSS 9.4) — نقاط النهاية /plugins/* في واجهة ‏Docker API‏ التي يمررها ‏Portainer‏ تفلت من فحص الصلاحيات. يستطيع مستخدم عادي (غير مدير) لديه وصول إلى بيئة ‏Docker‏ تثبيت ملحق ‏Docker‏ وتفعيله، فيعمل بصلاحيات ‏root‏ على مضيفك.

CVE-2026-44849‏ (CVSS 9.4) — يمكن تجاوز آلية قيود ‏Swarm‏: مستخدم ‏Portainer‏ بصلاحيات مخفضة قادر على تنفيذ إجراءات محجوزة للمدير على مجموعة ‏Swarm‏.

النسخ المصححة: 2.33.8، 2.39.2، 2.41.0. نُشرت منذ ذلك الحين ثغرات حرجة أخرى، صُحّحت في 2.45.2 و2.45.3 ولا تصحيح لها في الفرع 2.39: استهدف 2.45.3 ‏LTS‏، آخر إصدار منشور في 7 نوفمبر 2026.

للتحقق من نسختك:

docker exec portainer /portainer --version

للتحديث:

docker pull portainer/portainer-ce:lts
docker stop portainer
docker rm portainer
docker run -d \
  --name=portainer \
  --restart=always \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

إن كنت دون 2.45.3، حدّث قبل الاستمرار في استخدام التثبيت. هذا الأمر ينشر الواجهة على 127.0.0.1 فقط: ادخل إليها عبر نفق ‏SSH‏ (ssh -L 9443:127.0.0.1:9443 user@your-vps ثم https://localhost:9443) أو عبر وكيل عكسي. أضف -p 8000:8000 فقط إن كنت تستخدم وكلاء ‏Edge‏. ‏Portainer‏ المكشوف على الإنترنت دون تصحيح يمثل ناقل اختراق مباشر لمضيف ‏Docker‏ لديك.

ثغرة CVE في Dokploy: السر المضمّن في الكود (< 0.29.3)

‏Dokploy‏ ليس بمنأى عن الثغرات. CVE-2026-45631‏ (CVSS 10.0) أثّرت على التثبيتات الافتراضية السابقة لـ0.29.3: عندما لا يكون المتغير BETTER_AUTH_SECRET معرّفًا — ولم يكن سكريبت التثبيت يعرّفه —، كان الكود يلجأ إلى قيمة مضمّنة ثابتة، متطابقة في جميع التثبيتات. كان بإمكان أي شخص تزوير رمز والاستيلاء على حساب المدير دون مصادقة.

وصل التصحيح في 0.29.3، مع سكريبت ترحيل يُشغَّل بعد التحديث. وصُحّحت ثغرات حرجة كثيرة أخرى (حقن أوامر، غياب ضوابط الوصول) حتى 0.29.13: لا تبقَ دونها، واستهدف آخر إصدار (0.31.0 في 7 نوفمبر 2026). للتحقق والتحديث:

# التحقق من الإصدار المثبت (وسم صورة الخدمة)
docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'

# التحديث عبر السكريبت الرسمي
curl -sSL https://dokploy.com/install.sh | sh -s update

منذ 0.29.3، يقرأ ‏Dokploy‏ قيمة BETTER_AUTH_SECRET من سر ‏Docker‏ (المتغير BETTER_AUTH_SECRET_FILE). بعد التحديث، تحقق من أن الخدمة تستخدمه:

docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

إن غاب السطر، شغّل سكريبت الأمان الرسمي المنشور مع 0.29.3: يولّد سرًا فريدًا ويحدّث الخدمة.

curl -sSL https://dokploy.com/security/0.29.3.sh | bash

المتطلبات الأساسية لاستضافة Portainer أو Dokploy

كلا الأداتين تعملان على ‏Docker‏. يحتاج ‏Dokploy‏ إلى موارد أكثر قليلاً لأنه يتضمن قاعدة بيانات ‏PostgreSQL‏ ووكيل ‏Traefik‏ إلى جانب الخدمة الرئيسية.

الموارد الدنيا الموصى بها

  • ‏Portainer 2.x: لا تنشر الشركة حدًا أدنى للعتاد؛ الإصدار 2.45.3 معتمد مع ‏Docker 28.5.1‏ و29.8.1 — يعمل على خادم ‏VPS‏ صغير
  • ‏Dokploy: ‏2 غيغابايت RAM‏ و30 غيغابايت قرص على الأقل وفق الوثائق الرسمية — يعمل ‏PostgreSQL‏ و‏Traefik‏ إلى جانب الخدمة الرئيسية
  • ‏نطاق أو نطاق فرعي يشير إلى خادمك (‏Dokploy‏ يحتاجه للشهادات التلقائية)
  • ‏المنفذان 80 و443 مفتوحان إذا استخدمت ‏Let's Encrypt‏ عبر ‏Traefik‏ (‏Dokploy‏)
  • ‏وصول ‏SSH‏ بصلاحية ‏root‏ أو ‏sudo‏ للتثبيت الأولي

نشر Dokploy على خادم VPS (نسخة ≥ 0.29.13)

  1. التثبيت عبر السكريبت الرسمي

    الطريقة الأبسط والأكثر تحديثاً:

    curl -sSL https://dokploy.com/install.sh | sh

    يُثبّت السكريبت ‏Docker‏ إن لزم، ويهيّئ ‏Docker Swarm‏، وينشئ الخدمتين dokploy وdokploy-postgres والحاوية dokploy-traefik (الإعدادات في /etc/dokploy/)، ويولّد BETTER_AUTH_SECRET عشوائيًا يُخزَّن في سر ‏Docker‏، ثم يشغّل كل شيء.

  2. التحقق من BETTER_AUTH_SECRET

    بعد التثبيت، تأكد من أن الخدمة تقرأ سرّها:

    docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

    يجب أن ترى سطرًا BETTER_AUTH_SECRET_FILE=/run/secrets/...: تبقى القيمة (64 حرفًا ست عشريًا يولّدها openssl rand -hex 32) داخل سر ‏Docker‏ ولا تظهر بنص واضح أبدًا. إن غاب السطر (تثبيت قديم)، شغّل سكريبت الأمان الرسمي:

    curl -sSL https://dokploy.com/security/0.29.3.sh | bash
  3. الوصول إلى الواجهة وإنشاء حساب المدير

    ‏Dokploy‏ يستمع على المنفذ 3000 افتراضياً. افتح http://<ip-خادمك>:3000 في المتصفح. تطلب منك الزيارة الأولى إنشاء حساب المدير. افعل ذلك فوراً — الواجهة عامة حتى يوجد هذا الحساب.

  4. ضبط النطاق وتفعيل HTTPS

    في Settings → Web Server → Server Domain، أدخل ‏FQDN‏ (dokploy.yourdomain.com). ‏Traefik‏ يسترد تلقائيًا شهادة ‏Let's Encrypt‏ عبر ‏ACME HTTP-01‏. يجب أن يشير ‏DNS‏ إلى الخادم قبل هذه الخطوة. بعد أن تُقدَّم الواجهة عبر ‏HTTPS‏، أغلق المنفذ 3000 أمام الإنترنت كما يوصي دليل تقوية ‏Dokploy‏: ‏ufw‏ وحده لا يرشّح المنافذ التي ينشرها ‏Docker‏، فاستخدم ufw-docker أو جدار الحماية لدى مزوّدك.

  5. تحديث Dokploy

    ‏Dokploy‏ يعرض زر تحديث في Settings → Web Server، أو استخدم السكريبت:

    curl -sSL https://dokploy.com/install.sh | sh -s update

    مع الوسيط update، يسحب السكريبت صورة آخر إصدار ويحدّث الخدمة dokploy دون المساس بإعداداتك أو مشاريعك. ودون هذا الوسيط، يعيد تثبيتًا كاملًا يفشل على خادم مثبَّت مسبقًا (المنافذ 80 و443 و3000 مشغولة).

Portainer كبديل — التثبيت السريع

إذا فضّلت البقاء على ‏Portainer‏ (تثبيت قائم أو اختيار مقصود)، الأمر المرجعي:

docker run -d \
  --name=portainer \
  --restart=always \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

الوصول عبر نفق ‏SSH‏ (ssh -L 9443:127.0.0.1:9443 user@your-vps ثم https://localhost:9443) أو عبر وكيل عكسي. استبدل lts بـ 2.45.3 لتثبيت الإصدار وتجنب التحديثات الصامتة.

‏Portainer 2.x‏ مقابل ‏Dokploy‏ — مقارنة شاملة 2026

مرّر الجدول أفقيًا

المعيار‏Portainer 2.x‏Dokploy
الترخيص‏CE‏ مجاني (ترخيص ‏zlib‏)‏Apache 2.0‏ (باستثناء المجلد ‏/proprietary‏)
مستقبل CE‏CE‏ يتوقف عند 2.45 (تصحيحات حتى أغسطس 2027)خارطة طريق فاعلة، مجتمع متنامٍ
ثغرات CVE الفاعلة‏CVE-2026-44848‏ + 44849 (‏CVSS 9.4‏) وتنبيهات لاحقة: استهدف 2.45.3‏CVE-2026-45631‏ (‏CVSS 10.0‏) إن كانت النسخة < 0.29.3؛ استهدف ≥ 0.29.13
‏RAM‏ الدنياغير منشورة (أداة خفيفة)‏2 غيغابايت (‏PostgreSQL‏ + ‏Traefik‏ مضمّنان)
نشر من Gitنعم (‏stacks Compose‏ من مستودع ‏Git‏)‏نعم (‏GitHub‏، ‏GitLab‏، ‏Gitea‏، ‏Bitbucket‏)
شهادات TLSيدوية (وكيل عكسي خارجي)‏تلقائية عبر ‏Let's Encrypt‏ بواسطة ‏Traefik
قوالب التطبيقاتنعم (مكتبة مدمجة)‏نعم (‏Docker Compose‏ مستورد)
سجل خاصنعمنعم
‏CI/CD‏ مدمجتحديثات ‏GitOps‏ (‏polling‏ أو ‏webhook‏)‏Webhooks‏ لـ‏Git‏ + إشعارات
Kubernetesنعم (‏CE‏ و‏BE‏)لا (‏Docker Compose‏ / ‏Swarm‏)
متعدد الخوادم‏نعم (نقاط النهاية)نعم (خوادم بعيدة عبر ‏SSH‏)
الواجهةناضجة وشاملةعصرية، موجّهة للمشاريع

متى تبقى على Portainer، ومتى تنتقل إلى Dokploy؟

البقاء على ‏Portainer 2.x‏ منطقي في ثلاث حالات: تدير مجموعة ‏Docker Swarm‏ أو ‏Kubernetes‏ بإعدادات معقدة؛ لديك فرق تتقن الواجهة مع أدلة تشغيل موثقة؛ أو تحتاج مستوى التفصيل في الشبكات والأقراص الذي يعرضه ‏Portainer‏ نصاً.

في هذه الحالات، الشرط غير القابل للتفاوض هو وجود نسخة محدّثة (2.45.3 في 7 نوفمبر 2026) وتقييد الوصول إلى الواجهة: لا تكشف المنفذ 9000/9443 مباشرة على الإنترنت، ضع ‏Portainer‏ خلف وكيل عكسي بمصادقة إضافية إن كان مستخدمون غير إداريين يصلون إليه.

الانتقال إلى ‏Dokploy‏ هو القرار الصحيح إذا: بدأت من صفر على خادم ‏VPS‏ جديد؛ تريد أن ينشر مطوروك من ‏Git‏ دون ‏SSH‏؛ تدير نطاقات متعددة ولا تريد الحفاظ يدويًا على ‏Nginx‏/‏Traefik‏؛ أو تبحث عن بديل بعد نهاية ‏CE‏ (لا يوجد إصدار مجتمعي في ‏Portainer 3‏) لاستخدامك في ‏Docker‏.

الانتقال من Portainer إلى Dokploy: خطوات ملموسة

  1. تصدير مخزون Portainer الخاص بك

    قبل الانتقال، رتّب قائمة بالـ‏stacks‏ والحاويات الفاعلة:

    docker ps --format 'table {{.Names}}	{{.Image}}	{{.Status}}'
    docker volume ls
    docker network ls --filter driver=bridge

    لكل ‏stack‏ في ‏Portainer‏، استرد docker-compose.yml من الواجهة (‏Stacks‏ → ‏stack‏ → ‏Editor‏) أو من نظام الملفات.

  2. نسخ احتياطي لأقراص البيانات

    تحتوي الأقراص المسماة على بيانات تطبيقاتك. انسخها احتياطياً قبل أي عملية:

    docker run --rm \
      -v <اسم_القرص>:/data \
      -v $(pwd):/backup \
      alpine tar czf /backup/<اسم_القرص>.tar.gz /data

    كرر العملية لكل قرص حيوي.

  3. تثبيت Dokploy على نفس الخادم VPS أو خادم مخصص

    عند الانتقال على نفس المضيف، أوقف ‏Portainer‏ أولاً لتحرير المنافذ:

    docker stop portainer && docker rm portainer

    ثم شغّل تثبيت ‏Dokploy‏ (انظر الإجراء أعلاه). يستخدم ‏Dokploy‏ وكيل ‏Traefik‏ على المنفذين 80/443 — تحقق من أن لا خدمة أخرى تشغلهما.

  4. إعادة إنشاء مشاريعك في Dokploy

    في ‏Dokploy‏، أنشئ Compose Project لكل ‏stack‏ في ‏Portainer‏:
    1. ‏Projects‏ → مشروع جديد
    2. أضف خدمة من نوع Docker Compose
    3. الصق docker-compose.yml أو أشر إلى مستودع ‏Git‏
    4. ضبط متغيرات البيئة من تبويب Environment
    5. خصّص نطاقاً — يضبط ‏Dokploy‏ وكيل ‏Traefik‏ تلقائياً

  5. التحقق وتبديل DNS

    انشر أولاً على نطاق فرعي تجريبي (test.yourdomain.com). بعد التحقق، حدّث إدخالات ‏DNS‏ لتشير إلى ‏Dokploy‏. يصدر ‏Traefik‏ الشهادات تلقائياً حالما ينتشر ‏DNS‏.

استكشاف الأخطاء: المشكلات الشائعة

‏Portainer‏ — الواجهة لا يمكن الوصول إليها بعد التحديث
تحقق من تحميل القرص portainer_data بشكل صحيح. تحديث دون قرص مسمى يبدأ من قاعدة فارغة ويطلب إنشاء حساب المدير مجدداً.

‏Portainer‏ — TLS handshake error‏ على المنفذ 9443
ينشئ ‏Portainer‏ شهادة موقعة ذاتياً. متصفحك يحذرك بحق. ضع ‏Portainer‏ خلف وكيل عكسي (‏nginx‏، ‏Caddy‏) بشهادة حقيقية للوصول الآمن في الإنتاج.

‏Dokploy‏ — ‏Traefik‏ لا يولّد شهادة
السبب الأكثر شيوعاً: ‏DNS‏ لم ينتشر بعد نحو الخادم ‏VPS‏. تحقق بـ dig +short yourdomain.com. يتوقف ‏Traefik‏ على استجابة ‏DNS‏ صالحة قبل إطلاق تحدي ‏ACME‏. إن كان ‏DNS‏ صحيحاً، تحقق من فتح المنفذ 80 (ufw allow 80).

‏Dokploy‏ — نشر ‏Git‏ يفشل بصمت
تحقق من سجلات الخدمة في الواجهة (‏Deployments‏ → تبويب ‏Logs‏). في مستودع خاص، سبب شائع هو غياب مفتاح ‏SSH‏ أو عدم السماح له في المستودع. يتيح ‏Dokploy‏ إنشاء مفتاح في Settings → SSH Keys (زر Create SSH Key) لإضافته كمفتاح نشر في المستودع؛ أما مع ‏GitHub‏ أو ‏GitLab‏ أو ‏Gitea‏ أو ‏Bitbucket‏ فيمكنك أيضًا ربط المزوّد في إعدادات Git في ‏Dokploy‏.

الأداتان ليستا حصرية دائماً

يستطيع ‏Portainer‏ إدارة عدة نقاط نهاية ‏Docker‏ بعيدة من واجهة واحدة — بما فيها خادم ‏VPS‏ مثبت عليه ‏Dokploy‏. بعض الفرق تحتفظ بـ‏Portainer‏ أداةً للمراقبة وبـ‏Dokploy‏ أداةً للنشر. هذا ليس نمطاً مضاداً إن كانت الأدوار محددة بوضوح. الثمن: سطحان للتصحيح. إن اخترت هذه المعمارية، تأكد من أن الأداتين محدّثتان — راجع ثغرات ‏CVE‏ في مطلع المقالة.

للمزيد: البدائل لـ‏Portainer CE، دليل النشر الكامل مع ‏Dokploy والتحديث الحرج لثغرات ‏CVE‏ في ‏Dokploy‏ 2026.

انشر Dokploy على خادمك VPS في دقائق

على ‏VPS‏ من ‏ServOrbit‏ بوصول root، يُثبَّت ‏Dokploy‏ يدوياً ويتولّى إعداد ‏Docker‏ و‏Traefik‏ وشهادات ‏TLS‏. ثبّت نسخة ≥ 0.29.13 مصحّحة وجاهزة للإنتاج.