openclaw fleet
تدير openclaw fleet مثيلات OpenClaw كاملة تُسمى خلايا. لكل خلية Gateway خاص بها وحالة وبيانات اعتماد وحسابات قنوات وحاوية ومنفذ مضيف مخصص للواجهة المحلية فقط. استخدم خلية واحدة لكل حد ثقة خاص بمستأجر؛ ولا تستخدم Gateway مشتركًا واحدًا بوصفه حدًا عدائيًا متعدد المستأجرين.
Fleet تجريبية. قد تتغير أسماء الأوامر والخيارات وأشكال المخرجات وملف تعريف الحاوية بين الإصدارات من دون فترة إهمال.
تدعم Fleet كلاً من Docker وPodman. الصورة الافتراضية هي ghcr.io/openclaw/openclaw:latest.
اختُبرت Fleet على مضيفي Linux وmacOS. أما مضيفو Windows فلم يُختبروا حاليًا.
البدء السريع
fleet create رمز Gateway المُنشأ مرة واحدة مع عنوان URL للخلية. خزّن الرمز فورًا، ثم اضبط حسابات القنوات الخاصة بكل مستأجر داخل خلية ذلك المستأجر.
معرّفات المستأجرين
يجب أن تتطابق معرّفات المستأجرين مع:../acme.
يصبح المعرّف جزءًا من اسم الحاوية: openclaw-cell-<tenant>.
fleet create
أنشئ خلية وشغّلها:
--env:
خيارات الإنشاء
يحدد التخصيص التلقائي أول منفذ غير مستخدم في السجل يساوي
19100 أو يزيد عليه. ترفض Fleet معرّفات المستأجرين المكررة والمنافذ الصريحة المخصصة بالفعل لخلية أخرى.
تُمرر مراجع الصور كوسيط واحد إلى بيئة تشغيل الحاوية. تُرفض المراجع الفارغة والقيم التي تبدأ بـ - حتى لا تُفسر الصورة كخيار لـ Docker أو Podman.
يجب أن تكون نقطة نهاية Docker أو Podman المحددة محلية. ترفض Fleet سياقات Docker البعيدة ونقاط نهاية DOCKER_HOST وخدمات Podman البعيدة قبل حجز منفذ أو إنشاء حالة محلية. مضيفو الخلايا البعيدون غير مدعومين.
عندما تشغّل Fleet خلية جديدة، ينتظر أمر الإنشاء مدة تصل إلى نحو دقيقة حتى يستجيب Gateway الخاص بها إلى /healthz. إذا لم تصبح الخلية سليمة، تُبقي Fleet حاويتها وصف السجل الخاص بها كما هما من أجل fleet status أو fleet logs أو الإزالة الصريحة. تتخطى --no-start بوابة التحقق من السلامة هذه. لا يُفقد رمز Gateway المُنشأ لخلية جديدة غير سليمة؛ إذ يظل في بيئة الحاوية (docker|podman inspect)، ولأن الخلية لم تخدم أي حركة مرور بعد، فإن تنفيذ fleet rm --force ثم إجراء إنشاء جديد يُعد دائمًا بديلاً آمنًا.
التثبيت بواسطة الملخص
يقبل أمرا الإنشاء والترقية مراجع صور مثبتة بالملخص مثل--image ghcr.io/openclaw/openclaw@sha256:<digest>. تمرر Fleet مرجع الصورة حرفيًا إلى Docker أو Podman، مما يتيح للمشغّل إبقاء الخلية على بايتات صورة ثابتة غير قابلة للتغيير بدلاً من وسم متغير.
تتضمن نتيجة الإنشاء معرّف المستأجر واسم الحاوية ومنفذ المضيف ورمز Gateway وعنوان URL المحلي. حتى في مخرجات JSON، تعامل مع النتيجة على أنها تحتوي على بيانات سرية لأنها تتضمن الرمز.
حدود القرص
تقيّد--disk الطبقة القابلة للكتابة في الحاوية فقط. تظل مجلدا الحالة والمصادقة الخاصان بكل مستأجر والمثبتان بالربط ضمن تخزين المضيف؛ استخدم حصص مشاريع نظام ملفات المضيف عندما تحتاج هذه المجلدات أيضًا إلى حد صارم.
سياسة الخروج
بالنسبة إلى Docker، احتفظ بوضع الجسر وطبّق سياسة الخروج باستخدام قواعد جدار حماية المضيف، مثل سلسلة
DOCKER-USER.
fleet list
اسرد الخلايا بترتيب معرّف المستأجر:
تظل صفوف السجل ظاهرة عندما لا يتوفر Docker أو Podman؛ وحدها الحالة المباشرة تصبح
unknown.
fleet status
افحص خلية واحدة:
ok أو failed أو skipped. تثبت /healthz حيوية Gateway، وليس الجاهزية الكاملة لكل قناة أو Plugin مُضبط. يُتخطى الفحص عندما لا توجد نقطة نهاية محلية صالحة يمكن التحقق منها.
fleet logs
دفق سجلات حاوية خلية مباشرة إلى الطرفية:
--follow من دون اعتبار إيقاف المشغّل فشلاً للأمر. تُمرر مخرجات السجل عبر مرشح تنقيح يستبدل رمز Gateway الحالي للخلية بـ <redacted> قبل وصول أي شيء إلى الطرفية.
لا يتوفر لـ fleet logs وضع --json لأن سجلات الحاوية عبارة عن دفق stdout/stderr خام. بالنسبة إلى البرامج النصية، قيّد المخرجات باستخدام --tail واستخدم إعادة توجيه الصدفة أو خطوط الأنابيب العادية.
fleet start وfleet stop وfleet restart
تحكَّم في خلية موجودة باستخدام بيئة التشغيل المسجّلة لها:
fleet upgrade
أعِد سحب الصورة المسجّلة واستبدل حاوية الخلية:
--env. تظل الحالة المركّبة محفوظة بعد استبدال الحاوية؛ وقد تتغيّر بيئة الصورة الافتراضية مع الصورة المستهدفة.
لا يُعتمد البديل إلا بعد أن يستجيب Gateway الخاص به إلى /healthz على منفذ الاسترجاع الحلقي للخلية، بما يطابق عقد السلامة الذي يستخدمه ملف Compose الرسمي. يُزال أي بديل يخرج أو يدخل في حلقة أعطال أو يفشل في الوصول إلى حالة سليمة خلال نحو دقيقة، وتُستعاد الحاوية السابقة، بحيث لا تؤدي صورة معطّلة إلى إيقاف خلية عاملة.
لا تُخزَّن رموز Gateway عمدًا في سجل Fleet. قبل إزالة الحاوية القديمة، تقرأ Fleet بيئتها وتنقل OPENCLAW_GATEWAY_TOKEN إلى البديل. لا تُزل الحاوية القديمة يدويًا قبل الترقية إذا لم يكن الرمز موجودًا في أي مكان آخر تتحكم فيه.
fleet backup وfleet restore
أنشئ نسخة احتياطية من خلية واحدة متوقفة:
0600، ويجب تخزينها كبيانات اعتماد. يرفض النسخ الاحتياطي خلية قيد التشغيل لكي تُلتقط حالة SQLite بصورة متسقة. ترفض الاستعادة خلية قيد التشغيل ما لم يُوفَّر --force، ولا تستبدل إلا حالة ذلك المستأجر، وتدوّر رمز Gateway، وتطبع الرمز الجديد مرة واحدة. تنسخ Fleet مستأجرًا واحدًا احتياطيًا في كل مرة؛ والنسخ الاحتياطي لجميع المستأجرين إجراء منفصل ينفّذه المشغّل.
تتطلب الاستعادة حاوية متوقفة موجودة، لأن ملف تعريف بيئة التشغيل الناتج من فحصها يوفّر حدود البديل، وتعيين المستخدم، ومصدر البيئة، والصورة. إذا أُزيلت الحاوية المسجّلة خارج نطاق Fleet، فنفّذ أولًا fleet rm <tenant> --force من دون --purge-data، وأعِد إنشاء الخلية باستخدام الصورة المقصودة و--no-start، ثم أعِد محاولة الاستعادة. تُبقي عملية الإزالة الأولى دليلي بيانات المستأجر سليمين.
يقبل كلا الأمرين --max-bytes <bytes> لتقييد بيانات الملفات المؤرشفة أو المستخرجة، ويطبّقان الميزانية الثابتة نفسها البالغة مليون مقطع من مسارات الأرشيف، حتى لا تستنفد قنابل الأرشيف المعتمدة على البيانات الوصفية وحدها عقد المضيف، ولكي تظل كل نسخة احتياطية مقبولة قابلة للاستعادة. يقبل النسخ الاحتياطي --out <path>، ويدعم كلا الأمرين --json.
لا تحتوي الأرشيفات إلا على ملفات وأدلة عادية. لا يتبع النسخ الاحتياطي أو يخزّن الروابط الرمزية أو الروابط الصلبة أو المقابس أو عقد الأجهزة مطلقًا؛ وتُبلَّغ أعداد العناصر المتخطاة في النتيجة. ترفض الاستعادة الأرشيفات التي تحتوي على أي نوع آخر من الإدخالات. يجب إعادة تثبيت أشجار الروابط الرمزية القابلة لإعادة الإنشاء، مثل node_modules لمساحة العمل، داخل الخلية بعد الاستعادة.
fleet doctor
دقّق كل الخلايا أو مستأجرًا واحدًا من دون تغيير حالة بيئة التشغيل أو نظام الملفات:
fleet rm
أزل خلية متوقفة من بيئة التشغيل والسجل مع الاحتفاظ ببيانات المستأجر:
--force:
--purge-data وجود --force. قبل الحذف التكراري، تحل Fleet جذرَي الملكية التابعين لها ودليلَي كل مستأجر. يجب أن يكون كل هدف هو ورقة المستأجر المتوقعة تمامًا، وأن يقع داخل جذره بدقة، وألا يكون رابطًا رمزيًا. تمنع فحوص الاحتواء هذه أي مسار تالف في السجل أو رابط رمزي عابر للمستأجرين من إعادة توجيه الحذف إلى مكان آخر.
يمكن إعادة محاولة التطهير عندما يكون دليل المستأجر المتوقع بعينه غير موجود بالفعل. يتيح ذلك لاستدعاء لاحق إكمال التنظيف بعد فشل جزئي في نظام الملفات من دون تخفيف فحوص المسارات للأدلة التي لا تزال موجودة.
تخطيط التخزين والحاويات
تستخدم حالة الخلية ومفاتيح تشفير ملفات تعريف المصادقة مسارات مضيف منفصلة لكل مستأجر ضمن دليل حالة OpenClaw النشط:/home/node/.openclaw. ويُركَّب الثاني عند /home/node/.config/openclaw، بما يطابق موضع تركيب مفتاح التشفير في إعداد Docker الرسمي. ولذلك لا ينكشف مفتاح التشفير تحت موضع تركيب الحالة العادي، ولا يُضمَّن عندما يُنسخ احتياطيًا أو يُشارك دليل حالة الخلية فقط. يظل كلا الدليلين محفوظًا بعد الإزالة والترقية العاديتين؛ ويحذف fleet rm --purge-data --force كليهما بعد إجراء فحوص احتواء منفصلة.
قبل التشغيل الأول، تهيّئ Fleet إعدادات الخلية باستخدام gateway.mode=local، ومصادقة الرمز، وربط حاوية LAN، وأصول Control UI لمنفذ المضيف المخصّص. لا تُكتب قيمة الرمز في تلك الإعدادات؛ بل تظل في بيئة الحاوية.
تثبّت Fleet مسارات الحاوية الخاصة بالصورة الرسمية باستخدام قيم البيئة الآتية:
تستخدم الصورة الرسمية افتراضيًا المستخدم غير الجذر
node ذي UID 1000. تُبقي Fleet مواضع تركيب الربط الخاصة 0700 قابلة للكتابة من دون إتاحتها للوصول العام. يشغّل Docker الجذري الخلية باستخدام UID وGID للمستخدم غير الجذر الذي نفّذ الأمر؛ ويستخدم Docker غير الجذري UID 0 داخل الحاوية، والذي يُطابق مستخدم المضيف غير المميّز الذي نفّذ الأمر داخل مساحة أسماء المستخدم الخاصة بالخدمة الخفية. يستخدم Podman keep-id مع UID وGID للمستخدم الذي نفّذ الأمر. عندما تعمل Fleet نفسها بصلاحيات الجذر مع بيئة تشغيل جذرية، فإنها تحتفظ بمستخدم الصورة وتُسنِد ملفات التركيب الأولية إلى UID/GID 1000.
على المضيفات التي تستخدم SELinux، تتلقى مواضع تركيب Docker وPodman إعادة وسم خاصة باستخدام :Z. إذا استعدت بيانات الخلية أو نقلتها، فأبقِ المسارات المركّبة بالربط قابلة للكتابة بواسطة مستخدم الحاوية الفعلي. ملف التعريف ملائم للتشغيل غير الجذري، لكن يجب أن يكون Docker أو Podman مهيّأ بالفعل للعمل دون صلاحيات الجذر على المضيف؛ فلا تحوّل Fleet خدمة خفية جذرية إلى خدمة غير جذرية.
ملف التعريف الأمني
تطبّق Fleet ملف التعريف الآتي على كل خلية:
لا تركّب Fleet مطلقًا
/var/run/docker.sock، ولا تستخدم --privileged أو شبكة المضيف، ولا تضيف إمكانات. يمثّل جسر كل خلية حدًا للفصل بين الخلايا، وليس جدار حماية لحركة الخروج: تحتفظ الخلايا بإمكانية الخروج إلى الشبكة اللازمة للموفّرين والقنوات. ضع أمام منفذ الاسترجاع الحلقي وكيلاً أو نفق SSH أو إعداد tailnet يطابق عملية النشر لديك. لا يمكن الوصول مباشرةً إلى http://127.0.0.1:<port> إلا من مضيف Fleet.
يفصل ملف التعريف هذا حاويات المستأجرين، لكنه لا يحمي المستأجرين من مشغّل Fleet أو مسؤول بيئة تشغيل الحاويات أو مضيف مخترق. راجع الاستضافة متعددة المستأجرين للاطلاع على نموذج الثقة الكامل وخيارات العزل الأقوى.
معالجة الرموز
ينشئfleet create افتراضيًا رمز Gateway سداسيًا عشريًا عشوائيًا وآمنًا تشفيريًا بطول 32 حرفًا، ويطبعه مرة واحدة في نتيجة الإنشاء. خزّنه في مدير الأسرار المعتمد لديك، وتجنّب تسجيل مخرجات الإنشاء في السجلات.
يضع --gateway-token رمزًا مخصّصًا في وسائط العملية المحلية، وقد يُحتفَظ به في سجل الصدفة أو يظهر في قوائم العمليات. يُفضَّل استخدام الرمز المُنشأ ما لم يتطلب سير عمل قائم لإدارة الأسرار قيمةً مُوفَّرة.
يوجد الرمز وكل قيمة تم تمريرها باستخدام --env في بيئة الحاوية. تكتبها Fleet في ملف بيئة قصير العمر بوضع 0600، ولا تمرّر إلى Docker أو Podman سوى مسار ذلك الملف، ثم تزيله بعد انتهاء أمر بيئة التشغيل. قد تظل القيم المكتوبة صراحةً في openclaw fleet create --gateway-token ... أو --env KEY=VALUE ظاهرةً في وسائط عملية openclaw الخارجية وسجل الصدفة.
قيم بيئة الحاوية ليست مخفية عن مشغّل المضيف الموثوق به: إذ يمكن لمسؤولي Docker أو Podman قراءتها عبر فحص الحاوية. تصف ملاحظة Fleet «تُعرض مرة واحدة» المخرجات المعتادة لـ CLI، ولا تعني مقاومة مسؤول المضيف.