Podman
Запустите шлюз OpenClaw в rootless-контейнере Podman. Используется тот же образ, что и для Docker (собирается из Dockerfile репозитория).
Требования
- Podman (rootless)
- Sudo для одноразовой настройки (создание пользователя, сборка образа)
Быстрый старт
1. Одноразовая настройка (из корня репозитория; создаёт пользователя, собирает образ, устанавливает скрипт запуска):
./setup-podman.sh
Это также создаёт минимальный файл ~openclaw/.openclaw/openclaw.json (устанавливает gateway.mode="local"), чтобы шлюз мог запуститься без запуска мастера настройки. По умолчанию контейнер не устанавливается как служба systemd, вы запускаете его вручную (см. ниже). Для настройки в стиле production с автозапуском и перезапусками установите его как службу 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 включено lingering (настройка делает это, если доступен loginctl). Чтобы добавить quadlet после первоначальной настройки, которая его не использовала, перезапустите: ./setup-podman.sh --quadlet.
Пользователь openclaw (без входа в систему)
setup-podman.sh создаёт выделенного системного пользователя openclaw:
-
Оболочка:
nologin— без интерактивного входа; уменьшает поверхность атаки. -
Домашний каталог: например,
/home/openclaw— содержит~/.openclaw(конфигурация, рабочая область) и скрипт запускаrun-openclaw-podman.sh. -
Rootless 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. Для редактирования конфигурации: используйте 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(мост). Чтобы изменить проброс портов на хосте, используйте переменные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подключаются в контейнер через bind mount и сохраняют состояние на хосте. - Временная песочница 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-архив образа в приватном временном каталоге и выводит выбранный базовый каталог во время настройки. Для запусков не от root он принимает 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) для конфигурации или 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 из скрипта вручную, указав конфигурацию и рабочую область в вашем домашнем каталоге. Для большинства пользователей рекомендуется: используйте setup-podman.sh и запускайте от имени пользователя openclaw, чтобы конфигурация и процесс были изолированы.