دليل النشر

استضافة Komodo على VPS: تنسيق Docker وGitOps للخوادم

انشر على VPS Cloud ←

دليل عملي

استضافة Komodo على VPS: تنسيق Docker وGitOps للخوادم

النشر9 دقائق للقراءةعدد الخطوات: 13

إدارة ‌Docker على خادم واحد أمر بسيط. على عشرة خوادم، سرعان ما يتحول الأمر إلى فوضى: عشر جلسات ‌SSH، وعشرة ملفات ‌compose، ولا سجل مركزي. يحل ‌Komodo (‌GPL-3.0، أكثر من 12,000 نجمة على ‌GitHub، الإصدار ‌v2.x) هذه المشكلة ببنية ‌Core/Periphery: لوحة تحكم واحدة لتنسيق جميع خوادمك، وإطلاق عمليات النشر من ‌Git، وتتبع كل إجراء في سجل مراجعة. مكتوب بلغة ‌Rust، يستهلك ‌Core أقل من 256 ‌MB في حالة الخمول — يعمل بسهولة على أصغر ‌VPS من ‌ServOrbit.

المحتويات· لماذا Komodo بدلاً من Portainer أو Dockge؟1/9
  1. 01لماذا Komodo بدلاً من Portainer أو Dockge؟
  2. 02ما يضيفه Komodo فوق إدارة الحاويات
  3. 03بنية Core/Periphery في الممارسة
  4. 04نشر Komodo على خادم VPS ServOrbit
  5. 05GitOps مع webhooks: النشر عند كل push
  6. 06إنشاء Procedure في Komodo: سحب، ترحيل، إعادة تشغيل
  7. 07Komodo مقابل Portainer مقابل Dockge
  8. 08استكشاف الأخطاء: المشكلات الشائعة وحلولها
  9. 09Komodo + Dockge: الأفضل من العالمين

لماذا Komodo بدلاً من Portainer أو Dockge؟

‌Portainer و‌Dockge واجهتا إدارة لخادم واحد: تقرآن ‌socket ‌Docker المحلي وتعرضان ما يعمل على تلك الآلة فقط. بمجرد امتلاكك خادمين أو أكثر، تحتاج إلى تبويبين، وأن تتذكر أي خدمة تعمل أين، وتكرار كل تغيير يدوياً. يكسر ‌Komodo هذا الحاجز ببنية ‌Core/Periphery: ‌Core مركزي يُشغّل وكلاء ‌Periphery خفيفة على كل آلة. تنشر وتعيد التشغيل وتحدّث أي حزمة من واجهة واحدة، مع سجل كامل بمن فعل ماذا ومتى.

ما يضيفه Komodo فوق إدارة الحاويات

  • ‌GitOps أصلي — اربط مستودع ‌Git، عرّف ‌Procedure نشر، وشغّلها تلقائياً عند كل ‌git push عبر ‌webhook ‌HMAC.
  • ‌Procedures قابلة لإعادة الاستخدام — سلسل سحب الصورة وترحيل قاعدة البيانات وإعادة تشغيل الحزمة وإشعار ‌Slack في ‌workflow واحد قابل للإصدار.
  • ‌Docker Swarm — أدِر خدمات ‌Swarm والنسخ والتحديثات المتدحرجة من نفس واجهة حزم ‌Compose.
  • تنبيهات ‌Slack/Discord أصلية — أعدّ قنوات تنبيه لإخفاقات النشر والحاويات الموقوفة والموارد الحرجة.
  • ‌RBAC متعدد المستخدمين — امنح صلاحيات دقيقة حسب الدور (‌viewer, ‌builder, ‌deployer) دون مشاركة حساب المسؤول.
  • ‌API REST كاملة — أتمتة النشر من خط ‌CI/CD الخاص بك (‌GitHub Actions, ‌Woodpecker, ‌Forgejo) دون المرور بالواجهة الرسومية.

