Podman
Запуск шлюза OpenClaw в rootless-контейнере Podman. Используется тот же образ, что и для Docker (сборка из Dockerfile репозитория).
Требования
- Podman (rootless)
- Sudo для одноразовой настройки (создание пользователя, сборка образа)
Быстрый старт
1. Одноразовая настройка (из корня репозитория; создаёт пользователя, собирает образ, устанавливает скрипт запуска):
./setup-podman.sh
Также создаёт минимальный ~openclaw/.openclaw/openclaw.json (устанавливает gateway.mode="local"), чтобы шлюз мог запуститься без прохождения мастера.
По умолчанию контейнер не устанавливается как systemd-сервис, вы запускаете его вручную (см. ниже). Для production-конфигурации с автозапуском и перезапусками установите его как systemd Quadlet user service:
./setup-podman.sh --quadlet
(Или задайте OPENCLAW_PODMAN_QUADLET=1; используйте --container для установки только контейнера и скрипта запуска.)
Опциональные переменные окружения при сборке (задайте перед setup-podman.sh):
OPENCLAW_DOCKER_APT_PACKAGES— установить дополнительные apt-пакеты при сборке образаOPENCLAW_EXTENSIONS— предустановить зависимости расширений (через пробел, напримерdiagnostics-otel matrix)
2. Запуск шлюза (ручной, для быстрого smoke-тестирования):
./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 user service для пользователя 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 включён lingering (setup делает это при наличии loginctl).
Чтобы добавить quadlet после начальной настройки без него, перезапустите: ./setup-podman.sh --quadlet.
Пользователь openclaw (без интерактивного входа)
setup-podman.sh создаёт системного пользователя openclaw:
-
Shell:
nologin— без интерактивного входа; уменьшает поверхность атаки. -
Home: например
/home/openclaw— содержит~/.openclaw(конфигурация, workspace) и скрипт запускаrun-openclaw-podman.sh. -
Rootless Podman: пользователю нужен диапазон subuid и subgid. Многие дистрибутивы назначают их автоматически при создании пользователя. Если setup выводит предупреждение, добавьте строки в
/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. Для редактирования: используйте Control UI при работающем шлюзе или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(bridge). Переопределяйте хостовые порты черезOPENCLAW_PODMAN_GATEWAY_HOST_PORTиOPENCLAW_PODMAN_BRIDGE_HOST_PORT. - Привязка шлюза: по умолчанию
run-openclaw-podman.shзапускает шлюз с--bind loopbackдля безопасного локального доступа. Для LAN-доступа задайтеOPENCLAW_GATEWAY_BIND=lanи настройтеgateway.controlUi.allowedOrigins(или явно включите host-header fallback) вopenclaw.json. - Пути: конфигурация и workspace хоста по умолчанию в
~openclaw/.openclawи~openclaw/.openclaw/workspace. Переопределяйте хостовые пути черезOPENCLAW_CONFIG_DIRиOPENCLAW_WORKSPACE_DIR.
Модель хранения
- Постоянные данные хоста:
OPENCLAW_CONFIG_DIRиOPENCLAW_WORKSPACE_DIRмонтируются bind-mount в контейнер, сохраняя состояние на хосте. - Эфемерный tmpfs sandbox: при включённом
agents.defaults.sandboxsandbox-контейнеры монтируютtmpfsв/tmp,/var/tmpи/run. Эти пути хранятся в памяти и исчезают вместе с sandbox-контейнером; основной контейнер Podman своих tmpfs-монтирований не добавляет. - Точки роста диска: следите за
media/,agents/<agentId>/sessions/sessions.json, JSONL-файлами транскриптов,cron/runs/*.jsonlи ротируемыми логами в/tmp/openclaw/(или заданномlogging.file).
setup-podman.sh размещает образ tar во временной приватной директории и выводит выбранный базовый каталог при настройке. Для не-root запусков принимает TMPDIR только когда этот каталог безопасен; иначе fallback на /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— конфигурация и workspace на хосте сохраняются
Решение проблем
- Permission denied (EACCES) для конфигурации или auth-profiles: контейнер по умолчанию использует
--userns=keep-idи работает с тем же uid/gid, что и хостовой пользователь. Убедитесь, чтоOPENCLAW_CONFIG_DIRиOPENCLAW_WORKSPACE_DIRпринадлежат этому пользователю. - Запуск шлюза заблокирован (нет
gateway.mode=local): убедитесь, что~openclaw/.openclaw/openclaw.jsonсуществует и содержитgateway.mode="local".setup-podman.shсоздаёт этот файл при отсутствии. - Rootless 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 из скрипта вручную, указав конфигурацию и workspace на свой home. Для большинства рекомендуется: используйте setup-podman.sh и запускайте от пользователя openclaw для изоляции конфигурации и процесса.