بودمان
شغل بوابة OpenClaw في حاوية بدون صلاحيات جذر لـ Podman. تستخدم نفس الصورة المستخدمة مع Docker (يتم بناؤها من ملف Dockerfile في المستودع).
المتطلبات
- Podman (بدون صلاحيات جذر)
- صلاحيات Sudo للإعداد لمرة واحدة (إنشاء مستخدم، بناء الصورة)
البدء السريع
1. الإعداد لمرة واحدة (من جذر المستودع؛ ينشئ مستخدمًا، يبني الصورة، يثبت سيناريو التشغيل):
./setup-podman.sh
هذا أيضًا ينشئ ملفًا أساسيًا ~openclaw/.openclaw/openclaw.json (يضبط gateway.mode="local") حتى تتمكن البوابة من البدء دون تشغيل معالج الإعداد. بشكل افتراضي لا يتم تثبيت الحاوية كخدمة systemd، يمكنك بدؤها يدويًا (انظر أدناه). لإعداد شبيه بالإنتاج مع بدء تلقائي وإعادة تشغيل، قم بتثبيتها كخدمة مستخدم systemd Quadlet بدلاً من ذلك:
./setup-podman.sh --quadlet
(أو اضبط OPENCLAW_PODMAN_QUADLET=1؛ استخدم --container لتثبيت الحاوية وبرنامج التشغيل فقط). متغيرات بيئة اختيارية وقت البناء (اضبطها قبل تشغيل setup-podman.sh):
OPENCLAW_DOCKER_APT_PACKAGES— تثبيت حزم apt إضافية أثناء بناء الصورةOPENCLAW_EXTENSIONS— تثبيت تبعيات الإضافات مسبقًا (أسماء إضافات مفصولة بمسافات، مثال:diagnostics-otel matrix)
2. بدء البوابة (يدويًا، للاختبار السريع):
./scripts/run-openclaw-podman.sh launch
3. معالج الإعداد (مثال: لإضافة قنوات أو موفّرين):
./scripts/run-openclaw-podman.sh launch setup
ثم افتح http://127.0.0.1:18789/ واستخدم الرمز المميز من ~openclaw/.openclaw/.env (أو القيمة المطبوعة بواسطة الإعداد).
Systemd (Quadlet، اختياري)
إذا قمت بتشغيل ./setup-podman.sh --quadlet (أو OPENCLAW_PODMAN_QUADLET=1)، فسيتم تثبيت وحدة Podman Quadlet بحيث تعمل البوابة كخدمة مستخدم systemd لمستخدم openclaw. يتم تمكين الخدمة وبدئها في نهاية الإعداد.
- بدء:
sudo systemctl --machine openclaw@ --user start openclaw.service - إيقاف:
sudo systemctl --machine openclaw@ --user stop openclaw.service - الحالة:
sudo systemctl --machine openclaw@ --user status openclaw.service - السجلات:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f
يوجد ملف quadlet في ~openclaw/.config/containers/systemd/openclaw.container. لتغيير المنافذ أو متغيرات البيئة، قم بتحرير هذا الملف (أو ملف .env الذي يستورده)، ثم sudo systemctl --machine openclaw@ --user daemon-reload وأعد تشغيل الخدمة. عند التمهيد، تبدأ الخدمة تلقائيًا إذا كان التمكين المستمر مفعلًا لـ openclaw (يقوم الإعداد بذلك عندما يكون loginctl متاحًا). لإضافة quadlet بعد إعداد أولي لم يستخدمه، أعد التشغيل: ./setup-podman.sh --quadlet.
مستخدم openclaw (غير تفاعلي)
ينشئ setup-podman.sh مستخدم نظام مخصص openclaw:
-
الطرفية:
nologin— لا تسجيل دخول تفاعلي؛ يقلل من السطح المعرض للهجوم. -
المجلد الرئيسي: مثال:
/home/openclaw— يحتفظ بـ~/.openclaw(الإعدادات، مساحة العمل) وبرنامج التشغيلrun-openclaw-podman.sh. -
Podman بدون صلاحيات جذر: يجب أن يكون للمستخدم نطاق subuid و subgid. العديد من التوزيعات تقوم بتعيين هذه تلقائيًا عند إنشاء المستخدم. إذا طبع الإعداد تحذيرًا، أضف الأسطر إلى
/etc/subuidو/etc/subgid:نسخ
openclaw:100000:65536ثم ابدأ البوابة كذاك المستخدم (مثال: من cron أو systemd):
نسخ
sudo -u openclaw /home/openclaw/run-openclaw-podman.sh sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup -
الإعدادات: فقط
openclawو root يمكنهما الوصول إلى/home/openclaw/.openclaw. لتحرير الإعدادات: استخدم واجهة التحكم بمجرد تشغيل البوابة، أوsudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json.
البيئة والإعدادات
- الرمز المميز: مخزن في
~openclaw/.openclaw/.envكـOPENCLAW_GATEWAY_TOKEN. يقومsetup-podman.shوrun-openclaw-podman.shبتوليده إذا كان مفقودًا (يستخدمopenssl،python3، أوod). - اختياري: في ملف
.envذاك يمكنك تعيين مفاتيح المزودين (مثال:GROQ_API_KEY،OLLAMA_API_KEY) ومتغيرات بيئة OpenClaw الأخرى. - منافذ المضيف: بشكل افتراضي، يقوم البرنامج النصي بتعيين
18789(البوابة) و18790(الجسر). غيّر تعيين منفذ المضيف باستخدامOPENCLAW_PODMAN_GATEWAY_HOST_PORTوOPENCLAW_PODMAN_BRIDGE_HOST_PORTعند البدء. - ربط البوابة: بشكل افتراضي، يبدأ
run-openclaw-podman.shالبوابة بـ--bind loopbackللوصول المحلي الآمن. للتعرض على الشبكة المحلية، اضبطOPENCLAW_GATEWAY_BIND=lanوضبطgateway.controlUi.allowedOrigins(أو فعّل بشكل صريح استرجاع رأس المضيف) فيopenclaw.json. - المسارات: إعدادات المضيف ومساحة العمل الافتراضية هي
~openclaw/.openclawو~openclaw/.openclaw/workspace. غيّر مسارات المضيف المستخدمة بواسطة برنامج التشغيل باستخدامOPENCLAW_CONFIG_DIRوOPENCLAW_WORKSPACE_DIR.
نموذج التخزين
- بيانات المضيف المستمرة: يتم ربط
OPENCLAW_CONFIG_DIRوOPENCLAW_WORKSPACE_DIRداخل الحاوية وتحتفظ بالحالة على المضيف. - tmpfs للحاوية العازلة المؤقتة: إذا قمت بتمكين
agents.defaults.sandbox، فإن حاويات أداة الحاوية العازلة تربطtmpfsعلى/tmp،/var/tmp، و/run. هذه المسارات مدعومة بالذاكرة وتختفي مع حاوية الحاوية العازلة؛ إعداد حاوية Podman الرئيسية لا يضيف نقاط ربط tmpfs خاصة به. - بؤر نمو القرص: المسارات الرئيسية للمراقبة هي
media/،agents/<agentId>/sessions/sessions.json، ملفات JSONL للنصوص،cron/runs/*.jsonl، وسجلات الملفات الدوارة تحت/tmp/openclaw/(أوlogging.fileالذي قمت بتكوينه).
يقوم setup-podman.sh الآن بتخزين صورة tar مؤقتًا في دليل خاص مؤقت ويطبع مجلد القاعدة المختار أثناء الإعداد. للتشغيلات بدون صلاحيات جذر، يقبل TMPDIR فقط عندما تكون تلك القاعدة آمنة للاستخدام؛ وإلا فإنه يتراجع إلى /var/tmp، ثم /tmp. يبقى ملف tar المحفوظ ملكية خاصة للمالك ويتم تحميله في podman load الخاص بالمستخدم المستهدف، لذا فإن المجلدات المؤقتة الخاصة للمنشئ لا تعيق الإعداد.
أوامر مفيدة
- السجلات: مع quadlet:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f. مع البرنامج النصي:sudo -u openclaw podman logs -f openclaw - إيقاف: مع quadlet:
sudo systemctl --machine openclaw@ --user stop openclaw.service. مع البرنامج النصي:sudo -u openclaw podman stop openclaw - بدء مرة أخرى: مع quadlet:
sudo systemctl --machine openclaw@ --user start openclaw.service. مع البرنامج النصي: أعد تشغيل برنامج التشغيل أوpodman start openclaw - إزالة الحاوية:
sudo -u openclaw podman rm -f openclaw— يتم الاحتفاظ بالإعدادات ومساحة العمل على المضيف
استكشاف الأخطاء وإصلاحها
- تم رفض الإذن (EACCES) على الإعدادات أو ملفات تعريف المصادقة: تعمل الحاوية افتراضيًا بـ
--userns=keep-idوتعمل بنفس uid/gid كمستخدم المضيف الذي يشغل البرنامج النصي. تأكد من أنOPENCLAW_CONFIG_DIRوOPENCLAW_WORKSPACE_DIRعلى المضيف مملوكان لذلك المستخدم. - بدء البوابة محظور (مفقود
gateway.mode=local): تأكد من وجود~openclaw/.openclaw/openclaw.jsonوأنه يضبطgateway.mode="local". يقومsetup-podman.shبإنشاء هذا الملف إذا كان مفقودًا. - فشل Podman بدون صلاحيات جذر لمستخدم openclaw: تحقق من أن
/etc/subuidو/etc/subgidيحتويان على سطر لـopenclaw(مثال:openclaw:100000:65536). أضفه إذا كان مفقودًا وأعد التشغيل. - اسم الحاوية قيد الاستخدام: يستخدم برنامج التشغيل
podman run --replace، لذا يتم استبدال الحاوية الموجودة عند البدء مرة أخرى. للتنظيف يدويًا:podman rm -f openclaw. - البرنامج النصي غير موجود عند التشغيل كـ openclaw: تأكد من تشغيل
setup-podman.shبحيث يتم نسخrun-openclaw-podman.shإلى المجلد الرئيسي لـ openclaw (مثال:/home/openclaw/run-openclaw-podman.sh). - خدمة Quadlet غير موجودة أو تفشل في البدء: شغل
sudo systemctl --machine openclaw@ --user daemon-reloadبعد تحرير ملف.container. يتطلب Quadlet cgroups v2: يجب أن يظهرpodman info --format '{{.Host.CgroupsVersion}}'القيمة2.
اختياري: التشغيل كمستخدمك الخاص
لتشغيل البوابة كمستخدمك العادي (بدون مستخدم openclaw مخصص): ابنِ الصورة، وأنشئ ~/.openclaw/.env بـ OPENCLAW_GATEWAY_TOKEN، وشغل الحاوية بـ --userns=keep-id ونقاط ربط إلى ~/.openclaw الخاص بك. تم تصميم برنامج التشغيل لتدفق مستخدم openclaw؛ لإعداد مستخدم واحد، يمكنك بدلاً من ذلك تشغيل أمر podman run من البرنامج النصي يدويًا، مشيرًا بالإعدادات ومساحة العمل إلى مجلدك الرئيسي. موصى به لمعظم المستخدمين: استخدم setup-podman.sh وشغل كمستخدم openclaw بحيث تكون الإعدادات والعملية معزولتين.