بنية Core/Periphery في الممارسة

‌Core هو العقل: يخزّن الإعدادات في ‌FerretDB (طبقة متوافقة مع ‌MongoDB)، ويعرض واجهة الويب على المنفذ ‌9120 ويستقبل الـ ‌webhooks. وكلاء ‌Periphery هم الأذرع: كل منها يعمل على خادم هدف، ويُوكّل ‌socket ‌Docker للآلة إلى ‌Core عبر قناة مشفّرة وينفّذ الأوامر التي يرسلها ‌Core. يضمن زوج المفاتيح غير المتماثل المولَّد عند التهيئة أن ‌Core الخاص بك فقط يستطيع التحكم بوكلائك — لا أسرار إضافية تحتاج لإدارتها.

نشر Komodo على خادم VPS ServOrbit

  1. طلب الخادم الافتراضي

    خادم افتراضي بـ ‌1 vCPU / 1 GB RAM على ‌Ubuntu 24.04 LTS كافٍ لمستوى التحكم في ‌Komodo. يستهلك ‌Core Rust أقل من ‌256 MB في حالة الخمول. إذا كنت تخطط لتشغيل خدمات أخرى على نفس الخادم، فيُنصح بـ ‌2 GB RAM.

  2. النشر من marketplace ServOrbit

    في ‌espace client ‌ServOrbit، اذهب إلى ‌Marketplace ← نشر التطبيقات وـ‌DevOps ← ‌Komodo وانقر ‌Deploy. أدخل نطاقك أو نطاقاً فرعياً — مطلوب لـ ‌KOMODO_HOST. يولّد ‌playbook تلقائياً أسرار ‌JWT وزوج مفاتيح ‌Core/Periphery وكلمة مرور المسؤول، ثم يشغّل الخدمات.

  3. تسجيل الدخول والتحقق من الوكيل المحلي

    افتح ‌https://your-domain.com:9120 وسجّل الدخول بـ ‌admin وكلمة المرور المعروضة في ‌espace client. في قائمة ‌Servers يجب أن ترى خادم ‌'Local' مسجّلاً بالفعل — هذا هو وكيل ‌Periphery على خادم الاستضافة. غيّر كلمة مرورك من إعدادات الحساب في أول جلسة.

  4. ربط خادم بعيد عبر Periphery

    على كل خادم افتراضي إضافي لإدارته، ثبّت وكيل ‌Periphery: ‌docker run -d --restart=unless-stopped --network host -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/moghtech/komodo-periphery:latest. ثم في ‌Komodo، اذهب إلى ‌Servers ← ‌Add Server، أدخل عنوان ‌IP والمنفذ ‌8120. يظهر أسطول خوادمك فوراً في لوحة التحكم.

  5. إنشاء أول حزمة من marketplace

    في ‌Komodo، اذهب إلى ‌Stacks ← ‌New Stack. اختر الخادم الهدف، والصق ‌YAML لـ ‌Docker Compose أو أشر إلى مسار مستودع ‌Git، وانقر ‌Deploy. يكتب ‌Komodo الملف على الخادم البعيد، يشغّل ‌docker compose up -d ويعرض السجلات في الوقت الفعلي.

  6. إعداد تنبيهات Slack أو البريد الإلكتروني

    في ‌Komodo، اذهب إلى ‌Alerters ← ‌New Alerter. اختر النوع (‌Slack أو ‌Discord أو بريد إلكتروني) والصق رابط ‌webhook أو عنوان الوجهة. ثم اربط المنبّه بمواردك عبر قسم ‌Alerts في كل مورد. تصل الإشعارات فور حدوث إخفاق في النشر أو إيقاف حاوية.

  7. إعداد خط أنابيب GitOps

    أضف ‌webhook في مستودع ‌GitHub يشير إلى ‌https://your-domain.com/api/webhook/komodo مع سر ‌HMAC المعرّف في ‌Komodo. أنشئ ‌Procedure مع خطوات النشر. سيُشغّل كل ‌git push خط الأنابيب تلقائياً بعد التحقق من التوقيع.

  8. دمج CI/CD عبر API REST

    يعرض ‌Komodo ‌API REST كاملة على ‌/api. من ‌GitHub Actions، أطلق النشر باستدعاء ‌POST /api/execute/procedure/<name> ورمز ‌API الخاص بحساب الخدمة. يتيح لك هذا الدمج تسلسل الاختبارات وبناء الصور والنشر في ‌workflow واحد.

