ما الذي يصيب فيه Dokku وCoolify
الفضل أولًا، لأنه مستحق. قطّر Dokku حلقة Heroku الجوهرية — git push، راقب البناء، التطبيق حي — في أداة خادم واحد ظلت موثوقة عقدًا كاملًا. وغلّف Coolify الفكرة نفسها بواجهة ممتعة حقًا مع قواعد بيانات بنقرة واحدة ومكتبة قوالب متنامية. كلاهما يتولى TLS، وكلاهما يفهم Dockerfile، وكلاهما يعمل على عتاد تتحكم فيه بالكامل، وهو ما يهم حين يجب أن تبقى البيانات في مكانها أو حين يكون VPS بسعر ثابت هو الميزانية كلها.
إن كنت تشغّل إحداهما اليوم بسعادة، فلا شيء أدناه يجادل بأنك أخطأت. السؤال الذي يجيب عنه هذا الدليل أضيق ولا يظهر إلا مع الوقت: من يشغّل المنصة التي تحت منصتك — وهل ما زال ذلك أفضل استخدام لساعاتك؟
البند الذي يغفله README: أنت فريق المنصة
منصة PaaS ذاتية الاستضافة هي برمجية تشغّلها على خادم تشغّله. طبقتان، كلتاهما لك. يحتاج الخادم إلى ترقيعات أمان لنظام التشغيل، وتحصين SSH، وقرص يمتلئ بصمت بصور Docker وذواكر البناء المؤقتة حتى تبدأ عمليات نشر الصباح بالفشل بخطأ "no space left on device" — حادثة Dokku الكلاسيكية، وهي تختار لحظتها دائمًا. والمنصة نفسها تحتاج إلى ترقيات تقرأ لها سجل التغييرات، لأنها تجلس بين شيفرتك والإنتاج، والتغيير الكاسر فيها هو تغيير في الإنتاج.
ثم الأسئلة الأحدّ. النسخ الاحتياطي: قواعد البيانات التي أنشأتها منصتك بنقرة واحدة — من يفرّغها (dump)، وأين تذهب النسخ، ومتى اختبر أحد استعادةً آخر مرة؟ التوافر العالي: خادم واحد يعني أن إعادة تشغيل المضيف تُسقط كل التطبيقات معًا. لا شيء من هذا عمل غريب. إنها وظيفة هندسة منصات بدوام جزئي وصلت بصمت مع سكربت التثبيت، وتُفوتر من أمسياتك.
الحلقة نفسها، مُشغَّلة لأجلك
مسار العمل الذي تحبه فعلًا هو الدفع للنشر، وهذا ليس ما ستتخلى عنه. على cdn.com.tr، يربط GitHub Deploy مستودعًا ويحوّل الدفعة إلى نشر: تسحب المنصة الفرع، وتبني Dockerfile الخاص بك في بانٍ معزول (sandboxed — لا حاجة لحساب registry)، وتنفّذ الخطوات التي تحددها، وتطرح الإصدار خلف فحص سلامة (healthcheck) — لا تنتقل الحركة إلى الحاوية الجديدة إلا حين تبلّغ أنها جاهزة، فلا يُسقط بناء معطوب الموقع أبدًا. وتُفرَّغ ذاكرة الـ edge المؤقتة الأمامية تلقائيًا عند النشر.
ما يتغيّر هو من يُستدعى للطوارئ. ترقيع المضيف، وترقيات الباني، والقرص، وتوافر المنصة نفسها لم تعد في جانبك من الطاولة. يحل Postgres وRedis المُداران محل حاويات النقرة الواحدة بقواعد بيانات تُشغَّل وتُنسخ احتياطيًا كخدمة، ويحل تخزين كائنات متوافق مع S3 محل نمط "مجلد على هذا الخادم" للملفات المرفوعة. والمقابل الصادق كما هو دائمًا: لا root على المضيف، ولا تثبيتات على مستوى نظام التشغيل، والحركة العامة عبر HTTP(S) فقط. ملف Dockerfile الخاص بك هو العقد — وهو أيضًا ما يُبقي باب المغادرة مفتوحًا.
كيف يبدو جانب اللوحة
سيجد مستخدمو Coolify خصوصًا الشكل مألوفًا: تطبيقات لها نطاقات، ومتغيرات بيئة وأسرار، وسجلات تقرأها دون SSH، وقواعد بيانات مربوطة بالتطبيقات — ناقص صفحات إعدادات الخادم، لأنه لا خادم لك في الأسفل. تحمل تطبيقات الحاويات فحص سلامتها وعدد نسخها (replicas) وتخزينها الدائم كإعدادات من الدرجة الأولى، وكل ما على الشاشة قابل للبرمجة أيضًا من الـ CLI نفسه، فتكون الواجهة نافذة على المنصة لا الباب الوحيد إليها.
كل ما في اللوحة على بُعد أمر CLI أيضًا
# see your apps and read logs without SSH
cdnctl container apps list --account <uuid>
cdnctl container apps logs --account <uuid> --app <app_uuid> --tail 100
# scale, restart, roll back — the operations you actually reach for
cdnctl container apps scale --account <uuid> --app <app_uuid> --replicas 2
cdnctl container apps restart --account <uuid> --app <app_uuid>
cdnctl container apps rollback --account <uuid> --app <app_uuid> --revision <revision_uuid>
الهجرة: أصغر مما تظن
تطبيقك يعيش أصلًا في Git، وتحت Dokku أو Coolify يُبنى أصلًا من Dockerfile أو بنية قابلة للبناء — ما يعني أن الجزء الصعب من الهجرة حدث منذ زمن. الانتقال هو إعادة توجيه وجهة الدفع، إضافةً إلى جولة بيانات.
اربط المستودع بـ GitHub Deploy (أو، إن كان التطبيق موصوفًا بملف docker-compose.yml، استورده: الخدمات التي فيها قسم `build:` تُبنى من ملفات Dockerfile الخاصة بها، وقواعد البيانات تصبح إضافات مُدارة). أعد إنشاء متغيرات البيئة والأسرار. انقل البيانات: فرّغ قاعدة البيانات واستعدها في المُدارة، وانسخ الملفات المرفوعة إلى تخزين الكائنات. شغّل المنصتين بالتوازي بضعة أيام — يواصل الخادم القديم التقديم بينما تتحقق من النشر الجديد — ثم بدّل DNS وأحِل الجهاز على التقاعد وفق جدولك أنت.
تطبيق موصوف بـ compose: عاين الخطة ثم طبّقها
# see exactly what your compose file becomes — nothing is created yet
cdnctl container compose preview --account <uuid> --file docker-compose.yml
# apply when the plan looks right
cdnctl container compose apply --account <uuid> --file docker-compose.yml
# data: dump on the old box, restore into the managed database
pg_dump -Fc appdb > appdb.dump
pg_restore -d "$MANAGED_DATABASE_URL" appdb.dump
# uploads: from the old server's volume into object storage
aws --endpoint-url https://s3.cdn.com.tr s3 sync ./uploads s3://app-uploads
متى تبقى على الاستضافة الذاتية
التوازن يفرض هذا القسم. أبقِ Dokku أو Coolify حين يكون الخادم مجانيًا لك فعلًا — homelab أو عتاد تملكه أصلًا وتستمتع بتشغيله. أبقِهما حين تكون محلية البيانات قيدًا صارمًا ويجب أن يكون الجهاز جهازك. أبقِهما حين يكون عمل التشغيل هو الغاية: تشغيل منصتك الخاصة من أفضل الطرق لتعلّم هذا المجال بأكمله. وأبقِهما حين تحتاج شيئًا يستثنيه المقابل المُدار — root، أو منافذ TCP خام، أو تبعيات نظام غريبة لا مكان لها في صورة حاوية.
إن لم يصفك أي من ذلك — إن كانت المنصة التي تحت تطبيقاتك عبئًا لا هواية ولا متطلبًا — فمسار العمل الذي تحبه قابل للنقل، ومناوبة الطوارئ اختيارية.
الأسئلة الشائعة
هل أفقد مسار عمل git-push بمغادرة Dokku؟
لا — هذا المسار هو المنتج هنا. يحوّل GitHub Deploy الدفعة إلى دورة سحب-بناء-إصدار مع بوابة فحص سلامة، ويغطي Docker Compose Instant Deploy التطبيقات متعددة الخدمات. ما تتوقف عن فعله هو تشغيل الجهاز الذي يدير كل ذلك.
تطبيقي على Dokku يستخدم buildpacks لا Dockerfile. هل يمكنه الانتقال؟
نعم، بخطوة صغيرة واحدة: أضف Dockerfile. لمعظم تطبيقات buildpack هذا بضعة أسطر (صورة أساس، نسخ، تثبيت، أمر تشغيل)، وهو يجعل التطبيق قابلًا للنقل إلى أي منصة حاويات — بما فيها هذه. يستحق الأمر فعله حتى لو بقيت على Dokku.
ما الذي يحل محل قواعد بيانات Coolify ذات النقرة الواحدة؟
إضافات Postgres وRedis المُدارة — تُربط بتطبيقاتك بالطريقة نفسها، لكنها تُشغَّل وتُنسخ احتياطيًا كخدمة بدلًا من حاويات قرصها وتفريغاتها مسؤوليتك.
هل يمكنني الهجرة تدريجيًا بدل قطعة واحدة؟
نعم، وينبغي لك: انشر على المنصة المُدارة بينما يواصل الخادم القديم خدمة الإنتاج، وتحقق مقابل البناء الحقيقي، وزامن البيانات مسبقًا، ثم انقل DNS حين ترضى. الجهاز القديم خطة تراجع ممتازة حتى تطفئه.