← Вернуться к дневнику

Headless OpenClaw CI на cloud Mac Канада M4 2026: install-cli.sh, --no-onboard, launchd-зонды Mac mini hosting

OpenClaw · 2026.05.23 · ~10 мин

Headless OpenClaw CI на облачном Mac M4 в Канаде: install-cli.sh и launchd health checks

Когда платформенные команды переносят OpenClaw на удалённый Mac M4 в Канаде, типичная ошибка — копировать десктопный playbook: открыть Screen Sharing, запустить полный openclaw onboard, надеяться, что Gateway переживёт обрыв SSH. CI и batch-нагрузки требуют другого контракта — headless-путь установки через официальный install-cli.sh с --no-onboard, предзагруженную конфигурацию и health-probe launchd вместо мастера. Эта статья отвечает на один вопрос: как развернуть воспроизводимую headless OpenClaw CI на облачном Mac / Mac mini cloud build seat. Мы не пересматриваем SSH-туннель vs прямой Gateway (OpenClaw Canada M4: SSH gateway, token 18789 и launchd) и не разбираем интерактивный onboard playbook (Удалённый Mac: install, onboard и LaunchDaemon 24/7). Если на том же Mac mini hosting seat крутится GitHub Actions runner, разделите Unix-пользователей и launchd labels по self-hosted macOS runner на облачном Mac, чтобы версии Node и порт 18789 не конфликтовали.

Для headless CI зафиксируйте три идеи:

  • install-cli.sh --no-onboard пропускает мастер

    Config dir и tokens из runbook — идеально для Ansible или GHA workflows.

  • Probes должны покрывать launchd, 18789 и sharp

    Успешного curl мало; важны абсолютные пути plist и native modules.

  • Выделенные Canada M4 seats для 24/7

    24 GB unified memory и SSD 512 GB+; Gateway work и CI jobs — в разных очередях.

1. Когда нужен headless --no-onboard вместо интерактивного onboard

Интерактивный openclaw onboard хорош на Mac с реальной GUI-сессией, где оператор одобряет TCC (Accessibility, Automation, Screen Recording). Это правильный first-run на ноутбуке разработчика. Это неверный default, когда цель — CI lane на облачном Mac, доступная только по SSH или self-hosted runner, а конфигурация уже сгенерирована внутренними шаблонами. Продолжение вызывать мастер блокирует pipelines и создаёт «snowflake» hosts, не rebuildable из Git.

Headless-контракт выглядит так:

  • Pin Node LTS и global openclaw CLI semver через install-cli.sh.
  • Передать --no-onboard и синхронизировать config directory (часто ~/.openclaw, по upstream docs) из secrets management.
  • Запланировать одноразовое окно Screen Sharing только если agents всё ещё нуждаются в browser automation с TCC; далее — только launchd.

В отличие от заметки «стабильность удалённого Mac», эта статья даёт версионируемый CI runbook и probe scripts — не desktop operator manual. Если команда всё ещё вводит ответы в onboard на каждом новом seat, headless maturity ещё не достигнута.

2. Headless install-cli.sh vs полный onboard: как выбрать

Пути установки OpenClaw на облачном Mac: headless CI vs интерактивный onboard
Измерение install-cli.sh --no-onboard CI / batch · повторяемо Полный openclaw onboard Desktop · первый TCC
Лучше дляGHA, cron, однородное масштабирование fleetSingle-seat VNC setup, menu bar app
Источник configGit template + CI secretsМастер пишет по шагам
Gateway 18789Runbook фиксирует 127.0.0.1 + bearer tokenМастер выдаёт bearer
launchdScript или post-install install-daemonОпциональный --install-daemon
Типичные сбоиPATH drift, sharp load, config semver skewMissing TCC, port already bound
Sweet spotMac mini hosting 24/7 agent poolsDeveloper laptop sidecar debugging

При provisioning свежего Mac mini cloud seat у провайдера сначала прогоните headless smoke pipeline. Команды, которые «onboard once by hand», часто через недели обнаруживают, что не могут disaster-recover Gateway менее чем за час.

3. Headless provisioning runbook: install-cli.sh и injection config

Примеры ниже предполагают dedicated system user openclaw-ci, изолированного от VNC admin. На Canada M4 cloud Mac pin Node на LTS (22.x — разумный baseline 2026) и отделите от nvm shims runner user — launchd jobs не загружают interactive shell profiles.

Headless install и daemon (иллюстративно; следуйте upstream docs)
# SSH как openclaw-ci на облачном Mac
export OPENCLAW_CONFIG_DIR="$HOME/.openclaw"
curl -fsSL https://example.openclaw.dev/install-cli.sh | bash -s -- --no-onboard

# Восстановить config из CI secrets — никогда не коммитьте tokens в Git
install -d -m 700 "$OPENCLAW_CONFIG_DIR"
echo "$OPENCLAW_CONFIG_JSON" > "$OPENCLAW_CONFIG_DIR/config.json"

# Установить Gateway launchd service, если поддерживается
openclaw gateway install-daemon
openclaw doctor --non-interactive

