ИИ / Автоматизация 30 апреля 2026

2026: изоляция OpenClaw dev, staging и prod на одном арендованном Mac mini (LaunchAgent, порты, секреты)

Инженерная команда ProxyMac 30 апреля 2026 ~14 мин чтения

Команды разворачивают автоматизацию OpenClaw на арендованных хостах Mac mini M4 в Гонконге, Японии, Корее, Сингапуре и США, чтобы сохранить тот же macOS, что на ноутбуках—but промпт staging, переписывающий прод-скиллы MCP, быстрее всего разрушает доверие. Здесь (1) зачем даже одному mini нужны три жёсткие стены, (2) матрица blast-radius, (3) контракт папок и портов, удобный для grep, (4) повторяемый паттерн LaunchAgent под launchd, (5) как делить секреты и JSONL без дублирования GPU, (6) preflight перед merge. Ссылки: параллельные агенты, секреты и связка ключей, JSONL-диагностика.

Почему три среды на одном Apple Silicon mini лучше «одной папки YOLO»

Финансы видят среды как строки счёта; платформа — как области отказа. Один LaunchAgent с доступом и к Slack-webhook, и к Terraform prod — в одном merge от катастрофы. Делить dev / staging / prod на одной машине дёшево: запас CPU на M4 большой—дорого обходится беспечный общий доступ к файлам. Изоляция даёт независимые откаты, реалистичные soak-тесты без клиентских webhook и аудит, отделяющий «Сара пробует skill» от «сработал биллинг-бот».

По мере роста команды держите RACI рядом с таблицей—права не должны выводиться из имён папок. Нарушение строки: заморозить деплой и откатиться по playbook апгрейда прежде чем отлаживать код.

  • Числовой порог: минимум 20 ГБ свободного APFS на корень среды, чтобы JSONL-пики при нагрузочных тестах не стопорили других агентов.
  • Человеческий порог: не используйте один канал Slack для staging-алертов и прод-инцидентов—шум учит игнорировать оба.
  • Порог автоматизации: держите staging-maxConcurrentTasks на половине prod, пока квоты API не стабилизируются неделю.

Матрица blast-radius: что каждая среда может трогать

СредаРазрешённые побочные эффектыЗапрещено без тикетаТипичный охват API-ключа
DevЛокальные ветки git, песочные SaaS-проектыЭкспорт PII клиентовЗеркала только чтение или короткоживущие PAT
StagingПолный граф скиллов на клонированных данныхИзменения DNS prodОтдельный Stripe testmode + непрод AWS-роль
ProdКлиентские workflow, биллинг-webhookЭкспериментальные компиляторыРоли least-privilege с квартальной ротацией

Вышлите матрицу рядом с архитектурной диаграммой, чтобы новички не выводили IAM из названий каталогов.

Контракт папок и портов из мышечной памяти

Создайте три соседних каталога вроде ~/openclaw-dev, ~/openclaw-staging, ~/openclaw-prod—staging не вкладывайте в prod. Внутри зеркалируйте config, skills, logs, tmp, чтобы саппорт-скрипты совпадали. Привязывайте шлюзы к 127.0.0.1 на разнесённых портах: пример dev 18789, staging 18799, prod 18809—промежутки впитывают временные порты при парном дебаге.

Зафиксируйте в wiki пять колонок: имя среды, абсолютный путь, TCP-порт, label LaunchAgent, Unix-владелец. Ответ «какой plist завис?» — один grep.

Паттерн LaunchAgent: один plist на среду, не один гигантский plist

Три файла вроде com.yourorg.openclaw.dev.plist, ...staging.plist, ...prod.plist. В каждом задайте WorkingDirectory, EnvironmentVariables для нестандартного PATH, StandardOutPath/StandardErrorPath в дерево logs этой среды. На старте держите ThrottleInterval 10 секунд, чтобы циклы падений не долбили провайдеров.

Скелет (укоротите пути установки):

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"><dict> <key>Label</key><string>com.example.openclaw.staging</string> <key>WorkingDirectory</key><string>/Users/automation/openclaw-staging</string> <key>ProgramArguments</key><array> <string>/opt/homebrew/bin/openclaw</string> <string>gateway</string> <string>--port</string><string>18799</string> </array> <key>RunAtLoad</key><true/> <key>KeepAlive</key><true/> </dict></plist>

Только loopback: слушатели на 127.0.0.1, удалённый доступ через SSH port-forward или проверенный edge-proxy — не светите сырые порты шлюза в интернет.

Секреты, логи и ротация без перекрёстного загрязнения

Ключи API — в отдельных записях связки или файлах .env с правами 0400, по одному на среду. Когда ротируете prod-ключи, staging не должен читать тот же путь «временно» — этот shortcut становится постоянным. В JSONL префиксуйте события env=staging и разводите имена файлов, чтобы ротация не отрезала историю prod из‑за шума dev.

Health на http://127.0.0.1:<port>/healthz по шаблонам из health probe. Пороги разные: dev может мигать ~5 % во время экспериментов; prod пейджит после двух подряд провалов.

Параллелизм: три шлюза утраивают риск штормов HTTP 429 без шардирования токенов — перечитайте failover и лимиты до агрессивных cron во всех средах сразу.

Preflight перед промоушеном скиллов в prod

  1. Diff конфигов: staging-openclaw.json совпадает с prod кроме явно перечисленных ключей.
  2. Сухой replay: последние 50 прод-подобных событий через staging с анонимизированными полезными нагрузками.
  3. Порты: lsof -nP -iTCP -sTCP:LISTEN показывает только задуманные loopback-слушатели.
  4. Диск: df -h — минимум 20 ГБ на томе APFS с prod-логами.
  5. MCP-серверы: манифест инструментов указывает на разные рабочие каталоги.
  6. Репетиция rollback: launchctl unload/load для prod-plist в окне обслуживания.
  7. Подпись: инициалы ревьюера в тикете — автоматизация заслуживает ту же дисциплину, что и приложение.

FAQ

Prod под root? Нет — выделенные сервисные учётки с ACL файлов всегда лучше; root усложняет TCC и аудит.

Один Node runtime? Версии могут совпадать, но NODE_OPTIONS и глобальные npm-префиксы — по средам, иначе те же ловушки PATH, что в статье про Homebrew.

GitOps? Зеркалить ветки (main, staging, dev) и по возможности read-only клоны — см. версионирование конфигов.

Почему аренда Mac mini ProxyMac всё ещё подходит мульти-средовому OpenClaw

После изоляции одна Mac mini M4 даёт unified memory для параллельных шлюзов, нативное macOS как на ноутбуках и прогнозируемые платежи в HK / JP / KR / SG / US без скачков CapEx. Это важно, когда staging собирает Swift-пакеты, а prod отвечает на webhook. Сравните уровни на странице цен, читайте справочный центр про удалённый доступ и держите VNC, если launchctl молчит в текстовых логах.

Изолируйте агентов, потом масштабируйте параллелизм

OpenClaw на Apple Silicon M4 · HK / JP / KR / SG / US