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

2026-04-16 Обновление и откат шлюза OpenClaw на арендованном безголовом облачном Mac

Команда инженеров MacXCode 16 апреля 2026 ~15 мин чтения

Когда арендованный Apple Silicon Mac говорит только по SSH, обновление OpenClaw — чистая эксплуатация: нет кликов в Finder, нет «просто перезапусти приложение». Этот плейбук от 2026-04-16 покрывает заморозку ingress, порядок сначала стоп, потом npm, бэкапы с контрольной суммой ~/.openclaw, закрепление версии (не слепой @latest), проверку openclaw doctor, иногда нужный двойной перезапуск шлюза после глобальной установки и tarball-откат быстрее 3 минут, если сборка пошла наперекосяк. Перекрёстные ссылки: переменные окружения и секреты (2026-04-15), пробы здоровья, nginx ingress — чтобы стек был согласован в HK / JP / KR / SG / US.

Риски именно безголовых шлюзов

  • Горячий глобальный npm — замена файлов, пока Node держит дескрипторы, даёт частичные установки и «призрачные» версии.
  • Пересечение launchd — пользовательский LaunchAgent может перезапустить шлюз посреди апгрейда, если не сделать unload заранее.
  • Дрейф конфигурации — в новых минорах переименовывают ключи; держите экспорт openclaw.json без секретов в Git.
  • Шторм webhook — открыть nginx без readiness заставляет партнёров агрессивно ретраить; используйте пробы из статьи о здоровье.

Сначала заморозить публичный трафик

На хостах с nginx reverse proxy переведите upstream в обслуживание или отдавайте 503 с Retry-After: 90 на время работ. Внутренние канарейки на 127.0.0.1:18789 должны оставаться доступными для проверки до открытия мира.

Матрица бэкапа: что tar до npm

Путь / артефакт Включать? Заметки
~/.openclaw (или $OPENCLAW_STATE_DIR) Всегда Сначала остановить шлюз; проверить gzip через shasum -a 256
Дерево глобального npm prefix Опционально Сохранить вывод npm prefix -g и npm ls -g --depth=0 для diff
plist launchd Всегда Скопировать из ~/Library/LaunchAgents в ту же папку архива

TS=$(date +%Y%m%d-%H%M) tar -czf "/Volumes/backups/openclaw-state-$TS.tgz" -C "$HOME" .openclaw shasum -a 256 "/Volumes/backups/openclaw-state-$TS.tgz" > "/Volumes/backups/openclaw-state-$TS.tgz.sha256"

Установка и pin: semver как миграции БД

Прод-шлюзы должны отслеживать явный semver, напр. 1.24.3, в инфра-репозитории. CI может двигаться чуть быстрее, но Mac, который смотрит на партнёров в Сингапуре, не должен в 02:00 удивлять ломающим плагинным API. После остановки сервисов:

npm install -g openclaw@1.24.3

Предупреждение о рассинхроне: в некоторых сценариях обновляют только CLI без перезапуска шлюза — запустите openclaw gateway status и сравните с openclaw --version; несовпадение означает переходное состояние.

Проверка, перезапуск, когда нужен второй bounce

Запустите openclaw doctor и отправьте stdout в шиппер логов. Старт через launchctl bootstrap/kickstart по plist. Если в логах старые пути модулей или странные стеки require, сделайте ещё один чистый цикл стоп/старт — задокументируйте, чтобы дежурный не принял это за флаппинг. Перед снятием обслуживания nginx снова прогоните синтетические проверки из проб здоровья.

Бюджет времени: 90 секунд простоя на малый semver и 8–12 минут на скачки с пересборкой нативных зависимостей — укажите оба значения на странице статуса.

Откат: восстановить состояние, а не надеяться

  1. Снова остановить шлюз и upstream nginx.
  2. При необходимости удалить сломанную глобальную установку: npm rm -g openclaw, затем переустановить прежний semver.
  3. Распаковать tarball: tar -xzf openclaw-state-....tgz -C "$HOME" (проверить владельца).
  4. Восстановить plist, если менялся; при необходимости launchctl bootout/bootstrap.
  5. Проверить doctor и внутренний curl; только потом отдавать 200 на публичном ingress.

Апгрейды трогают те же файлы, что ротация секретов — согласуйте с гайдом launchd, чтобы .env и ключи plist совпадали. Для blue/green со вторым пользователем шлюза разделите OPENCLAW_STATE_DIR, как в той статье. После серии сбоёв добавьте witness-узел из ценообразования, а не бесконечно патчите одну уставшую машину.

FAQ: обновления шлюза на облачных Mac

Вопрос Ответ
pnpm вместо npm? Поддерживается — та же дисциплина стоп/бэкап/pin/старт; путь store в runbook.
Автоматизация каждую неделю? Только с canary, автоматическим doctor и воротами проб; без людей на пейджере прод не трогать.
Куда логировать инциденты? Существующий мост; корреляция с полями структурированного логирования.

Итог: относитесь к апгрейдам OpenClaw как к failover БД — заморозить трафик, сделать бэкап состояния, закрепить версии, проверить дважды и репетировать откат в каждом регионе, пока это не станет рефлексом.

OpenClaw на выделенных шлюзах M4

Сначала SSH · HK · JP · KR · SG · US