OPENCLAW_2026
INSTALL_
NPM_DOCKER_
PNPM_MATRIX.

// Боль: npm, Compose и pnpm живут рядом без единого источника истины — CLI и шлюз читают разные пути. Вывод: трёхпутевая матрица, пять шагов, launchd на удалённом Mac. Ссылки: Docker в проде, onboard, systemd/launchd, установка на Mac, тарифы.

Серверные стойки

1. Разбор

(1) Расхождение путей — ложный «reload не сработал». (2) Node 22 — договор команды; расхождение minor CI/ноутбук ломает нативные аддоны. (3) Обновление без снимка тома даёт полумиграцию. (4) Наблюдаемость и права: смесь sudo-глобалов с пользовательским prefix или launchd-пользователь ≠ владелец state-каталогов даёт «процесс жив, а записать нельзя» — в runbook фиксируем пользователя, cwd, umask.

2. Матрица

Осьnpm globalDockerpnpm source
СкоростьБыстрый тестСреднеМедленно, аудит
ИзоляцияСлабаяСильнаяСредняя
ДанныеДокументировать homeТома обязательныот способа запуска
Обновлениеnpm i -gтег+pullgit+pnpm+build
Откатфикс версиитег+снимокgit tag

3. Пять шагов

  1. Заморозить рантайм: Node 22+ или LTS из README везде, явно описать неподдерживаемые диапазоны. Docker: имя compose-файла, ссылка на образ (тег vs digest), кто может поднимать базовые образы.
  2. Карта четырёх классов: конфиг, секреты, состояние сессий/скиллов, логи — в compose комментировать хостовые bind-пути, чтобы дежурный не гонялся только за путями внутри контейнера.
  3. Золотой путь: onboard → минимальный smoke каналов → foreground Gateway → launchd/демон; в runbook — ожидаемые строки логов и критерии «зелёно».
  4. SOP обновления: тикет → бэкап тома/каталога или снапшот СХД → апгрейд → doctor → channels probe; без бэкапа — стоп по чек-листу.
  5. SOP отката: пакет/образ и данные вместе; затем status/doctor из лестницы диагностики до объявления восстановления.
node -v which openclaw openclaw --version

4. Цифры

  • Две формы >14 дней без доки ≈ 2–4 ч/нед на «какой шлюз боевой».
  • В проде — хотя бы один восстанавливаемый снимок.
  • launchd WorkingDirectory = умолчание CLI.

5. Удалённый Mac

СигналДействие
Нужен 7×24, ноутбук спитVPS или Mac+launchd
Расхождение DNS/NTPОдна топология
Apple-стек в одном SLAУдалённый Apple Silicon

Дисциплина изменений: в тикете/CMDB свяжите «форма установки + ID тома + владелец дежурства». Без триады разбор превращается в «где-то что-то крутилось». На удалённом Mac разведите алерты bastion / демонстрации экрана / здоровья шлюза. Раз в квартал — учение «восстановление из снапшота + smoke каналов»; дешевле ночного аврала при реальном регрессе.

6. FAQ

Глобальный CLI к контейнерному Gateway — одна таблица URL, токенов, путей, иначе «CLI смотрит в A, демон в B». Rootless: UID и явный user в compose.

pnpm в CI: pnpm i --frozen-lockfile, тестовый Gateway изолировать от прод-томов. Тишина каналов после апгрейда: сначала doctor/pairing, не три переустановки — диагностика.

Healthcheck в compose? Да — минимальный liveness, restart с потолком backoff, иначе полузапущенный контейнер уйдёт в петлю рестартов. Для нагрузок с тяжёлыми I/O помните: SSD/NVMe и очередь диска влияют на стабильность логов и чекпоинтов состояния не хуже CPU.

7. Углубление

В 2026 чаще не хватает единого источника правды, а не функций. npm global даёт скорость, Docker покупает изоляцию ценой дисциплины томов, pnpm source — аудит ценой владения сборкой и цепочкой поставки.

Для Docker заведите ops-страницу: политика тегов (latest только для песочницы; прод — неизменяемый тег/digest), окна бэкапа по тихим часам каналов, имена compose-проектов для аудита правок. Для pnpm включите в ревью corepack, .npmrc, зеркала приватного registry — иначе ночные сборки «плывут» по дереву зависимостей.