Операционные заметки, отделяющие hobby installs от production cloud Mac lanes:

  1. Idempotency: workflow должен переносить re-runs. Хороший script no-op или converge version при уже установленном.
  2. Semver lock: записывайте openclaw --version и config schema version в runbook; upgrades через change window с rollback.
  3. Disk layout: npm/pnpm caches на path, который можно wipe независимо от Derived Data, если тот же host собирает iOS artifacts.
  4. Checksum: pin digest install script в production; naked curl | bash без verification — supply-chain incident waiting to happen.
Сосуществование с CI runner
Если на том же Mac mini hosting seat крутится GitHub Actions runner, используйте разных Unix users: runner user владеет xcodebuild; openclaw-ci владеет Gateway. Никогда не делите один launchd job label или один global node_modules/.sharp tree.

4. launchd health checks: треугольник process, port и log

В headless mode «Gateway seems up» часто значит, что кто-то один раз запустил curl из SSH session с полным PATH. Production probes должны валидировать launchd state, listen address и log keywords вместе. Каждые пять минут через cron или scheduled GHA workflow:

launchd + Gateway probe (пример)
#!/bin/bash
set -euo pipefail
LABEL="ai.openclaw.gateway"
launchctl print "gui/$(id -u)/$LABEL" | grep -q 'state = running'
lsof -nP -iTCP:18789 -sTCP:LISTEN | grep -q openclaw
curl -sf -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
  http://127.0.0.1:18789/health | grep -q '"ok":true'
tail -n 50 ~/Library/Logs/openclaw/gateway.log | grep -Ei 'sharp|EADDRINUSE|401' && exit 1 || true

plist должен вызывать openclaw с absolute path и задавать explicit EnvironmentVariables, включая PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin. launchd не читает interactive ~/.zprofile. Это mismatch — главная причина «работает по SSH, daemon сразу exit» на арендованном cloud Mac.

Расширяйте probes duration metrics: track p95 latency /health и alert, когда cold starts превышают workflow timeout budget. Gateway, отвечающая за четыре секунды interactively, но за тридцать под launchd, всё равно может валить CI jobs с tight retries.

5. Матрица результатов probe: green, yellow, red

Уровни health launchd Gateway OpenClaw и действия оператора
УровеньСигналыРекомендуемое действие
Greenlaunchd running + 18789 LISTEN + /health 200Rotate gateway.log старше 7 дней only
YellowSlow /health или intermittent 401; no sharp errors in logsVerify token rotation; openclaw doctor; cap concurrent agent jobs
Redlaunchd exit loop; EADDRINUSE; sharp load failureStop job queue; bootout + rebuild plist; см. sharp section ниже

Yellow дольше двадцати четырёх часов — release blocker. Headless CI предполагает predictable Gateway behavior; intermittent auth или latency failures раздуваются в whole-batch agent timeouts, дорогие для debug без VNC.

6. Troubleshooting native module sharp на Apple Silicon cloud Macs

Dependency graph OpenClaw включает sharp (libvips bindings). На M4 arm64 hosts mismatched Node major versions или mixed install users дают Cannot find module '../build/Release/sharp.node' или architecture mismatch at runtime. Headless CI не должна узнавать это на first failed job — bake sharp validation в golden images или post-install hooks.

6.1 Common failure modes and fixes

  • User mismatch: root installed global CLI, openclaw-ci runs daemon — reinstall sharp или CLI as service user.
  • Node upgrade without rebuild: after bumping Node, run npm rebuild sharp или reinstall openclaw CLI package.
  • Rosetta mix: plist и CLI оба arm64; file $(which node) should report arm64.
  • Offline cache: на bandwidth-constrained Mac mini cloud hosts prefetch sharp binaries, чтобы CI jobs не hit GitHub releases every run.
  • Multiple Node managers: avoid Homebrew Node for daemon while interactive shells use nvm — pick one story и encode в plist.
sharp diagnostics и rebuild (as openclaw-ci)
node -p "process.arch + ' ' + process.version"
npm ls sharp --global 2>/dev/null || true
npm rebuild sharp --foreground-scripts
openclaw doctor 2>&1 | tee /tmp/openclaw-doctor.log
grep -i sharp /tmp/openclaw-doctor.log && exit 1 || echo "sharp OK"

If doctor still reports sharp, align Node и CLI install channels from same install-cli.sh artifact before chasing application-level bugs. Mixing Homebrew Node with npm-global CLI without plist PATH fixes — sharp edge we see most often на Mac mini hosting tickets.

7. CI에서 Gateway 18789 경계와 token 로테이션

Headless pipelines должны вызывать локальный Gateway на 127.0.0.1:18789 с bearer token — никогда не expose порт на публичный интерфейс. Храните tokens в CI secrets (например OPENCLAW_GATEWAY_TOKEN). Поток ротации: записать новый token в config, reload daemon, validate probes green, затем revoke старый secret. Loopback держит минимальную latency, когда runner и Gateway делят один облачный Mac; cross-host вызовы — в связанной SSH gateway note выше.

