دليل عملي

النشر

انشر تطبيقاتك باستخدام Dokku على خادم VPS

يقدّم ‏Dokku‏ نفسه بوصفه «أصغر منصة ‏PaaS‏ في العالم». مبنيٌّ حول ‏Docker‏ و‏buildpacks‏ الخاصة بـ ‏Heroku‏، ويوفّر تجربة نشر عبر ‏`git push`‏ على خادم ‏VPS‏ متواضع دون واجهة ثقيلة أو منسّق مضمّن. يتجاوز هذا الدليل التثبيت الأساسي؛ إذ يشمل المتغيرات البيئية، والرجوع بلا توقف (‏rollback‏)، والإضافات الأساسية، وحلول الأخطاء الأكثر شيوعاً.

11 دقيقةً للقراءةعدد الخطوات: 6
المحتويات· لماذا تختار Dokku لخادم VPS الخاص بك1/10
  1. 01لماذا تختار Dokku لخادم VPS الخاص بك
  2. 02نقاط قوة Dokku الملموسة
  3. 03المتطلبات الرقمية لـ Dokku
  4. 04ثبّت Dokku v0.38.x وانشر تطبيقاً أولاً
  5. 05إدارة تطبيقات متعددة ومتغيرات البيئة
  6. 06التحديثات بلا توقف والرجوع للإصدار السابق
  7. 07الإضافات الأساسية
  8. 08Dokku مقابل CapRover مقابل Easypanel — مقارنة 2026
  9. 09حل المشكلات الشائعة
  10. 10للمزيد

لماذا تختار Dokku لخادم VPS الخاص بك

حيث تُضمّن حلول ‏PaaS‏ الأخرى واجهة ويب ومنسّقاً كاملاً، يبقى ‏Dokku‏ بسيطاً عن قصد: إذ هو مجموعة سكربتات ‏shell‏ تقود ‏Docker‏. تدفع شفرتك بـ ‏git push dokku main‏، فيكتشف ‏Dokku‏ اللغة عبر ‏buildpacks‏ الخاصة بـ ‏Heroku‏ أو ‏Dockerfile‏، ويبني الصورة ويضع التطبيق على الإنترنت. تُدار كل الأمور من سطر الأوامر ما يجعله خفيفاً للغاية وقابلاً للتنبؤ.

‏CapRover‏ و‏Coolify‏ و‏Easypanel‏ توفّر جميعها واجهة رسومية لكن بكلفة ذاكرة أعلى بكثير: ‏CapRover‏ يحتاج إلى 2 غيغابايت من ‏RAM‏ كحدٍّ أدنى، و‏Coolify‏ 4 كذلك بسبب ‏PostgreSQL‏ المضمّنة، أما ‏Easypanel‏ فيستهلك 2 غيغابايت حين يكون البناء نشطاً. ‏Dokku‏ بالمقابل يعمل من ‏512‏ ميغابايت من ‏RAM‏ لتطبيق خفيف ولا يُضيف أيّ مكوّن مراقبة دائم.

نقاط قوة Dokku الملموسة

  • بصمة ذاكرة ضئيلة: يعمل من ‏512‏ ميغابايت من ‏RAM‏ لتطبيق خفيف، و1 غيغابايت بأريحية.
  • النشر عبر ‏git push‏، تماماً كما في ‏Heroku‏، مع اكتشاف تلقائي للغة عبر ‏buildpacks‏.
  • دعم أصيل لـ ‏buildpacks‏ الخاصة بـ ‏Heroku‏ (‏Node‏ و‏Python‏ و‏Ruby‏ و‏Go‏ و‏PHP‏...) ولملفات ‏Dockerfile‏.
  • إضافات رسمية لـ ‏PostgreSQL‏ و‏MySQL‏ و‏Redis‏ و‏MongoDB‏، تُدار بالكامل عبر سطر الأوامر.
  • إضافة ‏Let's Encrypt‏ لتفعيل ‏HTTPS‏ تلقائياً مع التجديد عبر ‏cron‏.
  • عمليات نشر بلا توقف (‏zero-downtime‏) بفضل فحوصات السلامة القابلة للتهيئة قبل تبديل الحاوية.
  • رجوع فوري (‏rollback‏) عبر ‏dokku tags‏ و‏dokku deploy‏ على صورة سابقة.
  • حقن تلقائي لمتغيرات الاتصال (‏DATABASE_URL‏ و‏REDIS_URL‏) عند ‏plugin:link‏.