GitOps مع webhooks: النشر عند كل push

تقوم دورة ‌GitOps في ‌Komodo على ثلاثة مكوّنات: مستودع ‌Git، و‌webhook ‌HTTP، و‌Procedure. في ‌GitHub، أنشئ ‌webhook في ‌Settings ← ‌Webhooks، وأشر إلى ‌https://your-domain.com/api/webhook/komodo، واختر نوع المحتوى ‌application/json وعرّف سراً. في ‌Komodo، في قسم ‌Webhooks لـ ‌Stack أو ‌Procedure، الصق هذا السر ذاته — يحسب ‌Komodo ‌HMAC SHA-256 لكل حمولة واردة ويرفض الطلبات التي لا تتطابق توقيعاتها.

تسلسل ‌Procedure النشر النموذجي ثلاثة إجراءات: ‌PullImage (تحميل أحدث صورة)، ‌DeployStack (إعادة إنشاء الحاويات)، ثم ‌SendAlert (إخطار قناة ‌Slack). إذا فشلت أي خطوة، يوقف ‌Komodo ‌Procedure ويرسل الخطأ كاملاً إلى منبّهك.

تفصيل مهم: يتحقق ‌Komodo من الفرع المدفوع مقابل الفرع المُعدّ في ‌Stack قبل الإطلاق. ‌push على فرع ميزة لن يُطلق نشر إنتاج، حتى لو كان ‌webhook يستهدف نفس ‌URL. أعدّ ‌Stack لكل بيئة (‌staging على ‌dev، الإنتاج على ‌main) وستحصل على خط ترقية آلي كامل.

إنشاء Procedure في Komodo: سحب، ترحيل، إعادة تشغيل

  1. إنشاء Procedure

    في ‌Komodo، اذهب إلى ‌Procedures ← ‌New Procedure. أعطها اسماً (‌deploy-app) واختر الخادم الهدف. ‌Procedure هي قائمة مرتبة من الخطوات — لكل خطوة نوع (‌PullImage, ‌DeployStack, ‌RunCommand, ‌SendAlert) ومعاملات.

  2. إضافة خطوة PullImage

    انقر ‌Add Step ← ‌PullImage. أدخل اسم الصورة (مثلاً ‌ghcr.io/myorg/myapp:latest) والخادم الذي ستُسحب عليه. إذا كانت صورتك في ‌registry خاص، أضف بيانات الاعتماد في ‌Settings ← ‌Registries قبل هذه الخطوة.

  3. إضافة أمر الترحيل

    انقر ‌Add Step ← ‌RunCommand. في حقل ‌Command، أدخل أمر الترحيل لتشغيله داخل الحاوية. فعّل خيار ‌'Stop on error': إذا فشل الترحيل، تتوقف ‌Procedure قبل إعادة تشغيل الخدمة، مما يمنع ترك تطبيق بمخطط بيانات غير متسق.

  4. إضافة إعادة تشغيل الحزمة

    انقر ‌Add Step ← ‌DeployStack واختر ‌Stack المستهدفة. يشغّل ‌Komodo ‌docker compose up -d --pull never ويعيد إنشاء الحاويات المعدّلة. متغيرات البيئة المعرّفة في ‌Stack تُمرَّر تلقائياً.

  5. إضافة إشعار الانتهاء

    انقر ‌Add Step ← ‌SendAlert واختر منبّه ‌Slack أو ‌Discord الخاص بك. يمكنك تضمين متغيرات السياق في الرسالة (‌{{ procedure.name }}، ‌{{ server.name }}) لتحديد أي ‌Procedure على أي خادم أُنجزت للتو.

