Шлюз OpenClaw: npm ci, package-lock.json, воспроизводимые установки и дисциплина чистой пересборки на арендованном облачном Mac (2026-05-09)
В 2026 году потоки инцидентов снова показывают один и тот же сбой: запускают npm install -g openclaw@latest, пока шлюз держит файловые дескрипторы — в итоге наполовину переименованные деревья, не хватает runtime-зависимостей плагинов и циклы перезапуска, которые голодом держат опрос Telegram. Арендаторы MacLogin, доставляющие автоматизацию из Гонконга, Японии, Кореи, Сингапура и США, должны относиться к шлюзу как к любому другому прод-бинарнику: коммитить lockfile, вести установки семантикой npm ci, сначала останавливать launchd и отрабатывать смягчение «двойной перезапуск», когда кэш разрешения модулей врёт. Этот рунбук на май 2026 кодирует матрицу, порядок остановки, девять шагов CI, проверки наблюдаемости и FAQ, чтобы OpenClaw оставался предсказуемым на арендованных мини Apple Silicon.
Вместе с дрейфом peer-зависимостей и чистой пересборкой, диагностикой doctor и приложением macOS и передачей CLI. Хаб: тематический индекс OpenClaw. Также справка, цены и VNC.
Почему lockfile важен, даже если OpenClaw кажется «просто CLI»
Шлюзы тащат транзитивные зависимости для транспортов, плагинов и адаптеров моделей. Без закреплённого графа две машины с одинаковыми semver-диапазонами могут тихо разойтись после публикации в реестре — именно это должна устранять воспроизводимая CI.
package-lock.json вручную во время инцидентов; пересобирайте контролируемыми обновлениями и code review.npm ci против npm install (матрица решений)
| Команда | Когда на шлюзах | Риск если пропустить |
|---|---|---|
npm ci | CI-образы, чистые workspace, rebuild-пайплайны | Детерминированные установки; быстрый отказ при расхождении lock/package |
npm install | Разведывательные обновления, намеренно меняющие lockfile | Дрейф между узлами JP и US без повторного коммита |
npm install --package-lock-only | PR, обновляющий locks без выполнения скриптов | Всё равно нужен обзор транзитивных bump’ов |
Закрепить Node.js и npm вместе с версией шлюза
Записывайте тройки (node -v, npm -v, openclaw --version) в CMDB. Используйте Volta, asdf или закрепления MacPorts в соответствии с руководством по предварительным требованиям Node, чтобы CI и арендованные мини использовали одинаковые движки.
NODE_OPTIONS и пути плагинов через шаблоны переменных LaunchAgent, чтобы перезапуски наследовали закреплённую цепочку инструментов.Порядок остановки launchd до мутаций глобальных путей npm
launchctl bootout gui/$UID/ai.openclaw.gateway(подстройте метку под свой plist).- Убедитесь, что не осталось дочерних
nodeчерезpgrep -fl openclaw. - Только затем выполняйте мутации npm.
Последовательность чистой пересборки, когда doctor сообщает о частичных деревьях
Следуйте духу статьи о peer-дрейфе: удалите node_modules, переустановите с npm ci, снова запустите openclaw doctor и сохраните stdout для саппорт-бандлов. Для глобальных установок повторите обходное решение сообщества: удалите сломанный префикс перед чистой переустановкой.
Рунбук CI из девяти шагов для обновлений шлюза
- Снимок текущего plist, контрольной суммы и JSON здоровья.
- Ветка обновлений lockfile в Git с семантическими тегами версий.
- Сборка эфемерного CI-runner macOS с
npm ci. - Тест doctor, синтетический webhook и пинг модели.
- Стейджинг артефакта в объектное хранилище с неизменяемой версией.
- Остановка прод-шлюза по политике launchd.
- Установка из застейдженного артефакта (не из плавающего latest).
- Дважды загрузить при флапе здоровья (смягчение двойным перезапуском).
- Опубликовать примечания к релизу + путь к tarball отката.
Смягчение двойным перезапуском при устаревшем разрешении модулей
Когда health проходит, а runtime всё ещё ссылается на старые хэши, запланируйте немедленный второй launchctl kickstart -k после короткой паузы. Задокументируйте симптом, чтобы его не спутали с TLS или прокси.
Перекрёстная ссылка: статья о peer-дрейфе и эта про lockfile
Гид по peer-дрейфу про взрывающиеся графы зависимостей. Эта статья про их фиксацию. Используйте обе: фиксируйте ежедневные сборки; статью о дрейфе — при аварийных пересборках после конфликтующих peer-публикаций upstream.
Кэширование артефактов для мультирегиональных раскаток шлюза
Когда арендаторы Гонконга и западного побережья США обновляются в один час, двойная загрузка одинаковых tarball из публичного реестра провоцирует лимиты и джиттер. Продвигайте неизменяемые артефакты в собственное S3-совместимое ведро (Artifactory, активы GitHub Release) и пусть каждый лизинг тянет по URL с адресацией по содержимому. SHA256 в тикете изменений вместе с git-SHA package-lock.json, чтобы аудиторы доказали, что узлы JP и SG выполнили те же байты.
| Регион | Предлагаемый кэш | Запасной вариант |
|---|---|---|
| HK / SG | Реплика ведра APAC | Ограничить параллелизм до 2 installs/мин |
| JP / KR | Крайний кэш рядом с Токио | Предпочитать ночные окна |
| US | US-east основной + зеркало запада | npm ci --prefer-offline при кэшированном tarball |
npm ci — события цепочки поставок 2026 делают дисциплину контрольных сумм обязательной.FAQ
Можно ли по-прежнему использовать install.sh? Считайте curl-скрипты только начальной загрузкой — переходите на закоммиченные locks для всего повторяющегося.
А изолированные установки? Tarball с выводом npm pack и проверка SHA256 перед npm ci --offline.
Где арендовать изолированные шлюзы? Сравните цены для пулов JP и US, чтобы изолировать шумные обновления.
Стоит ли Dependabot автоматически мержить bump’ы OpenClaw? Только при CI с doctor, эхом webhook и графом плагинов — иначе выигрывает еженедельный человеческий обзор.
Хаб OpenClaw, справка и региональная мощность
Опубликуйте политику lockfile во внутреннем разделе хаба OpenClaw, чтобы каждый регион унаследовал один и тот же чеклист порядка остановки. Когда в Сеуле нужны другие наборы плагинов, чем в Сингапуре, разделяйте лизинги, а не один lock-граф.
Запускайте OpenClaw на выделенном Apple Silicon
Узлы HK · JP · KR · SG · US для воспроизводимых шлюзов.