Предсказуемый откат и воспроизводимая среда важнее гонки за последним минором: провал без снимка тома часто измеряется днями простоя — в SLA это дороже месячной аренды выделенного удалённого Mac. Радиус эксплуатации растёт, когда документирован один путь установки и одна топология сети host↔container (DNS/NTP), иначе каждый инцидент превращается в квест по двум мирам файловых путей.

Долгоживущий Gateway и плотные вызовы инструментов переносят на выделенный удалённый Mac; ноутбук остаётся лёгким CLI — меньше борьбы за унифицированную память с Xcode/Final Cut, меньше троттлинга при одновременном Metal/видеоконвейере и фоновом агенте. Это не отказ от Docker/npm, а разделение интерактивной и серверной машины. Типично: прод на фиксированной топологии (чистый launchd или один compose-стек), ноутбук для pairing/отладки скиллов — крышка закрыта, автоматизация жива.

Чек-лист перед продом: для npm global проверьте which -a openclaw и порядок PATH — дубли бинарей дают классический «отвечает не та версия». Для Compose согласуйте .env, хранилище секретов и права на тома; прод-токены не должны лежать в каталогах, которые синхронизируются на ноутбуки. Для pnpm source CI и прод-хост обязаны делить политику registry/store, иначе lockfile совпадает, а дерево зависимостей расходится. Для команд с тяжёлым Metal-конвейером полезно заранее заложить бюджет на аренду узла вместо ночных сессий из-за теплового троттлинга при параллельном рендере и Gateway.

Зафиксируйте сетевые политики отдельно для каждой топологии: исходящие webhooks, mTLS к внутренним API, split-horizon DNS. Контейнерный Gateway с другим резолвером, чем хост, может показывать «зелёные» healthcheck’и при джиттере внешних каналов — это не баг OpenClaw, а инфраструктурный долг, который живёт в том же runbook, что и карта томов.

Аудит и совместная работа: заведите RACI — кто меняет теги образов, кто повышает глобальный npm-пакет, кто мержит pnpm-lock. Без границ «пятничные хотфиксы» ломают понедельничный CI. Для томов с логами переписок пропишите сроки хранения и ответственных в соответствии с локальными требованиями к данным; технический откат не отменяет юридического удаления. Распределённым командам полезно дублировать эскалации по часовым поясам, чтобы инцидент Gateway не завис в одном мессенджер-канале, пока другая география офлайн.

Наконец, помните про планировщик ОС: на macOS launchd не эквивалентен произвольному cron внутри контейнера — разные таймеры, разные переменные окружения, разные лимиты файловых дескрипторов. Смешивая bare-metal launchd и контейнерный cron без документации, вы получаете гонки при ротации логов и двойные heartbeat’ы к одному и тому же каналу — ещё один источник «немых» инцидентов, который лечится единым расписанием, а не перезагрузками.

Для сравнения «стоит ли выносить Gateway» полезно смотреть на хвосты задержек (p95/p99) при одновременном рендере и работающем агенте на ноутбуке: тепловой троттлинг раздувает хвост сильнее, чем добавляет сотни мегагерц в спецификации. Выделенный арендованный Mac под постоянный Gateway часто сжимает распределение задержек заметнее, чем точечный апгрейд CPU. Добавьте на дашборд корреляцию задержек каналов с температурой SoC — график часто быстрее любой политической дискуссии о выборе npm против Docker. Учитывайте также долю повторных попыток и ошибок сети.

8. MACGPU

(1) Ограничения путей: глобал бодается с системным Node, правами, EDR/MDM; Docker требует гигиены томов/образов — дрейф DNS/NTP хост↔контейнер раздувает время расследования; source без lockfile/CI даёт «собралось, но Gateway шатается». Смешение без документации множит дрейф конфигов.

(2) Удалённый Mac: Apple Silicon, unified memory, нативный creative/automation-стек для 24/7; launchd вне GUI-сессии снижает джиттер каналов и модальные всплывашки, граница эксплуатации чище.

(3) MACGPU: низкий порог для проверки «один путь + launchd» на арендованном узле до крупного CAPEX — CTA ведёт к публичным планам без логина.