Монолитный конфиг на всех Mac — это один неверный diff и коррелированный отказ. На clustervps разумнее отдавать рантайму только артефакт слияния фрагментов по тенантам, а установку, оркестрацию и разбор держать на одной «рельсе»: каталоги, фиксация версий, единая health-проба с doctor, агрегированная рассылка ошибок webhook и предсказуемая ротация токенов.

Этот сценарий дополняет multi-AZ шлюзы и webhook-дайджесты; для доставки артефактов между узлами см. матрицу rsync и блокировок. Оглавление блога — список статей.

Соглашение о каталогах

Каркас путей должен совпадать на каждом узле. Редактируемые куски лежат в /usr/local/openclaw/tenants/<tenant>/fragments/*.yaml, результат merge — в /var/lib/openclaw/merged вместе с файлом SHA256, а /var/log/openclaw принимает JSONL со следами ретраев и отпечатками ошибок. Слияние всегда пишет во временный файл и завершает атомарным mv, чтобы launchd не увидел «обрезанный» YAML.

Установка: один тенант на песочнице, затем копирование скелета на остальные Mac.Оркестрация: выбор групп узлов по меткам, запрет прямого редактирования merged вручную.Разбор: сверка хеша, хвост логов; синтаксическая ошибка — немедленный отказ merge и блокировка reload до фикса.

Фиксация версий (versions.lock)

В корне репозитория держите versions.lock с digest бинарей OpenClaw, тегами sidecar и SHA скрипта merge — CI должен падать при расхождении. Продвижение релиза: канареечный Mac → openclaw doctor и составная проба → короткое наблюдение метрик → остальная сетка. Даже правка URL партнёра фиксируется коммитом, чтобы не ловить «устную» дрейфующую конфигурацию. Заранее сверьте ёмкость кластера с тарифами Mac, чтобы канарейка и notifier не упирались в диск.

Объединение health-проб и doctor

Наружу выставляйте только /healthz/composite: внутри последовательно проверяются диск, launchd, очередь, исходящий TLS к партнёру и сводка openclaw doctor. Ответ — один JSON с полями tenant, az, статусами подсистем; балансировщик не должен знать о десятке разрозненных curl. Шлюзы пишут подробности локально, а notifier за пятиминутное окно шлёт одну агрегированную запись по сбоям webhook; длительная деградация помечается как degraded, но сервис остаётся наблюдаемым.

#!/usr/bin/env bash
set -euo pipefail
/usr/bin/openclaw doctor --tenant "${TENANT}" --json >"/tmp/d.json"
/usr/bin/curl -fsS --max-time 4 "${WEBHOOK_PING_URL}" >/dev/null
/usr/bin/printf '{"tenant":"%s","doctor_ok":true,"webhook_ok":true,"queue_depth":0}\n' "${TENANT}"

Единые пути упрощают повторное использование SSH-скриптов; сверьтесь с публичной справкой по доступам и jump-хостам.

Ротация токенов и секретов

Разведите bearer для webhook и клиентские сертификаты mTLS. Во фрагментах YAML храните только пути к секретам, сами значения подставляйте из секрет-хранилища при merge — итоговый файл лишь ссылается на объект в Keychain/vault. Новый секрет сначала монтируется на канарейку; после двух успешных циклов внешнего трафика и прохождения notifier-дайджеста промотируйте тег на все узлы. Обновление делайте через короткоживущий файл и атомарный rename, держите перекрытие ~12 часов, фиксируйте отзыв старого ключа и тикет в аудите. Публичные интеграции планово крутите ежемесячно; при подозрении на утечку — немедленный обход всех тенантов и grep по merged на следы старого токена.

Пошаговый чек-лист

  1. Три Mac (два шлюза и отдельный notifier или рабочая станция): зафиксируйте роли A/B/N в runbook.
  2. Фрагменты → merge в merged/openclaw.yaml + .sha256; перед продом гоняйте openclaw validate.
  3. versions.lock в CI; первый узел — doctor и ping исходящего webhook.
  4. Составную пробу повесьте на один путь LB, временно отключите DNS и убедитесь, что JSON отражает tenant/AZ.
  5. Notifier: смоделируйте 4xx/5xx, проверьте одно сообщение за пятиминутное окно с tenant и correlation id.
  6. Shadow-токен на всех узлах, отзыв старого ключа и поиск по merged.
  7. Runbook для SSH jump и отката merge. Бюджет и закупка — страница покупки и главная без входа в консоль.

FAQ: коротко

Конфликт ключей во фрагментах — немедленный fail merge.doctor по таймауту переводит наружный статус в degraded, не скрывая детали в JSONL.Сводка webhook содержит счётчики и репрезентативный URL; полный след остаётся в логах для расследования.

Операционный гайд. Флаги реализации OpenClaw могут отличаться — перепроверьте на своей сборке. Цифры окон и таймаутов ориентировочные и не являются SLA.
Без входа в аккаунт

Согласуйте следующий шаг до открытия консоли

Тарифы, справочный центр, покупка и главная доступны публично — команда может выровнять архитектуру и бюджет без логина.

Открыть планы Mac К справке