openclaw fleet
openclaw fleet управляет полноценными экземплярами OpenClaw, называемыми ячейками. Каждая ячейка имеет собственные Gateway, состояние, учётные данные, аккаунты каналов, контейнер и порт хоста, доступный только через loopback-интерфейс. Используйте отдельную ячейку для каждой границы доверия арендатора; не используйте общий Gateway в качестве границы между недоверенными арендаторами.
Fleet — экспериментальная функция. Имена команд, флаги, форматы вывода и профиль контейнера могут изменяться между выпусками без периода устаревания.
Fleet поддерживает Docker и Podman. Образ по умолчанию — ghcr.io/openclaw/openclaw:latest.
Fleet протестирован на хостах Linux и macOS. Хосты Windows в настоящее время не тестировались.
Быстрый старт
fleet create однократно выводит сгенерированный токен Gateway вместе с URL-адресом ячейки. Немедленно сохраните токен, а затем настройте аккаунты каналов каждого арендатора внутри его ячейки.
Идентификаторы арендаторов
Идентификаторы арендаторов должны соответствовать следующему выражению:../acme, отклоняются.
Идентификатор становится частью имени контейнера: openclaw-cell-<tenant>.
fleet create
Создайте и запустите ячейку:
--env:
Параметры создания
При автоматическом выделении выбирается первый неиспользуемый порт реестра, равный
19100 или превышающий его. Fleet отклоняет повторяющиеся идентификаторы арендаторов и явно заданные порты, уже назначенные другой ячейке.
Ссылки на образы передаются среде выполнения контейнеров как один аргумент. Пустые ссылки и значения, начинающиеся с -, отклоняются, чтобы образ нельзя было интерпретировать как параметр Docker или Podman.
Выбранная конечная точка Docker или Podman должна быть локальной. Fleet отклоняет удалённые контексты Docker, конечные точки DOCKER_HOST и удалённые службы Podman до резервирования порта или создания локального состояния. Удалённые хосты ячеек не поддерживаются.
Когда Fleet запускает новую ячейку, команда создания ожидает до приблизительно одной минуты, пока её Gateway не ответит на /healthz. Если ячейка не переходит в исправное состояние, Fleet сохраняет её контейнер и строку реестра для fleet status, fleet logs или явного удаления. --no-start пропускает эту проверку работоспособности. Сгенерированный токен Gateway новой неисправной ячейки не теряется: он остаётся в среде контейнера (docker|podman inspect). Поскольку ячейка ещё не обслуживала трафик, безопасной альтернативой всегда является fleet rm --force с последующим повторным созданием.
Закрепление по дайджесту
Команды создания и обновления принимают ссылки на образы, закреплённые по дайджесту, например--image ghcr.io/openclaw/openclaw@sha256:<digest>. Fleet без изменений передаёт ссылку на образ Docker или Podman, что позволяет оператору закрепить ячейку за неизменяемыми байтами образа вместо изменяемого тега.
Результат создания содержит идентификатор арендатора, имя контейнера, порт хоста, токен Gateway и локальный URL-адрес. Даже при выводе в формате JSON считайте результат содержащим секретные данные, поскольку в нём присутствует токен.
Ограничения диска
--disk ограничивает только записываемый слой контейнера. Подключённые с привязкой каталоги состояния и аутентификации каждого арендатора остаются в хранилище хоста; если для этих каталогов также требуется жёсткое ограничение, используйте проектные квоты файловой системы хоста.
Политика исходящего трафика
Для Docker сохраните режим моста и применяйте политику исходящего трафика с помощью правил межсетевого экрана хоста, например цепочки
DOCKER-USER.
fleet list
Выведите список ячеек в порядке идентификаторов арендаторов:
Строки реестра остаются видимыми, когда Docker или Podman недоступны; только текущее состояние меняется на
unknown.
fleet status
Проверьте одну ячейку:
ok, failed или skipped. /healthz подтверждает работоспособность Gateway, но не полную готовность каждого настроенного канала или плагина. Проверка пропускается, если нет пригодной локальной конечной точки.
fleet logs
Передавайте поток журналов контейнера ячейки непосредственно в терминал:
--follow, не считая остановку оператором ошибкой команды. Вывод журнала проходит через фильтр редактирования, который заменяет текущий токен Gateway ячейки на <redacted> до попадания данных в терминал.
У fleet logs нет режима --json, поскольку журналы контейнера представляют собой необработанный поток stdout/stderr. В скриптах ограничивайте объём вывода с помощью --tail и используйте обычное перенаправление или конвейеры оболочки.
fleet start, fleet stop и fleet restart
Управляйте существующей ячейкой с помощью указанной для неё среды выполнения:
fleet upgrade
Повторно загрузите указанный образ и замените контейнер ячейки:
--env. Подключённое состояние сохраняется при замене контейнера; заданные образом переменные среды по умолчанию могут измениться вместе с целевым образом.
Замена фиксируется только после того, как её Gateway ответит на /healthz через loopback-порт ячейки согласно тому же контракту проверки работоспособности, который используется в официальном файле Compose. Если новый контейнер завершается, циклически аварийно перезапускается или не становится работоспособным примерно в течение минуты, он удаляется, а предыдущий контейнер восстанавливается, поэтому неисправный образ не выведет из строя работающую ячейку.
Токен Gateway намеренно не сохраняется в реестре Fleet. Перед удалением старого контейнера Fleet считывает его среду и переносит OPENCLAW_GATEWAY_TOKEN в новый контейнер. Не удаляйте старый контейнер вручную перед обновлением, если токен больше нигде не хранится под вашим контролем.
fleet backup и fleet restore
Создайте резервную копию одной остановленной ячейки:
0600 и должны храниться как учётные данные. Резервное копирование не допускается для работающей ячейки, чтобы состояние SQLite было сохранено согласованно. Восстановление не допускается для работающей ячейки, если не указан --force; оно заменяет состояние только этого арендатора, обновляет токен Gateway и выводит новый токен один раз. Fleet создаёт резервную копию только одного арендатора за раз; резервное копирование всех арендаторов выполняется отдельным действием оператора.
Для восстановления требуется существующий остановленный контейнер, поскольку его проверенный профиль среды выполнения предоставляет ограничения, сопоставление пользователя, происхождение среды и образ для нового контейнера. Если зарегистрированный контейнер был удалён вне Fleet, сначала выполните fleet rm <tenant> --force без --purge-data, заново создайте ячейку с нужным образом и --no-start, а затем повторите восстановление. При первом удалении оба каталога данных арендатора сохраняются.
Обе команды принимают --max-bytes <bytes> для ограничения объёма архивируемых или извлекаемых файловых данных и применяют одинаковый фиксированный лимит в один миллион сегментов путей архива, чтобы архивные бомбы, состоящие только из метаданных, не могли исчерпать индексные дескрипторы хоста, а каждую принятую резервную копию можно было восстановить. Команда резервного копирования принимает --out <path>, а обе команды поддерживают --json.
Архивы содержат только обычные файлы и каталоги. При резервном копировании символические и жёсткие ссылки, сокеты и узлы устройств никогда не обходятся и не сохраняются; количество пропущенных объектов указывается в результате. При восстановлении архивы с объектами любого другого типа отклоняются. Воспроизводимые деревья символических ссылок, например node_modules рабочей области, после восстановления необходимо переустановить внутри ячейки.
fleet doctor
Проведите аудит всех ячеек или одного арендатора без изменения состояния среды выполнения или файловой системы:
fleet rm
Удалите остановленную ячейку из среды выполнения и реестра, сохранив данные арендатора:
--force:
--purge-data требует --force. Перед рекурсивным удалением Fleet разрешает оба корневых пути, принадлежащих Fleet, и оба каталога отдельного арендатора. Каждый целевой путь должен точно соответствовать ожидаемому конечному каталогу арендатора, находиться строго внутри своего корня и не быть символической ссылкой. Эти проверки вложенности не позволяют повреждённому пути реестра или межарендаторской символической ссылке перенаправить удаление в другое место.
Очистку можно повторить, если точно ожидаемый каталог арендатора уже отсутствует. Это позволяет последующему вызову завершить очистку после частичного сбоя файловой системы, не ослабляя проверки путей для всё ещё существующих каталогов.
Структура хранилища и контейнеров
Для состояния ячеек и ключей шифрования профилей аутентификации используются отдельные пути каждого арендатора на хосте в активном каталоге состояния OpenClaw:/home/node/.openclaw. Второй подключается в /home/node/.config/openclaw, как и том с ключом шифрования в официальной конфигурации Docker. Поэтому ключ шифрования не раскрывается в обычном подключённом каталоге состояния и не включается в резервную копию или общий доступ, если используется только каталог состояния ячейки. Оба каталога сохраняются при обычном удалении и обновлении; fleet rm --purge-data --force удаляет оба после отдельных проверок вложенности.
Перед первым запуском Fleet инициализирует конфигурацию ячейки с gateway.mode=local, аутентификацией по токену, привязкой контейнера к LAN и источниками Control UI для выделенного порта хоста. Значение токена не записывается в эту конфигурацию и остаётся в среде контейнера.
Fleet закрепляет пути контейнера официального образа следующими значениями среды:
По умолчанию официальный образ использует непривилегированного пользователя
node с UID 1000. Fleet сохраняет возможность записи в приватные подключаемые каталоги 0700, не делая их общедоступными. В Docker с правами root ячейка запускается с UID и GID вызвавшего её непривилегированного пользователя; Docker без прав root использует UID 0 контейнера, который в пространстве имён пользователей демона сопоставляется с вызвавшим процесс непривилегированным пользователем хоста. Podman использует keep-id с UID и GID вызывающего пользователя. Если сама Fleet запускается с правами root в среде выполнения с правами root, она сохраняет пользователя образа и назначает начальные файлы подключаемых каталогов UID/GID 1000.
На хостах с SELinux подключаемые каталоги Docker и Podman получают приватную перемаркировку :Z. При восстановлении или перемещении данных ячейки сохраняйте возможность записи в подключённые пути для фактического пользователя контейнера. Профиль рассчитан на работу без прав root, но Docker или Podman уже должны быть настроены на такую работу на хосте; Fleet не преобразует демон с правами root в демон без прав root.
Профиль безопасности
Fleet применяет следующий профиль к каждой ячейке:
Fleet никогда не подключает
/var/run/docker.sock, не использует --privileged или сеть хоста и не добавляет возможности. Мостовая сеть отдельной ячейки служит границей разделения ячеек, а не межсетевым экраном для исходящего трафика: ячейки сохраняют сетевой доступ, необходимый для провайдеров и каналов. Разместите перед loopback-портом прокси, туннель SSH или конфигурацию tailnet, соответствующую вашей среде развёртывания. http://127.0.0.1:<port> доступен напрямую только с хоста Fleet.
Этот профиль разделяет контейнеры арендаторов, но не защищает арендаторов от оператора Fleet, администратора среды выполнения контейнеров или скомпрометированного хоста. Полная модель доверия и варианты более строгой изоляции описаны в разделе Мультитенантный хостинг.
Обработка токенов
По умолчаниюfleet create создаёт криптографически случайный 32-символьный шестнадцатеричный токен Gateway и один раз выводит его в результате создания. Сохраните его в одобренном диспетчере секретов и не допускайте записи результата создания в журналы.
--gateway-token помещает пользовательский токен в аргументы локального процесса, которые могут сохраняться в истории оболочки или быть видны в списках процессов. Используйте созданный токен, если только существующий процесс управления секретами не требует предоставленного значения.
Токен и каждое значение, переданное с --env, находятся в среде контейнера. Fleet записывает их в кратковременный файл среды с режимом 0600, передаёт Docker или Podman только путь к этому файлу и удаляет его после завершения команды среды выполнения. Значения, явно введённые в openclaw fleet create --gateway-token ... или --env KEY=VALUE, всё равно могут быть видны в аргументах внешнего процесса openclaw и истории оболочки.
Значения переменных окружения контейнера не скрыты от доверенного оператора хоста: администраторы Docker или Podman могут прочитать их с помощью средств инспектирования контейнера. Примечание Fleet «показывается один раз» описывает обычный вывод CLI, а не защиту от администратора хоста.