المتطلبات الرقمية لـ Dokku

‏Dokku‏ هو أكثر منصات ‏PaaS‏ اقتصاداً في الموارد ضمن هذه السلسلة.

‏RAM‏. 512 ميغابايت تكفي لتطبيق خفيف. خصّص 1 غيغابايت للاستخدام اليومي، و2 غيغابايت حين تستخدم ‏buildpacks‏ أو تستضيف قاعدة بيانات على الخادم نفسه. لعدة تطبيقات مع ‏PostgreSQL‏ في آنٍ واحد، استهدف 4 غيغابايت.

المعالج. ‏vCPU‏ واحد يكفي للتطبيقات الخفيفة. مراحل بناء ‏buildpack‏ تستهلك الكثير من المعالج لكنها لا تمنع التشغيل.

القرص. 20 غيغابايت من ‏SSD‏ كحدٍّ أدنى. صور ‏Docker‏ الخاصة بـ ‏buildpacks‏ قد تزن مئات الميغابايتات.

‏Swap‏. على خادم ‏VPS‏ بذاكرة 1 أو 2 غيغابايت، أضِف 2 غيغابايت من ‏swap‏ دوماً لتفادي ‏OOM killer‏.

النظام. ‏Ubuntu 22.04 LTS‏ أو ‏24.04 LTS‏ مثبَّت حديثاً، بدون ‏Docker‏ أو ‏Nginx‏ مسبق التثبيت. المنافذ ‏22‏ (‏SSH‏) و‏80‏ و‏443‏ يجب أن تكون مفتوحة.

‏DNS‏. هيّئ إمّا نطاقاً لكل تطبيق أو نطاق ‏wildcard‏ ‏*.your-domain.com‏ يشير إلى عنوان ‏IP‏ الخادم.

ثبّت Dokku v0.38.x وانشر تطبيقاً أولاً

  1. تنزيل سكربت الاستدعاء الرسمي وتشغيله

    على نظام ‏Ubuntu 22.04‏ أو ‏24.04 LTS‏ نظيف، نزّل سكربت التثبيت وشغّله:

    wget -NP . https://dokku.com/bootstrap.sh
    sudo DOKKU_TAG=v0.38.x bash bootstrap.sh

    يثبّت السكربت ‏Docker‏ (إن لم يكن موجوداً) و‏Nginx‏ و‏Dokku‏.

  2. تهيئة النطاق العام وإضافة مفتاح SSH

    حدّد النطاق الجذر الذي سيستخدمه ‏Dokku‏ لبناء النطاقات الفرعية للتطبيقات:

    dokku domains:set-global your-domain.com

    ثم أضِف مفتاح ‏SSH‏ العام الخاص بك:

    cat ~/.ssh/id_ed25519.pub | ssh [email protected] "dokku ssh-keys:add admin"
  3. إنشاء تطبيق وتهيئة المستودع البعيد (Git remote)

    على الخادم، أنشئ التطبيق المستهدف:

    dokku apps:create my-app

    على جهازك المحلي، أضِف ‏Dokku‏ كـ ‏remote‏ في مستودعك:

    git remote add dokku [email protected]:my-app

    سينشئ ‏Dokku‏ تلقائياً النطاق الفرعي ‏my-app.your-domain.com‏.

  4. تزويد قاعدة بيانات PostgreSQL

    ثبّت الإضافة الرسمية لـ ‏PostgreSQL‏ (مرة واحدة لكل خادم):

    dokku plugin:install https://github.com/dokku/dokku-postgres.git

    أنشئ قاعدة بيانات واربطها بالتطبيق:

    dokku postgres:create my-db
    dokku postgres:link my-db my-app

    يحقن أمر ‏link‏ تلقائياً المتغير ‏DATABASE_URL‏ في حاوية التطبيق.

  5. نشر التطبيق للمرة الأولى

    من مستودعك المحلي، ادفع إلى ‏Dokku‏:

    git push dokku main

    يكتشف ‏Dokku‏ اللغة، ويُنزّل ‏buildpack‏ المناسب، ويبني صورة ‏Docker‏، ثم يُشغّل الحاوية. تُعرض العملية في الوقت الفعلي على الطرفية.

  6. تفعيل HTTPS مع Let's Encrypt

    ثبّت إضافة ‏Let's Encrypt‏ (مرة واحدة لكل خادم):

    dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

    حدّد البريد الإلكتروني لإشعارات انتهاء الصلاحية، ثم فعّل الشهادة للتطبيق:

    dokku letsencrypt:set my-app email [email protected]
    dokku letsencrypt:enable my-app

    فعّل التجديد التلقائي:

    dokku letsencrypt:cron-job --add