Komodo مقابل Portainer مقابل Dockge

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

الميزةKomodoPortainer CEDockge
خوادم متعددة أصلياً✅ Core/Periphery غير محدودة⚠️ وكلاء Edge (مدفوع)❌ مضيف واحد فقط
GitOps / webhooks✅ أصلي، HMAC محقَّق❌ غير أصلي❌ غير أصلي
Procedures / أتمتة✅ محرك مدمج⚠️ محدود CE❌ لا
API REST✅ كاملة✅ كاملة❌ لا
تنبيهات أصلية✅ Slack وDiscord والبريد⚠️ جزئي CE❌ لا
سجل المراجعة✅ جميع العمليات⚠️ جزئي CE❌ لا
الرخصة / السعرGPL-3.0، مجانيZlib (CE مجاني) / Business مدفوعMIT، مجاني

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

وكيل Periphery غير متاح. الخطأ الأكثر شيوعاً عند إضافة خادم جديد. تحقق أولاً من أن جدار الحماية على الخادم البعيد يسمح بالاتصالات الواردة على المنفذ ‌8120 من ‌IP الخاص بـ ‌Core. ثم تحقق من أن قيمة ‌KOMODO_HOST لوكيل ‌Periphery تتطابق مع ‌IP أو النطاق الذي يستخدمه ‌Core للوصول إليه.

فشل سحب الصورة. يُرجع ‌Komodo هذا الخطأ عندما لا يكون ‌registry الخاص متاحاً أو تكون بيانات الاعتماد مفقودة. أضف بياناتك في ‌Settings ← ‌Registries قبل إطلاق السحب. إذا كانت الصورة عامة وظل الخطأ قائماً، تحقق من وصول الخادم الهدف إلى الإنترنت على المنفذ ‌443.

Webhook لا يُطلَق. سببان رئيسيان: السر ‌HMAC المعدّ في ‌Komodo لا يطابق ذلك المُدخَل في ‌GitHub، أو أن ‌URL الخاص بـ ‌Core غير متاح من خوادم ‌GitHub. تحقق من علامة التبويب ‌'Recent Deliveries' في ‌GitHub لرؤية كود ‌HTTP المُعاد — يشير ‌401 إلى سر خاطئ، بينما يشير ‌timeout إلى مشكلة شبكة. تحقق أيضاً من أن فرع الـ ‌push يطابق الفرع المُعدّ في ‌Stack أو ‌Procedure.

بطء الإقلاع الأول (FerretDB). يُجري ‌FerretDB تهيئة داخلية لقاعدة البيانات عند الإطلاق الأول، مما قد يستغرق 30 إلى 60 ثانية قبل أن تستجيب واجهة ‌Komodo. إذا رأيت خطأ اتصال مباشرة بعد النشر، انتظر دقيقة وأعد تحميل الصفحة قبل تشخيص مشكلة تثبيت.

Komodo + Dockge: الأفضل من العالمين

‌Komodo و‌Dockge لا يتعارضان. ‌Dockge رائع لتحرير ملفات ‌Compose بشكل تفاعلي على آلة واحدة (واجهة ‌YAML مع تلوين الصياغة). ‌Komodo يتولى التنسيق متعدد الخوادم ونشر ‌Git والـ ‌workflows. انشر ‌Dockge عبر ‌Komodo على آلات التطوير، واستخدم ‌Komodo لتنسيق نشر الإنتاج.

خوادمك تحت إشراف GitOps

انشر Komodo على خادم VPS من ServOrbit وأدِر أسطول Docker بأكمله من لوحة تحكم موحّدة — GitOps، webhooks، سجل مراجعة.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة