Containers
Podman
OpenClaw Gateway را در یک کانتینر Podman بدون root اجرا کنید که توسط کاربر غیر root فعلی شما مدیریت میشود.
مدل موردنظر این است:
- Podman کانتینر Gateway را اجرا میکند.
- CLI میزبان
openclawشما سطح کنترل است. - وضعیت پایدار بهصورت پیشفرض روی میزبان در
~/.openclawقرار دارد. - مدیریت روزمره از
openclaw --container <name> ...بهجایsudo -u openclaw،podman exec، یا یک کاربر سرویس جداگانه استفاده میکند.
پیشنیازها
- Podman در حالت بدون root
- OpenClaw CLI نصبشده روی میزبان
- اختیاری:
systemd --userاگر راهاندازی خودکار مدیریتشده با Quadlet میخواهید - اختیاری:
sudoفقط اگر برای پایداری پس از بوت روی یک میزبان بدون نمایشگر،loginctl enable-linger "$(whoami)"را میخواهید
شروع سریع
راهاندازی یکباره
از ریشه repo، ./scripts/podman/setup.sh را اجرا کنید.
راهاندازی کانتینر Gateway
کانتینر را با ./scripts/run-openclaw-podman.sh launch راهاندازی کنید.
اجرای onboarding داخل کانتینر
./scripts/run-openclaw-podman.sh launch setup را اجرا کنید، سپس http://127.0.0.1:18789/ را باز کنید.
مدیریت کانتینر در حال اجرا از CLI میزبان
OPENCLAW_CONTAINER=openclaw را تنظیم کنید، سپس از فرمانهای عادی openclaw از میزبان استفاده کنید.
جزئیات راهاندازی:
./scripts/podman/setup.shبهصورت پیشفرضopenclaw:localرا در store بدون root Podman شما میسازد، یا اگرOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEرا تنظیم کرده باشید از آن استفاده میکند.- اگر
~/.openclaw/openclaw.jsonوجود نداشته باشد، آن را باgateway.mode: "local"ایجاد میکند. - اگر
~/.openclaw/.envوجود نداشته باشد، آن را باOPENCLAW_GATEWAY_TOKENایجاد میکند. - برای اجراهای دستی، helper فقط یک allowlist کوچک از کلیدهای مرتبط با Podman را از
~/.openclaw/.envمیخواند و env varهای runtime صریح را به کانتینر پاس میدهد؛ فایل env کامل را به Podman نمیدهد.
راهاندازی مدیریتشده با Quadlet:
./scripts/podman/setup.sh --quadletQuadlet گزینهای فقط برای Linux است، چون به سرویسهای کاربری systemd وابسته است.
همچنین میتوانید OPENCLAW_PODMAN_QUADLET=1 را تنظیم کنید.
env varهای اختیاری build/setup:
OPENCLAW_IMAGEیاOPENCLAW_PODMAN_IMAGE-- بهجای ساختنopenclaw:localاز یک image موجود/دریافتشده استفاده کنیدOPENCLAW_DOCKER_APT_PACKAGES-- هنگام ساخت image، بستههای apt اضافی نصب کنیدOPENCLAW_EXTENSIONS-- وابستگیهای plugin را هنگام build از پیش نصب کنیدOPENCLAW_INSTALL_BROWSER-- Chromium و Xvfb را برای اتوماسیون مرورگر از پیش نصب کنید (برای فعالسازی روی1تنظیم کنید)
راهاندازی کانتینر:
./scripts/run-openclaw-podman.sh launchاین script کانتینر را با uid/gid فعلی شما و --userns=keep-id شروع میکند و وضعیت OpenClaw شما را در کانتینر bind-mount میکند.
Onboarding:
./scripts/run-openclaw-podman.sh launch setupسپس http://127.0.0.1:18789/ را باز کنید و از token موجود در ~/.openclaw/.env استفاده کنید.
پیشفرض CLI میزبان:
export OPENCLAW_CONTAINER=openclawسپس فرمانهایی مانند اینها بهصورت خودکار داخل آن کانتینر اجرا میشوند:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginدر macOS، Podman machine ممکن است باعث شود مرورگر برای Gateway غیرمحلی به نظر برسد. اگر رابط کاربری کنترل پس از launch خطاهای device-auth گزارش کرد، از راهنمای Tailscale در Podman و Tailscale استفاده کنید.
Podman و Tailscale
برای HTTPS یا دسترسی مرورگر راه دور، از مستندات اصلی Tailscale پیروی کنید.
نکته مخصوص Podman:
- میزبان publish مربوط به Podman را روی
127.0.0.1نگه دارید. tailscale serveمدیریتشده توسط میزبان را بهopenclaw gateway --tailscale serveترجیح دهید.- در macOS، اگر context احراز هویت دستگاه مرورگر محلی قابل اتکا نیست، بهجای راهکارهای موقت tunnel محلی، از دسترسی Tailscale استفاده کنید.
ببینید:
Systemd (Quadlet، اختیاری)
اگر ./scripts/podman/setup.sh --quadlet را اجرا کرده باشید، setup یک فایل Quadlet را در این مسیر نصب میکند:
~/.config/containers/systemd/openclaw.containerفرمانهای مفید:
- شروع:
systemctl --user start openclaw.service - توقف:
systemctl --user stop openclaw.service - وضعیت:
systemctl --user status openclaw.service - لاگها:
journalctl --user -u openclaw.service -f
پس از ویرایش فایل Quadlet:
systemctl --user daemon-reloadsystemctl --user restart openclaw.serviceبرای پایداری پس از بوت روی میزبانهای SSH/بدون نمایشگر، lingering را برای کاربر فعلی خود فعال کنید:
sudo loginctl enable-linger "$(whoami)"پیکربندی، env، و ذخیرهسازی
- دایرکتوری پیکربندی:
~/.openclaw - دایرکتوری workspace:
~/.openclaw/workspace - فایل token:
~/.openclaw/.env - helper راهاندازی:
./scripts/run-openclaw-podman.sh
script راهاندازی و Quadlet وضعیت میزبان را در کانتینر bind-mount میکنند:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
بهصورت پیشفرض اینها دایرکتوریهای میزبان هستند، نه وضعیت ناشناس کانتینر، بنابراین
openclaw.json، فایلهای auth-profiles.json بهازای هر agent، وضعیت channel/provider،
sessionها، و workspace پس از جایگزینی کانتینر باقی میمانند.
setup مربوط به Podman همچنین gateway.controlUi.allowedOrigins را برای 127.0.0.1 و localhost روی پورت منتشرشده Gateway مقداردهی اولیه میکند تا dashboard محلی با bind غیر loopback کانتینر کار کند.
env varهای مفید برای launcher دستی:
OPENCLAW_PODMAN_CONTAINER-- نام کانتینر (بهصورت پیشفرضopenclaw)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE-- image برای اجراOPENCLAW_PODMAN_GATEWAY_HOST_PORT-- پورت میزبان که به18789کانتینر map میشودOPENCLAW_PODMAN_BRIDGE_HOST_PORT-- پورت میزبان که به18790کانتینر map میشودOPENCLAW_PODMAN_PUBLISH_HOST-- interface میزبان برای پورتهای منتشرشده؛ پیشفرض127.0.0.1استOPENCLAW_GATEWAY_BIND-- حالت bind Gateway داخل کانتینر؛ پیشفرضlanاستOPENCLAW_PODMAN_USERNS--keep-id(پیشفرض)،auto، یاhost
launcher دستی پیش از نهاییکردن پیشفرضهای کانتینر/image، ~/.openclaw/.env را میخواند، بنابراین میتوانید اینها را آنجا پایدار کنید.
اگر از OPENCLAW_CONFIG_DIR یا OPENCLAW_WORKSPACE_DIR غیرپیشفرض استفاده میکنید، همان متغیرها را هم برای ./scripts/podman/setup.sh و هم برای فرمانهای بعدی ./scripts/run-openclaw-podman.sh launch تنظیم کنید. launcher محلی repo، overrideهای مسیر سفارشی را بین shellها پایدار نمیکند.
نکته Quadlet:
- سرویس Quadlet تولیدشده عمداً یک شکل پیشفرض ثابت و سختگیرانه را حفظ میکند: پورتهای منتشرشده روی
127.0.0.1،--bind lanداخل کانتینر، و namespace کاربریkeep-id. OPENCLAW_NO_RESPAWN=1،Restart=on-failure، وTimeoutStartSec=300را pin میکند.- هر دو
127.0.0.1:18789:18789(Gateway) و127.0.0.1:18790:18790(bridge) را publish میکند. ~/.openclaw/.envرا بهعنوانEnvironmentFileزمان اجرا برای مقدارهایی مانندOPENCLAW_GATEWAY_TOKENمیخواند، اما allowlist override مخصوص Podman در launcher دستی را مصرف نمیکند.- اگر به پورتهای publish سفارشی، میزبان publish، یا flagهای دیگر اجرای کانتینر نیاز دارید، از launcher دستی استفاده کنید یا
~/.config/containers/systemd/openclaw.containerرا مستقیماً ویرایش کنید، سپس service را reload و restart کنید.
فرمانهای مفید
- لاگهای کانتینر:
podman logs -f openclaw - توقف کانتینر:
podman stop openclaw - حذف کانتینر:
podman rm -f openclaw - باز کردن URL داشبورد از CLI میزبان:
openclaw dashboard --no-open - سلامت/وضعیت از طریق CLI میزبان:
openclaw gateway status --deep(کاوش RPC + اسکن service اضافی)
عیبیابی
- Permission denied (EACCES) روی config یا workspace: کانتینر بهصورت پیشفرض با
--userns=keep-idو--user <your uid>:<your gid>اجرا میشود. مطمئن شوید مسیرهای config/workspace میزبان تحت مالکیت کاربر فعلی شما هستند. - شروع Gateway مسدود شده است (
gateway.mode=localموجود نیست): مطمئن شوید~/.openclaw/openclaw.jsonوجود دارد وgateway.mode="local"را تنظیم میکند.scripts/podman/setup.shاگر این مورد موجود نباشد، آن را ایجاد میکند. - فرمانهای CLI کانتینر به مقصد اشتباه میخورند: بهصورت صریح از
openclaw --container <name> ...استفاده کنید، یاOPENCLAW_CONTAINER=<name>را در shell خود export کنید. openclaw updateبا--containerشکست میخورد: مورد انتظار است. image را دوباره build/pull کنید، سپس کانتینر یا سرویس Quadlet را restart کنید.- سرویس Quadlet شروع نمیشود:
systemctl --user daemon-reloadرا اجرا کنید، سپسsystemctl --user start openclaw.service. روی سیستمهای بدون نمایشگر شاید بهsudo loginctl enable-linger "$(whoami)"هم نیاز داشته باشید. - SELinux مانع bind mountها میشود: رفتار mount پیشفرض را دستنخورده بگذارید؛ launcher هنگام enforcing یا permissive بودن SELinux روی Linux،
:Zرا خودکار اضافه میکند.