대상: 호스팅된 Apple Silicon 원격 Mac에서 OpenClaw 게이트웨이를 무인으로 설치·자가 점검하고 CI 게이트 잡에 묶어야 하는 플랫폼 팀.
키워드: OpenClaw, non-interactive onboard, 원격 Mac, 게이트웨이 자가 점검, CI 게이트.
정식 URL: https://macpull.com/ko/blog/articles/2026-openclaw-remote-mac-noninteractive-onboard-env-merge-ci-gate-howto.html
연관 글(계정 없이 열람): config validate CI 게이트, 스킬 롤백·doctor, 게이트웨이 보안 강화.

안정적인 원격 Mac이 OpenClaw 7x24에 주는 가치

일회성 러너는 단위 테스트에 적합하지만, 웹훅·도구 호출용 게이트웨이는 핸드셰이크 중 환경이 바뀌면 안 됩니다. 전용 원격 Mac은 APFS·launchd·darwin_arm64가 안정적입니다. 잡별 OPENCLAW_HOME으로 운영과 분리하면 doctor+config validate를 한 로그로 남겨 감사에 쓰기 쉽습니다.

전제: Node 22.14+ 또는 24, 디렉터리 격리

상위 스트림은 최신 V8·npm 레이아웃에 맞춥니다. Node 22.14 LTS 또는 Node 24를 하한으로 두고, 게이트 시작 시 node -v와 npm config get prefix를 반드시 로그에 남겨 flaky 잡을 diff하세요.

동시 잡에 동일 홈을 쓰지 마세요. 예: OPENCLAW_HOME="$RUNNER_TEMP/openclaw/$CI_JOB_ID", OPENCLAW_CONFIG_HOME="$OPENCLAW_HOME/config" 후 mkdir -p와 chmod 700. 저장소 체크아웃 트리는 별도로 두어 git clean이 게이트웨이 JSON을 지우지 않게 하세요. 많은 템플릿에서 HTTP 기본 리슨은 127.0.0.1:18789입니다. 방화벽·내부 런북에 이 포트를 명시하세요.

  • 전역 openclaw 버전이 잡의 npm install -g openclaw@… 핀과 일치합니다.
  • 스테이징·운영 plist의 시크릿 이름이 동일 규칙을 따릅니다.
  • 설치 캐시·tar 체크포인트용으로 공유 호스트 디스크에 20GiB 이상 여유가 있습니다.

공식 경로: macOS에서 OpenClaw Installer(npm)

대화형 OpenClaw Installer는 배너에 End-to-end encrypted, Zuck-to-Zuck excluded. 같은 문구와 함께 macos 감지, Install plan(OS macos, method npm, version latest)을 출력합니다. CI에서는 latest 대신 semver 범위를 핀으로 고정하세요.

클린 러너에서는 [1/3] Preparing environment 단계에서 Homebrew가 없으면 설치를 시도할 수 있습니다. 로그에 Homebrew not found, installing 뒤 Installing Homebrew failed — re-run with --verbose for details가 보이면, 한 번 --verbose로 원인을 캡처한 뒤 골든 AMI에 /opt/homebrew를 선탑재해 OpenClaw 단계를 결정적으로 만드는 것이 좋습니다.

🦞 OpenClaw Installer
  End-to-end encrypted, Zuck-to-Zuck excluded.

✓ Detected: macos

Install plan
  OS: macos
  Install method: npm
  Requested version: latest

[1/3] Preparing environment
  · Homebrew not found, installing
✗ Installing Homebrew failed — re-run with --verbose for details
node -v
# 기대: v22.14.x 이상 또는 v24.x — 미만이면 즉시 실패
node -e 'const p=process.versions.node.split(".").map(Number);process.exit(p[0]>=24||(p[0]===22&&p[1]>=14)?0:1)' && echo "node ok"

npm install -g "openclaw@^2026.3.0"
which openclaw
openclaw --version

비대화형 onboard: 파라미터 치트시트

마이너마다 플래그가 바뀝니다. 이미지 고정 전에 러너에서 openclaw onboard --help를 실행해 YAML에 실제 문자열을 박으세요. 아래는 의도를 semver에 매핑할 때의 가이드입니다.

목표 대표 플래그·환경 CI 메모
프롬프트 생략 CI=true + --help에 나오는 yes·비대화형 계열 비밀번호를 stdin 파이프로 넣지 말고 시크릿 env만 사용.
launchd 데몬 onboard의 install-daemon 의미 플래그 영구 게이트웨이에만. PR 일회 잡은 데몬 없이 CLI 검증만.
제공자 API 키 OPENAI_API_KEY 등 openclaw.json이 참조하는 이름 운영 plist EnvironmentVariables와 이름을 맞출 것.
웹훅 인증 OPENCLAW_GATEWAY_TOKEN 등 디스크 파일은 chmod 600, 이중 쓰기 후 데몬 재시작으로 순환.
인스턴스 루트 OPENCLAW_HOME, OPENCLAW_CONFIG_HOME CI_JOB_ID 하위로 공유 Mac 간 간섭 방지.

