2026 OpenClaw на арендованной Mac Mini: несколько OPENCLAW_HOME, изоляция портов шлюза и единый дайджест опроса CI

Время чтения: 9 минут

Команды, которые держат OpenClaw на одной арендованной Mac Mini, упираются в предел одного шлюза: ночные навыки, канареечные модели и продакшен-вебхуки конфликтуют, если все процессы делят один каталог состояния и один порт прослушивания по умолчанию.

Официальная логика мульти-инстанса опирается на три рычага: разные деревья OPENCLAW_HOME, разведение шлюзов через OPENCLAW_GATEWAY_PORT или --port, и явный PATH в launchd, совпадающий с интерактивным SSH. Ниже — план каталогов, второй onboard, агенты launchctl, пробы и слияние шумного опроса CI в один webhook. См. установку, обновление шлюза, ночной workflow_dispatch, хаб OpenClaw.

Три типовых боли при «клонировании» конфигов без изоляции домов

  1. Гонки состояния. Два шлюза под одним OPENCLAW_HOME конкурируют за SQLite и файлы блокировок; симптомы зависят от порядка старта и выглядят как флаки.
  2. Коллизия портов. Второй процесс на дефолтном порту даёт EADDRINUSE, а KeepAlive у launchd превращает это в цикл рестартов и лишнюю нагрузку на тихий хост.
  3. Расхождение PATH. В SSH openclaw находится в префиксе npm, а у агента минимальный PATH: интерактивный onboard проходит, а под supervisord шлюз не поднимается и пишет только «command not found».

Матрица: когда дробить OPENCLAW_HOME

Прежде чем заказывать вторую машину, оцените один узел Apple Silicon: изоляция каталогами и портами дешевле дубля железа на RunMini. Паттерн жёсткий: не делите один дом между двумя долгоживущими шлюзами; занесите владельца порта в внутренний каталог, чтобы сетевые проверки оставались рутиной.

Потребность Один OPENCLAW_HOME Два дома и два порта
Только прод, один шлюз Минимум plist и записей в карте портов Избыточно без регулярных репетиций миграций
Staging-навыки или канареечные модели ночью Высокий риск затереть токены и кэши Рекомендуется: зеркальная структура, разные секреты на дерево
CI шлёт десятки мелких событий в час Даже при здоровых шлюзах растёт усталость от алертов Два шлюза при необходимости, но опрос CI — в один дайджест webhook

Воспроизводимые шаги: каталог → второй экземпляр → наблюдение

  1. План каталогов. Создайте ~/openclaw/prod и ~/openclaw/staging; зафиксируйте владельца, бэкап и квоту APFS.
  2. Снимок прода. Запишите OPENCLAW_HOME, OPENCLAW_GATEWAY_PORT и вывод openclaw doctor до изменений.
  3. Второй onboard. export OPENCLAW_HOME=~/openclaw/staging, затем openclaw onboard; задайте OPENCLAW_GATEWAY_PORT=18790 или openclaw gateway --port 18790, чтобы CLI и окружение совпадали.
  4. Дымовой тест. lsof -nP -iTCP -sTCP:LISTEN по обоим портам; затем перенос в launchd, чтобы обрыв SSH не убивал шлюзы.
  5. Пробы. Синтетика на каждый порт плюс правила по логам TLS и ротации токенов; держите порог серьёзности явным в runbook.
  6. Дайджест CI. Опрос GitHub Actions или GitLab по расписанию; накапливайте провалы в JSON и шлите один POST на окно вместо потока мелких вебхуков. Секреты для REST — узко, см. repository_dispatch.

launchd и launchctl: два Label, PATH, устойчивость

Скопируйте рабочий plist продакшена с новым Label. В EnvironmentVariables пропишите OPENCLAW_HOME, OPENCLAW_GATEWAY_PORT и PATH с каталогом из npm bin -g. Включите RunAtLoad; для штормовых рестартов добавьте ThrottleInterval. Разведите StandardOutPath по экземплярам. После правок: launchctl bootout, затем bootstrap; проверяйте эффективное окружение через launchctl print для домена пользователя. На Linux-аренде аналог — unit-файлы systemd с теми же переменными и абсолютным путём к бинарнику.

<key>Label</key><string>com.example.openclaw.staging</string>
<key>EnvironmentVariables</key>
<dict>
  <key>OPENCLAW_HOME</key><string>/Users/you/openclaw/staging</string>
  <key>OPENCLAW_GATEWAY_PORT</key><string>18790</string>
  <key>PATH</key><string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
</dict>
<key>ProgramArguments</key>
<array>
  <string>/opt/homebrew/bin/openclaw</string>
  <string>gateway</string>
  <string>--port</string>
  <string>18790</string>
</array>

Пробы здоровья и объединение сводок опроса CI

Держите одну синтетическую проверку на порт и отдельный слой правил по журналам для TLS и обновления токенов. Буферизуйте события CI в файл состояния на диске; эмитируйте один webhook, когда за окно агрегированная серьёзность пересекает порог, чтобы оператор видел контекст репозитория и координаты матрицы, а не шум отдельных job.

  • Поля дайджеста: репозиторий, ветка, координаты падающей матрицы, короткий хэш лога.
  • Сначала стреляйте в staging-URL шлюза; переносите в прод после снижения ложных срабатываний.
  • Ограничьте размер тела дайджеста и частоту POST backoff-ом при 429 и 5xx, как в ночных цепочках dispatch.

Разбор: конфликт портов и расхождение PATH

EADDRINUSE: выполните lsof, проверьте дубликаты plist с тем же Label или портом, а также «забытые» сессии tmux с ручным шлюзом. Нет бинарника: сравните printenv PATH в SSH с выводом launchctl print для вашего агента и добавьте глобальный bin npm в plist; при нескольких версиях Node зафиксируйте абсолютный путь к openclaw.

Короткий FAQ

Нужны ли два глобальных npm install @openclaw/cli?
Обычно нет: один бинарник и два plist с разными переменными достаточно, если путь в ProgramArguments абсолютный.
Какие порты на общем хосте?
Высокие, например 18789 и 18790; документируйте владельца; не публикуйте на WAN без TLS и политики доступа.

Опорные цифры: два высоких порта; интервал опроса CI пять–пятнадцать минут; ThrottleInterval не ниже тридцати секунд при агрессивном KeepAlive; дайджест до пятидесяти килобайт.

Итог. Разведите OPENCLAW_HOME, зафиксируйте порты через OPENCLAW_GATEWAY_PORT или --port, выровняйте PATH в plist, проверьте слушатели и сведите опрос CI к одному webhook на окно.

Mac Mini под два шлюза OpenClaw

Нужен запас Apple Silicon для прод и staging без второго стола железа? Откройте тарифы, затем оформление арендывход не обязателен на старте, где это доступно. Вопросы по SSH и квотам — центр помощи; runbook по launchd и CI — блог.

Когда оба шлюза держатся зелёными ночью, зафиксируйте runbook в git. Страница оформления остаётся без обязательного входа до привязки оплаты к аккаунту.

Mac Mini для двух экземпляров OpenClaw