لماذا تختار 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 وانشر تطبيقاً أولاً
تنزيل سكربت الاستدعاء الرسمي وتشغيله
على نظام 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.
تهيئة النطاق العام وإضافة مفتاح SSH
حدّد النطاق الجذر الذي سيستخدمه Dokku لبناء النطاقات الفرعية للتطبيقات:
dokku domains:set-global your-domain.comثم أضِف مفتاح SSH العام الخاص بك:
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "dokku ssh-keys:add admin"إنشاء تطبيق وتهيئة المستودع البعيد (Git remote)
على الخادم، أنشئ التطبيق المستهدف:
dokku apps:create my-appعلى جهازك المحلي، أضِف Dokku كـ remote في مستودعك:
git remote add dokku [email protected]:my-appسينشئ Dokku تلقائياً النطاق الفرعي
my-app.your-domain.com.تزويد قاعدة بيانات 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 في حاوية التطبيق.نشر التطبيق للمرة الأولى
من مستودعك المحلي، ادفع إلى Dokku:
git push dokku mainيكتشف Dokku اللغة، ويُنزّل buildpack المناسب، ويبني صورة Docker، ثم يُشغّل الحاوية. تُعرض العملية في الوقت الفعلي على الطرفية.
تفعيل 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.