CI 잡 연동: doctor·validate를 한 로그로 병합

doctor는 stderr에 경고를, config validate는 stdout에 경로·JSON 힌트를 줄 수 있어 분리 로그는 분석이 느립니다. tee로 아티팩트 한 파일에 합친 뒤 시그니처를 grep하세요.

#!/usr/bin/env bash
set -euo pipefail
export OPENCLAW_HOME="${OPENCLAW_HOME:-$RUNNER_TEMP/openclaw/$CI_JOB_ID}"
export OPENCLAW_CONFIG_HOME="${OPENCLAW_CONFIG_HOME:-$OPENCLAW_HOME/config}"
mkdir -p "$OPENCLAW_CONFIG_HOME"
LOG="${OPENCLAW_GATE_LOG:-openclaw-gate.log}"
rm -f "$LOG"

{
  echo "=== node ==="
  node -v
  echo "=== which openclaw ==="
  command -v openclaw
  echo "=== doctor ==="
  openclaw doctor
  echo "=== config validate ==="
  openclaw config validate --config "$OPENCLAW_CONFIG_HOME/openclaw.json"
} 2>&1 | tee "$LOG"

if grep -E 'EADDRINUSE|invalid-key|unauthorized|401' "$LOG"; then
  echo "게이트: $LOG 에 차단 패턴" >&2
  exit 1
fi

의존성 설치 이후·메인 머지 이전에 전용 잡으로 두거나, openclaw.json을 건드리는 PR에 필수 체크로 묶으세요. openclaw-gate.log는 config validate CI 게이트와 동일한 보존 정책으로 아티팩트 업로드하면 됩니다.

머지 전 체크리스트(PR 템플릿에 붙여넣기)

  • Node 줄에 22.14+ 또는 24.x, OpenClaw CLI는 핀 고정.
  • OPENCLAW_HOME이 잡 전용이며 로그에 경로가 찍힘.
  • openclaw-gate.log에 doctor·validate 섹션이 모두 있고 종료 코드 0.
  • 운영 plist 변경 시 롤백 tarball 체크섬을 잡 요약에 기록.
  • 의도한 바인드 주소에서 18789 충돌 스캔이 깨끗함.

openclaw doctor 출력 해석과 실패 시 롤백 체크포인트

doctor는 구조화된 산문으로 보세요. FAIL·WARN·제공자 이름이 들어간 줄을 grep해 환경 변수로 역매핑합니다. onboard가 중간에 깨진 채로 공유 러너에 plist만 남기지 마세요. 위험 단계 전 tar czf openclaw-checkpoint.tgz -C "$OPENCLAW_HOME" .와 sha256sum을 아티팩트에 넣으세요.

롤백: 같은 세션에 데몬을 올렸다면 라벨 launchctl unload, tarball 트리 복원, load 후 2초 대기, 병합 게이트 스크립트 재실행. 스킬 단위 용어는 스킬 롤백·doctor 글과 맞추면 사람·자동화가 같은 말을 씁니다.

FAQ: 포트 18789, PATH, 토큰

포트 점유: 이전 게이트웨이가 18789를 잡고 있을 때가 많습니다. lsof -nP -iTCP:18789 -sTCP:LISTEN으로 PID·라벨을 확인하고 중지하거나, 격리 스모크용으로 JSON에서 리슨 포트만 바꿉니다.

PATH 불일치: 대화형 셸은 nvm·brew를 읽고 launchd는 최소 PATH입니다. plist ProgramArguments에 전역 bin 절대 경로를 쓰거나, 잡 로그에 찍은 PATH 접두를 plist에 복제하세요.

CI에는 토큰이 있는데 운영만 비었음: 시크릿이 잡에만 주입되고 데몬 plist에는 새 변수명이 없을 때입니다. EnvironmentVariables를 diff하고 원자 배포 후 한 번 재시작하세요.

요약

Node 22.14+ 또는 24를 핀하고, macOS에서 OpenClaw Installer npm 흐름을 따르며 Homebrew 선행 조건을 골든 이미지에 넣고, 잡마다 OPENCLAW_HOME을 분리한 뒤 CI 금고에서 키를 주입하고, --help 기반 비대화형 onboard를 돌린 다음 doctor + validate 병합 로그로 한 번에 녹·적을 판정하세요. 게이트와 7x24 게이트웨이 모두에 쓸 Apple Silicon 호스트는 요금·구매·도움말 페이지에서 비교할 수 있고, 콘솔에서 재고를 빠르게 확인할 수 있습니다. 블로그 목록의 다른 OpenClaw 실전 글도 로그인 없이 읽을 수 있습니다.

OpenClaw CI 게이트용 원격 Mac

전용 Apple Silicon·NVMe·예측 가능한 네트워크로 병합 로그와 상시 게이트웨이를 안정적으로 돌리세요. 요금·구매·도움말·블로그는 공개 페이지입니다.