إدارة تطبيقات متعددة ومتغيرات البيئة

يدير ‏Dokku‏ كل تطبيق في حاوية معزولة. يمكنك استضافة أكبر عدد من التطبيقات بحسب قدرة خادم ‏VPS‏ الخاص بك.

المتغيرات البيئية. استخدم ‏dokku config:set‏ لحقن الأسرار أو معاملات الضبط:

dokku config:set my-app NODE_ENV=production \
  SECRET_KEY=changeme

الاختبار مقابل الإنتاج. الممارسة الشائعة هي إنشاء تطبيقَين على الخادم نفسه:

dokku apps:create my-app-staging
dokku apps:create my-app-production

النطاقات المخصصة. لربط نطاق موجود بتطبيق:

dokku domains:add my-app your-domain.com

التحديثات بلا توقف والرجوع للإصدار السابق

يتعامل ‏Dokku‏ مع ‏zero-downtime‏ عبر آلية فحص الصحة قبل التبديل. يمكنك ضبط هذا السلوك بملف ‏CHECKS‏ في جذر مشروعك:

WAIT=10
TIMEOUT=60
/healthz Application is up

التاجات والرجوع للإصدار السابق. يحتفظ ‏Dokku‏ بصور ‏Docker‏ للنشرات السابقة كتاجات. للرجوع:

dokku tags:list my-app
dokku tags:deploy my-app v3

لإنشاء تاج نسخة احتياطية قبل نشر محفوف بمخاطر:

dokku tags:create my-app stable-before-migration

الإضافات الأساسية

‏PostgreSQL‏. الأكثر استخداماً. أوامر إضافية مفيدة: ‏dokku postgres:backup my-db‏ لنسخة يدوية، ‏dokku postgres:connect my-db‏ للوصول التفاعلي.

‏Redis‏.

dokku plugin:install https://github.com/dokku/dokku-redis.git
dokku redis:create my-cache
dokku redis:link my-cache my-app

يحقن المتغير ‏REDIS_URL‏ في الحاوية.

‏Cron‏ (المجدول). أنشئ ملف ‏app.json‏ في جذر مشروعك:

{
  "cron": [
    { "command": "php artisan schedule:run", "schedule": "* * * * *" }
  ]
}

Dokku مقابل CapRover مقابل Easypanel — مقارنة 2026

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

