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 --quadlet
Quadlet گزینهای فقط برای 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-open
openclaw gateway status --deep # includes extra service scan
openclaw doctor
openclaw 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-reload
systemctl --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را خودکار اضافه میکند.