Containers
Podman
OpenClaw Gateway را در یک کانتینر Podman بدون روت اجرا کنید که توسط کاربر غیرروت فعلی شما مدیریت میشود.
مدل مورد نظر این است:
- Podman کانتینر Gateway را اجرا میکند.
- CLI میزبان
openclawلایه کنترل است. - وضعیت پایدار بهصورت پیشفرض روی میزبان و زیر
~/.openclawقرار دارد. - مدیریت روزمره بهجای
sudo -u openclaw،podman exec، یا یک کاربر سرویس جداگانه، ازopenclaw --container <name> ...استفاده میکند.
پیشنیازها
- Podman در حالت بدون روت
- OpenClaw CLI نصبشده روی میزبان
- اختیاری:
systemd --userاگر راهاندازی خودکار مدیریتشده با Quadlet میخواهید - اختیاری:
sudoفقط اگر برای پایداری پس از بوت روی یک میزبان بدون نمایشگر،loginctl enable-linger "$(whoami)"میخواهید
شروع سریع
راهاندازی یکباره
از ریشه مخزن، ./scripts/podman/setup.sh را اجرا کنید.
شروع کانتینر Gateway
کانتینر را با ./scripts/run-openclaw-podman.sh launch شروع کنید.
اجرای راهاندازی اولیه داخل کانتینر
./scripts/run-openclaw-podman.sh launch setup را اجرا کنید، سپس http://127.0.0.1:18789/ را باز کنید.
مدیریت کانتینر در حال اجرا از CLI میزبان
OPENCLAW_CONTAINER=openclaw را تنظیم کنید، سپس از دستورهای عادی openclaw روی میزبان استفاده کنید.
جزئیات راهاندازی:
./scripts/podman/setup.shبهصورت پیشفرضopenclaw:localرا در انبار Podman بدون روت شما میسازد، یا اگرOPENCLAW_IMAGE/OPENCLAW_PODMAN_IMAGEرا تنظیم کرده باشید از آن استفاده میکند.- اگر
~/.openclaw/openclaw.jsonوجود نداشته باشد، آن را باgateway.mode: "local"ایجاد میکند. - اگر
~/.openclaw/.envوجود نداشته باشد، آن را باOPENCLAW_GATEWAY_TOKENایجاد میکند. - برای اجراهای دستی، ابزار کمکی فقط یک allowlist کوچک از کلیدهای مرتبط با Podman را از
~/.openclaw/.envمیخواند و متغیرهای محیطی زمان اجرا را بهصورت صریح به کانتینر میدهد؛ کل فایل env را به Podman نمیدهد.
راهاندازی مدیریتشده با Quadlet:
./scripts/podman/setup.sh --quadletQuadlet گزینهای فقط مخصوص Linux است، چون به سرویسهای کاربری systemd وابسته است.
همچنین میتوانید OPENCLAW_PODMAN_QUADLET=1 را تنظیم کنید.
متغیرهای محیطی اختیاری برای ساخت/راهاندازی:
OPENCLAW_IMAGEیاOPENCLAW_PODMAN_IMAGE-- بهجای ساختنopenclaw:local، از یک ایمیج موجود/دریافتشده استفاده کنیدOPENCLAW_IMAGE_APT_PACKAGES-- هنگام ساخت ایمیج، بستههای apt اضافی نصب کنید (همچنینOPENCLAW_DOCKER_APT_PACKAGESقدیمی را میپذیرد)OPENCLAW_IMAGE_PIP_PACKAGES-- هنگام ساخت ایمیج، بستههای Python اضافی نصب کنید؛ نسخهها را pin کنید و فقط از package indexهایی استفاده کنید که به آنها اعتماد داریدOPENCLAW_EXTENSIONS-- وابستگیهای Plugin را هنگام ساخت از پیش نصب کنیدOPENCLAW_INSTALL_BROWSER-- Chromium و Xvfb را برای خودکارسازی مرورگر از پیش نصب کنید (برای فعالسازی روی1تنظیم کنید)
شروع کانتینر:
./scripts/run-openclaw-podman.sh launchاین اسکریپت کانتینر را با uid/gid فعلی شما و --userns=keep-id شروع میکند و وضعیت OpenClaw شما را به کانتینر bind-mount میکند.
راهاندازی اولیه:
./scripts/run-openclaw-podman.sh launch setupسپس http://127.0.0.1:18789/ را باز کنید و از توکن موجود در ~/.openclaw/.env استفاده کنید.
احراز هویت مدل در Podman:
- هنگام راهاندازی، از احراز هویت مدیریتشده توسط OpenClaw استفاده کنید: کلیدهای API Anthropic برای Anthropic، یا احراز هویت OAuth مرورگر/کد دستگاه OpenAI Codex برای OpenAI پشتیبانیشده توسط Codex.
- راهانداز Podman خانههای اعتبارنامه CLI میزبان مانند
~/.claudeیا~/.codexرا داخل کانتینر راهاندازی یا Gateway mount نمیکند. - ورودهای CLI موجود روی میزبان مسیرهای سهولت استفاده روی همان میزبان هستند. برای نصبهای کانتینری، احراز هویت ارائهدهنده را در وضعیت mountشده
~/.openclawنگه دارید که راهاندازی آن را مدیریت میکند.
پیشفرض CLI میزبان:
export OPENCLAW_CONTAINER=openclawسپس دستورهایی مانند اینها بهصورت خودکار داخل همان کانتینر اجرا میشوند:
openclaw dashboard --no-openopenclaw gateway status --deep # includes extra service scanopenclaw doctoropenclaw channels loginدر macOS، ماشین Podman ممکن است باعث شود مرورگر برای Gateway غیرمحلی به نظر برسد. اگر Control UI پس از راهاندازی خطاهای احراز هویت دستگاه گزارش کرد، از راهنمای Tailscale در Podman و Tailscale استفاده کنید.
Podman و Tailscale
برای HTTPS یا دسترسی مرورگر از راه دور، مستندات اصلی Tailscale را دنبال کنید.
نکته مخصوص Podman:
- میزبان publish در Podman را روی
127.0.0.1نگه دارید. tailscale serveمدیریتشده توسط میزبان را بهopenclaw gateway --tailscale serveترجیح دهید.- در macOS، اگر زمینه احراز هویت دستگاه مرورگر محلی قابل اتکا نیست، بهجای راهحلهای موقت تونل محلی، از دسترسی Tailscale استفاده کنید.
ببینید:
Systemd (Quadlet، اختیاری)
اگر ./scripts/podman/setup.sh --quadlet را اجرا کرده باشید، راهاندازی یک فایل 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 - فایل توکن:
~/.openclaw/.env - ابزار کمکی اجرا:
./scripts/run-openclaw-podman.sh
اسکریپت اجرا و Quadlet وضعیت میزبان را داخل کانتینر bind-mount میکنند:
OPENCLAW_CONFIG_DIR->/home/node/.openclawOPENCLAW_WORKSPACE_DIR->/home/node/.openclaw/workspace
بهصورت پیشفرض اینها دایرکتوریهای میزبان هستند، نه وضعیت anonymous کانتینر، بنابراین
openclaw.json، فایلهای auth-profiles.json هر agent، وضعیت کانال/ارائهدهنده،
sessionها، و workspace پس از جایگزینی کانتینر باقی میمانند.
راهاندازی Podman همچنین gateway.controlUi.allowedOrigins را برای 127.0.0.1 و localhost روی پورت Gateway منتشرشده مقداردهی اولیه میکند تا dashboard محلی با bind غیر-loopback کانتینر کار کند.
متغیرهای محیطی مفید برای راهانداز دستی:
OPENCLAW_PODMAN_CONTAINER-- نام کانتینر (openclawبهصورت پیشفرض)OPENCLAW_PODMAN_IMAGE/OPENCLAW_IMAGE-- ایمیجی که اجرا میشودOPENCLAW_PODMAN_GATEWAY_HOST_PORT-- پورت میزبان نگاشتشده به18789کانتینرOPENCLAW_PODMAN_BRIDGE_HOST_PORT-- پورت میزبان نگاشتشده به18790کانتینرOPENCLAW_PODMAN_PUBLISH_HOST-- رابط میزبان برای پورتهای منتشرشده؛ پیشفرض127.0.0.1استOPENCLAW_GATEWAY_BIND-- حالت bind مربوط به Gateway داخل کانتینر؛ پیشفرضlanاستOPENCLAW_PODMAN_USERNS--keep-id(پیشفرض)،auto، یاhost
راهانداز دستی پیش از نهایی کردن پیشفرضهای کانتینر/ایمیج، ~/.openclaw/.env را میخواند، بنابراین میتوانید این مقادیر را آنجا پایدار کنید.
اگر از OPENCLAW_CONFIG_DIR یا OPENCLAW_WORKSPACE_DIR غیرپیشفرض استفاده میکنید، همان متغیرها را هم برای ./scripts/podman/setup.sh و هم برای دستورهای بعدی ./scripts/run-openclaw-podman.sh launch تنظیم کنید. راهانداز repo-local بازنویسیهای مسیر سفارشی را بین shellها پایدار نمیکند.
نکته Quadlet:
- سرویس Quadlet تولیدشده عمداً یک شکل پیشفرض ثابت و سختسازیشده را نگه میدارد: پورتهای منتشرشده روی
127.0.0.1،--bind lanداخل کانتینر، و فضای نام کاربری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) را منتشر میکند. ~/.openclaw/.envرا بهعنوانEnvironmentFileزمان اجرا برای مقادیری مانندOPENCLAW_GATEWAY_TOKENمیخواند، اما allowlist بازنویسی مخصوص Podman راهانداز دستی را مصرف نمیکند.- اگر به پورتهای publish سفارشی، میزبان publish سفارشی، یا flagهای دیگر اجرای کانتینر نیاز دارید، از راهانداز دستی استفاده کنید یا مستقیماً
~/.config/containers/systemd/openclaw.containerرا ویرایش کنید، سپس سرویس را reload و restart کنید.
دستورهای مفید
- لاگهای کانتینر:
podman logs -f openclaw - توقف کانتینر:
podman stop openclaw - حذف کانتینر:
podman rm -f openclaw - باز کردن URL dashboard از CLI میزبان:
openclaw dashboard --no-open - سلامت/وضعیت از طریق CLI میزبان:
openclaw gateway status --deep(probe RPC + اسکن سرویس اضافی)
عیبیابی
- Permission denied (EACCES) روی پیکربندی یا workspace: کانتینر بهصورت پیشفرض با
--userns=keep-idو--user <your uid>:<your gid>اجرا میشود. مطمئن شوید مسیرهای پیکربندی/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شکست میخورد: مورد انتظار است. ایمیج را دوباره بسازید/دریافت کنید، سپس کانتینر یا سرویس Quadlet را restart کنید.- سرویس Quadlet شروع نمیشود:
systemctl --user daemon-reloadرا اجرا کنید، سپسsystemctl --user start openclaw.service. روی سیستمهای بدون نمایشگر، ممکن است بهsudo loginctl enable-linger "$(whoami)"هم نیاز داشته باشید. - SELinux جلوی bind mountها را میگیرد: رفتار mount پیشفرض را دستنخورده بگذارید؛ راهانداز وقتی SELinux در حالت enforcing یا permissive باشد، روی Linux بهصورت خودکار
:Zرا اضافه میکند.