‏المعيار‏‏Dokku 0.35‏‏CapRover 1.x‏‏Easypanel 2.x‏
‏RAM‏ عند الخمول‏~100 ميغابايت‏‏~400 ميغابايت‏‏~350 ميغابايت‏
واجهة رسوميةلا — سطر أوامر فقطنعم (لوحة تحكم ويب)نعم (لوحة تحكم حديثة)
‏Buildpacks‏‏Heroku buildpacks (CNB)‏‏captain-definition / Docker‏‏Nixpacks‏ أو ‏Dockerfile‏
نشر ‏Git‏‏git push‏ أصيل‏caprover CLI‏ + ‏webhook‏‏webhook GitHub / GitLab‏
الإضافات / السوق‏~100 إضافة رسمية‏كتالوج ‏One-Click‏ (~150 تطبيق)سوق مدمجة (~200 تطبيق)
‏Zero-downtime‏نعم (ملف ‏CHECKS‏)نعم (‏Docker Swarm rolling‏)نعم (‏Traefik labels‏)
الرجوع للإصدار السابق‏dokku tags:deploy‏إعادة بناء من الصورةإعادة نشر من ‏Git‏
متعدد الخوادمليس أصيلاًنعم (‏Docker Swarm‏ متعدد العقد)نعم (وكلاء بعيدون)
‏Kubernetes‏لالا (‏Docker Swarm‏ فقط)لا
الترخيص‏MIT‏‏Apache 2.0‏مملوك (خطة مجانية)
منحنى التعلممنخفض (سطر أوامر بسيط)متوسطمنخفض (واجهة بديهية)

‏Swap‏ موصى به من 1 غيغابايت ‏RAM‏. على خادم ‏VPS‏ خفيف، أضِف 2 غيغابايت من ‏swap‏ قبل أي شيء آخر: بناء ‏Node‏ أو ‏Python‏ بدون ‏swap‏ يُوقفه ‏OOM killer‏ بانتظام.

ملف ‏CHECKS‏. بدونه، يبدّل ‏Dokku‏ بمجرد بدء تشغيل الحاوية قبل أن يكون التطبيق جاهزاً للاستجابة.

تدوير السجلات. تنمو سجلات ‏Docker‏ بلا حدود افتراضياً. هيّئ التدوير في ‏/etc/docker/daemon.json‏:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "50m", "max-file": "3" }
}

حل المشكلات الشائعة

‏error: failed to push some refs‏ — رفض الأذونات.
تحقق من تسجيل مفتاح ‏SSH‏: ‏dokku ssh-keys:list‏. إن كان غائباً، أضِفه بـ ‏dokku ssh-keys:add admin < ~/.ssh/id_ed25519.pub‏.

‏! [remote rejected]‏ — رُفض ‏hook‏ الاستقبال المسبق.
هذا الخطأ يشير إلى فشل في البناء على جانب ‏Dokku‏. راجع السجلات التفصيلية بـ ‏dokku logs my-app‏.

التطبيق يرجع ‏502 Bad Gateway‏.
تحقق من حالة العملية: ‏dokku ps:report my-app‏. السبب الشائع: التطبيق لا يستمع على المنفذ المعلن في ‏Procfile‏.

فشل ‏letsencrypt:enable‏ — انتهاء مهلة تحدي ‏HTTP-01‏.
يتطلب تحدي ‏ACME‏ أن يُحلّ النطاق إلى ‏IP‏ الخادم قبل التفعيل. تحقق من انتشار ‏DNS‏: ‏dig +short my-app.your-domain.com‏.

قتل البناء من قِبل النواة (‏OOM‏) — ‏Killed‏.
تدخّل ‏OOM killer‏ بسبب نقص الذاكرة. أضِف ‏swap‏ أو انتقل إلى خادم ‏VPS‏ بـ 2 غيغابايت من ‏RAM‏.

للمزيد

يغطي ‏Dokku‏ نشر تطبيقات ذات حاوية واحدة على خادم ‏VPS‏. إذا تطوّرت بنيتك نحو خدمات متعددة مترابطة، تكمّل عدة بدائل من نفس الفصيلة هذا النهج: ‏CapRover‏ يضيف واجهة رسومية ووضع ‏Docker Swarm‏ متعدد العقد. ‏Easypanel‏ يبسّط إدارة الخدمات المتعددة مع ‏Nixpacks‏ وسوق تطبيقات. لكل هذه الأدوات تعمل على خادم ‏VPS Cloud‏ من ‏ServOrbit‏ بنظام ‏Ubuntu LTS‏.

ضع Dokku في الإنتاج على خادم VPS الخاص بك

خادم VPS Cloud من ServOrbit يعمل بنظام Ubuntu LTS، خفيف وبأسعار معقولة، هو الأرضية المثالية لـ Dokku وسير عمل النشر لديه عبر git push.