Workflows должны иметь explicit timeouts и limited retries. Cold start после reboot может занять десять–тридцать секунд; failed probe должен один раз trigger launchctl kickstart перед destructive reinstall. Задокументируйте это, чтобы on-call не стёр рабочий config во время transient boot storms после macOS patches.

Ротацию token привязывайте к одному change ticket для CI pipeline и Gateway, чтобы избежать split-brain, когда обновлена только одна сторона. На production облачном Mac безопаснее двухэтапный deploy: проверить новый token на staging seat, затем переключить production config. В rollback включите срок действия старого token и как читать 401 spikes в gateway.log.

8. Security baseline для headless OpenClaw на hosted Mac seats

  • Dedicated user: openclaw-ci без admin rights и VNC login.
  • Secrets: config и tokens только из vault; FileVault на volume.
  • Network: inbound только SSH или Tailscale; не broadcast 18789 в LAN.
  • Supply chain: verify checksums install script; block unaudited pipe-to-bash в production.
  • Audit: gateway.log fourteen days; ship 401 и sharp keywords в log stack.
  • Blast radius: agent tools profile — least privilege; untrusted fork PRs не должны достигать production Gateway hosts.

Headless automation ускоряет delivery, но убирает паузу, где человек заметил бы подозрительный install URL. Относитесь к URL и checksum install script с той же строгостью, что и к production TLS certificates. Аудит-логи шипьте в SIEM с alert rules на 401 и sharp.

9. Подключение headless OpenClaw к GHA или internal CI

Когда Gateway probes green, открывайте OpenClaw pipelines через guarded steps:

  1. Export OPENCLAW_GATEWAY_TOKEN из GitHub Environments с required reviewers для production.
  2. Agent jobs на runs-on: [self-hosted, macos-m4-canada, openclaw] labels, отдельно от signing или archive jobs.
  3. Preflight той же shell probe, что и cron; fail fast до expensive LLM или browser steps.
  4. Capture openclaw doctor output как workflow artifact при failure для async review.

Memory planning: на 24GB Mac mini cloud seat pause OpenClaw agent batches при unified memory pressure выше eighty percent, если тот же host должен finish xcodebuild archive той же ночью. Queue depth alerts не дадут blame «GitHub slow», когда host просто oversubscribed. Preflight через memory_pressure или vm_stat перед OpenClaw steps снижает collision с nightly archive на Mac mini hosting seats.

10. First-week checklist на Canada M4 dedicated seat

  1. Выберите plan Mac mini hosting (24GB RAM и 512GB SSD minimum для combined CI + Gateway).
  2. Создайте openclaw-ci и pass install-cli.sh --no-onboard smoke tests.
  3. Inject config и token; ensure openclaw doctor --non-interactive clean.
  4. Install launchd и deploy green/yellow/red probes с paging.
  5. Prevalidate sharp; lock Node и CLI versions в runbook.
  6. Если GHA runner shares host, verify separate users и no port conflicts.
  7. Document rebuild: новый облачный Mac seat должен reach identical Gateway behavior within thirty minutes.

11. FAQ

Нужен ли VNC после --no-onboard?

Если agents требуют browser automation или TCC permissions, schedule one-time graphical session. Pure CLI или API Gateway workloads могут run без VNC indefinitely once launchd stable.

install-cli.sh vs full install.sh?

Используйте install-cli.sh, когда CI needs CLI plus Gateway only. Full installers с menu bar apps — poor fits для repeated headless runner deployments.

Probe returns 401 but process running?

Usually token rotation drift или workflows still sending old secret. Align config on disk с Authorization header; check proxies injecting stale tokens.

sharp fails under launchd but works over SSH?

Almost always PATH или user environment differences. Compare launchctl print environment blocks с interactive env side by side.

Можно ли OpenClaw Gateway в Docker на macOS?

Docker on Mac cannot replace native TCC и GUI automation requirements. Run Gateway under native launchd; containers — peripheral tools only.

Как schedule OpenClaw alongside GitHub Actions на one host?

Stagger agent batches away from archive peaks; pause agents above eighty percent memory pressure. Label и concurrency guidance в self-hosted runner article.

Hashvps Canada node — хороший fit для headless OpenClaw?

Да, когда нужны dedicated IPv4, bare-metal M4 и persistent SSH. Confirm disk tier fits npm caches и rotated gateway logs before committing.

Стандартная процедура upgrade CLI?

Maintenance window: launchctl bootout, converge version via install-cli, npm rebuild sharp, doctor, green probes, then restore traffic.

Headless OpenClaw нужен стабильный Mac mini cloud

install-cli.sh --no-onboard даёт воспроизводимые деплои; долгосрочная стабильность зависит от cloud Mac. Unified Memory M4, macOS launchd, энергоэффективный Mac mini hosting, Gatekeeper/FileVault.

Сравнить тарифы Mac mini cloud

Hashvps · Mac Cloud

Mac mini hosting для headless OpenClaw CI

M4 bare metal, выделенный IPv4, headless install-cli и круглосуточные Gateway-зонды.

На главную
Акция