بديل Rundeck
أتمتة الـ runbooks من دون JVM أو قاعدة بيانات SQL أو مهام تُؤلَّف عبر واجهة رسومية.
Dagu هو بديل Rundeck لفرق العمليات التي تريد مهام مجدولة، و runbooks عند الطلب، و Web UI من ملف ثنائي واحد صغير. تعيش تعريفات المهام في Git بصيغة YAML بدلًا من أن تبقى خلف وحدة تحكم، وتُخزَّن الحالة في ملفات بدلًا من MySQL أو Postgres، ويجري الوصول إلى الخوادم القائمة عبر SSH أو عبر عمال موسومين. تتناول هذه الصفحة أيضًا مسار الترحيل والمواضع التي يبقى فيها Rundeck الخيار الأقوى.
# restart-app.yaml
params:
- name: host
default: app01.internal
ssh:
user: ops
host: ${params.host}
key: ~/.ssh/ops_key
steps:
- id: drain
run: /opt/app/bin/drain --wait
- id: restart
run: sudo systemctl restart app
depends: [drain]
- id: health_check
run: curl -fsS http://localhost:8080/healthz
retry_policy:
limit: 5
interval_sec: 10
depends: [restart]
handler_on:
failure:
run: ./scripts/notify-oncall.sh
Execution order
ملف ثنائي واحد بحالة مخزّنة في ملفات، من دون JVM ولا قاعدة بيانات SQL
المهام ملفات YAML خاضعة للتحكم بالإصدارات وتُراجَع مثل أي تغيير آخر
خطوات SSH وعمال موسومون يصلون إلى الخوادم القائمة
SSO و RBAC وسجلات التدقيق بسعر معلَن لكل خادم
At a glance
Rundeck مقابل Dagu في أتمتة العمليات
ملف ثنائي واحد بحالة مخزّنة في ملفات؛ الطوابير والعمال اختياريان.
خدمة Java إضافةً إلى MySQL أو Postgres في الإنتاج.
YAML تصريحي يُراجَع في Git.
وحدة تحكم الويب أولًا؛ وتصدير YAML ومزامنة SCM مسار ثانوي.
خطوات SSH، أو عمال موسومون يتصلون اتصالًا صادرًا عبر gRPC محمي بـ mTLS.
توزيع على العقد من مخزون قائم على نموذج الموارد عبر SSH أو WinRM.
أدوار على مستوى النظام، مع SSO وسجلات التدقيق في الفئة المرخّصة.
سياسات ACL دقيقة لكل مشروع ولكل مهمة.
مجاني بعدد غير محدود من الخوادم؛ والخطط المدفوعة مرخّصة لكل خادم Dagu مع عمال غير محدودين.
نواة مفتوحة المصدر؛ و Process Automation التجاري بتسعير قائم على عروض الأسعار.
مثيل واحد من المجدول؛ والتوافر العالي تصميم نشر تتولاه بنفسك.
توفر الفئة التجارية تكوينات عنقودية.
In depth
Where each tool fits
أبقِ الـ runbook واستغنِ عن المكدس
يعمل Rundeck كخدمة Java أمام قاعدة بيانات SQL، وتُعرَّف المهام لكل مشروع عبر وحدة تحكم الويب. أما Dagu فيُبقي المفاهيم التشغيلية نفسها داخل عملية واحدة تخزّن حالتها في ملفات.
- المهام تصبح ملفات DAG، وخطوات المهمة تصبح خطوات، ومعالجات الأخطاء تقابل handler_on.failure.
- خيارات المهمة تقابل params: مدخلات ذات أنواع وقيم افتراضية، تُمرَّر قيمها وقت التشغيل من Web UI أو CLI أو API.
- لا حاجة إلى تحديد حجم MySQL أو Postgres والنسخ الاحتياطي لهما، ولا إلى ضبط ذاكرة JVM؛ جهاز افتراضي صغير يكفي لتشغيله.
المهام بالكود لا بنقرات وحدة التحكم
يستطيع Rundeck تصدير التعريفات ومزامنتها عبر إضافة SCM لديه، لكن وحدة التحكم تبقى سطح التأليف الأساسي. يعكس Dagu ذلك: ملف YAML في مستودعك هو التعريف نفسه.
- كل مهمة ملف YAML في Git، فتصل التغييرات كفروق قابلة للمراجعة بدلًا من تعديلات في وحدة التحكم.
- يفحص dagu validate التعريفات المولَّدة والمكتوبة يدويًا في CI قبل أن تصل إلى المجدول.
- تبقى Web UI لأغراض التشغيل: بدء عمليات التشغيل بمعاملات، ومتابعة السجلات، وإعادة المحاولة، وتعليق الجداول.
الوصول إلى الخوادم القائمة من دون تثبيت وكيل
يوزّع Rundeck الأوامر على العقد من مخزون قائم على نموذج الموارد. يغطي Dagu المساحة نفسها بآليتين: SSH للمضيفات من دون وكيل، والعمال حيث يكون منفّذ مقيم هو الأنسب.
- استخدم منفّذ SSH لتشغيل الخطوات على مضيفات Linux و UNIX القائمة من دون وكيل مقيم.
- شغّل dagu worker على الأجهزة التي تحتاج إلى تنفيذ محلي، ووجّه الخطوات إليها عبر تسميات worker_selector.
- يتصل العمال اتصالًا صادرًا عبر gRPC محمي بـ mTLS، فلا تحتاج الشبكات المجزّأة إلى فتح منافذ واردة.
افصل بين من يشغّل المهام ومن يعدّل تعريفاتها
النشر الكلاسيكي لـ Rundeck يسلّم جزءًا آمنًا من العمليات إلى مجموعة أوسع. وتغطي فئة الاستضافة الذاتية المرخّصة في Dagu هذا الفصل بالأدوار و SSO وسجلات التدقيق.
- دور operator يستطيع بدء عمليات التشغيل وإيقافها لكنه لا يعدّل التعريفات؛ و viewer للقراءة فقط؛ بينما يستطيع developer و manager تعديل مسارات العمل.
- سجّل الدخول عبر مزوّد الهوية الحالي لديك باستخدام OIDC بدلًا من صيانة دليل مستخدمين ثانٍ.
- توثّق سجلات التدقيق النشاط الإداري والأنشطة ذات الصلة بالأمان للمراجعة.
سعر معلَن بدلًا من مكالمة مبيعات
أصبحت الفئة التجارية من Rundeck هي PagerDuty Process Automation، بتسعير قائم على عروض الأسعار. أما الفئة المجتمعية من Dagu فمجانية بعدد غير محدود من الخوادم والعمال، وللفئة المرخّصة سعر معلَن لكل خادم.
- تشمل الفئة المجتمعية محرك التنسيق كاملًا، و Web UI، وجدولة cron، ومنفّذات Docker و SSH و HTTP.
- تبدأ الاستضافة الذاتية المرخّصة من 500 دولار في السنة مقابل ثلاثة تراخيص خوادم، وتضيف SSO و RBAC وسجلات التدقيق وتوجيه الحوادث والدعم عبر البريد الإلكتروني.
- يبقى عدد العمال غير محدود في كل الخطط، فإضافة مضيف تنفيذ جديد لا تغيّر عدد التراخيص أبدًا.
المواضع التي يكون فيها Rundeck الخيار الأقوى
المقارنة التي لا تسرد إلا مواطن التفوق لا تفيد أثناء التقييم. هذه هي المواضع التي ينبغي فيها لفريق يستخدم Rundeck أن يتوقع عملًا إضافيًا أو أن يبقى حيث هو.
- مخزون العقد في Rundeck أغنى: تستطيع مصادر نموذج الموارد ومرشّحات العقد نشر أمر واحد على مئات المضيفات. أما Dagu فيوجّه الخطوات إلى مضيفات SSH أو عمال موسومين، وليس لديه مفهوم مخزون الأسطول.
- تستطيع سياسات ACL في Rundeck على مستوى المشروع والمهمة تسليم مهمة واحدة بعينها ذات معاملات إلى مجموعة مكتب المساعدة. أما أدوار Dagu فتسري على مستوى النظام كله، لا لكل مهمة.
- يقدّم Process Automation التجاري تكوينات عنقودية للتوافر العالي، ومنظومة الإضافات لديه أكبر، بما فيها منفّذات عقد WinRM وإضافات الإشعارات.
FAQ
Practical questions before adopting Dagu
هل Dagu بديل مباشر لـ Rundeck؟
لا. تتقابل المفاهيم بوضوح: المهام تصبح ملفات DAG، وخطوات المهمة تصبح خطوات، والخيارات تصبح params، ومعالجات الأخطاء تصبح handler_on.failure. لكن لا توجد أداة استيراد، ولا يوجد مقابل مباشر لنموذج مرشّحات العقد في Rundeck. الترحيل يعني إعادة كتابة كل مهمة كملف YAML، وهو عمل يجري بشكل شبه آلي للمهام القائمة على الأوامر.
هل يظل بإمكان المستخدمين تشغيل المهام بمعاملات من الواجهة؟
نعم. تعلن params مدخلات ذات أنواع وقيم افتراضية، ويمكن بدء التشغيل من Web UI أو CLI أو API مع تمرير القيم وقت التشغيل. ما لا يملكه Dagu هو ACL على مستوى المهمة كما في Rundeck لإتاحة مهمة واحدة بعينها لمجموعة؛ فالأدوار تسري على مستوى النظام كله.
كيف يشغّل Dagu الأوامر على خوادم كثيرة؟
بطريقتين. يشغّل منفّذ SSH الخطوات على مضيفات من دون وكيل، وفي الوضع الموزّع تعمل على الأجهزة عمالٌ يسحبون الخطوات المطابقة لتسميات worker_selector. لا يوجد مخزون قائم على نموذج الموارد؛ والنشر على أسطول كبير يُعبَّر عنه بخطوات متوازية أو بسكربت مغلِّف.
هل يحتاج Dagu إلى قاعدة بيانات كما يحتاج Rundeck؟
لا. تاريخ التشغيل والسجلات وحالة الطوابير كلها ملفات على القرص. وهذا أيضًا ما يجعل العمل في الشبكات المغلقة مباشرًا: ملف ثنائي واحد، من دون JVM، ومن دون خدمات خارجية يلزم الوصول إليها.
ما الذي يحل محل الجداول و webhooks في Rundeck؟
جداول cron بدعم المناطق الزمنية مدمجة، ويمكن تشغيل العمليات من الخارج عبر API أو webhook مع إتاحة الحمولة لمسار العمل. يُحد التزامن افتراضيًا لكل مسار عمل، وتستخدم الحدود المشتركة طوابير مسماة.
Next step
Start with one workflow.
Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.