2026 OpenClaw на арендованной Mac Mini: несколько OPENCLAW_HOME, изоляция портов шлюза и единый дайджест опроса CI
Команды, которые держат OpenClaw на одной арендованной Mac Mini, упираются в предел одного шлюза: ночные навыки, канареечные модели и продакшен-вебхуки конфликтуют, если все процессы делят один каталог состояния и один порт прослушивания по умолчанию.
Официальная логика мульти-инстанса опирается на три рычага: разные деревья OPENCLAW_HOME, разведение шлюзов через OPENCLAW_GATEWAY_PORT или --port, и явный PATH в launchd, совпадающий с интерактивным SSH. Ниже — план каталогов, второй onboard, агенты launchctl, пробы и слияние шумного опроса CI в один webhook. См. установку, обновление шлюза, ночной workflow_dispatch, хаб OpenClaw.
Три типовых боли при «клонировании» конфигов без изоляции домов
- Гонки состояния. Два шлюза под одним
OPENCLAW_HOMEконкурируют за SQLite и файлы блокировок; симптомы зависят от порядка старта и выглядят как флаки. - Коллизия портов. Второй процесс на дефолтном порту даёт
EADDRINUSE, аKeepAliveу launchd превращает это в цикл рестартов и лишнюю нагрузку на тихий хост. - Расхождение PATH. В SSH
openclawнаходится в префиксе npm, а у агента минимальный PATH: интерактивный onboard проходит, а под supervisord шлюз не поднимается и пишет только «command not found».
Матрица: когда дробить OPENCLAW_HOME
Прежде чем заказывать вторую машину, оцените один узел Apple Silicon: изоляция каталогами и портами дешевле дубля железа на RunMini. Паттерн жёсткий: не делите один дом между двумя долгоживущими шлюзами; занесите владельца порта в внутренний каталог, чтобы сетевые проверки оставались рутиной.
| Потребность | Один OPENCLAW_HOME | Два дома и два порта |
|---|---|---|
| Только прод, один шлюз | Минимум plist и записей в карте портов | Избыточно без регулярных репетиций миграций |
| Staging-навыки или канареечные модели ночью | Высокий риск затереть токены и кэши | Рекомендуется: зеркальная структура, разные секреты на дерево |
| CI шлёт десятки мелких событий в час | Даже при здоровых шлюзах растёт усталость от алертов | Два шлюза при необходимости, но опрос CI — в один дайджест webhook |
Воспроизводимые шаги: каталог → второй экземпляр → наблюдение
- План каталогов. Создайте
~/openclaw/prodи~/openclaw/staging; зафиксируйте владельца, бэкап и квоту APFS. - Снимок прода. Запишите
OPENCLAW_HOME,OPENCLAW_GATEWAY_PORTи выводopenclaw doctorдо изменений. - Второй onboard.
export OPENCLAW_HOME=~/openclaw/staging, затемopenclaw onboard; задайтеOPENCLAW_GATEWAY_PORT=18790илиopenclaw gateway --port 18790, чтобы CLI и окружение совпадали. - Дымовой тест.
lsof -nP -iTCP -sTCP:LISTENпо обоим портам; затем перенос в launchd, чтобы обрыв SSH не убивал шлюзы. - Пробы. Синтетика на каждый порт плюс правила по логам TLS и ротации токенов; держите порог серьёзности явным в runbook.
- Дайджест 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. Страница оформления остаётся без обязательного входа до привязки оплаты к аккаунту.