2026 OpenClaw 대여 Mac Mini 실전
OPENCLAW_HOME 다중 인스턴스 디렉터리, 이중 게이트웨이 포트 격리, CI 폴링 요약·Webhook 병합 알림 최소 재현
공식 다중 인스턴스는 (1) 인스턴스마다 다른 OPENCLAW_HOME 상태 트리, (2) 겹치지 않는 게이트웨이 포트—문서대로 OPENCLAW_GATEWAY_PORT와 CLI --port를 맞춤—두 가지로 정리됩니다. Mac Mini 대여 호스트에 launchd·systemd로 박아 두고, CI 폴링 digest와 실패 Webhook을 하류에서 한 통지로 병합하면 운영·야간 게이트웨이를 한 대에 둬도 설정이 섞이지 않습니다. launchd 파티션·야간 workflow_dispatch·게이트웨이 롤백.
디렉터리 설계
위키에 홈 디렉터리·포트 쌍을 고정합니다. 예: ~/openclaw-prod:18789, ~/openclaw-ci:18790. 트리마다 설정·캐시·로그를 분리하고 실험 트리가 운영 설정을 심볼릭 링크로 덮지 못하게 합니다. 리버스 프록시는 upstream을 포트별로 나눕니다.
두 번째 인스턴스 설치·onboard
기존 세션을 오염시키지 않으려면 새 터미널을 열고 아래 두 변수만 export한 뒤 공식 절차대로 설치·onboard를 진행합니다.
export OPENCLAW_HOME="$HOME/openclaw-ci" export OPENCLAW_GATEWAY_PORT=18790 # 공식 문서에 따라 설치·onboard 후, 문서가 권장하는 대로 게이트웨이를 띄우며 포트를 명시합니다. 예: # openclaw gateway --port 18790
openclaw doctor로 경로가 해당 OPENCLAW_HOME만 쓰는지, lsof로 지정 포트만 열렸는지 확인합니다. 첫 인스턴스 셸에는 이 export를 넣지 마세요.
launchd·systemd·launchctl 유지 요점
macOS는 LaunchAgent 두 벌: 고유 Label, openclaw 절대 경로, EnvironmentVariables에 OPENCLAW_HOME·OPENCLAW_GATEWAY_PORT·전체 PATH, WorkingDirectory, KeepAlive·ThrottleInterval. 반영은 launchctl bootstrap/bootout. Linux는 systemd user에 Environment=·WorkingDirectory=로 동일 패턴입니다.
<key>EnvironmentVariables</key> <dict> <key>OPENCLAW_HOME</key><string>/Users/you/openclaw-ci</string> <key>OPENCLAW_GATEWAY_PORT</key><string>18790</string> <key>PATH</key><string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string> </dict>
헬스 확인
포트별로 curl -fsS로 문서화된 health·status만 호출해 프로세스 생존과 HTTP 리스닝을 분리해 봅니다. 게이트웨이가 준비되기 전에 스케줄 잡이 붙으면 빈 응답·타임아웃이 나므로 운영에서는 재시도 백오프를 짧게 두면 좋습니다. 모델 호출이 비싸면 저빈도로 둡니다.
CI 폴링 요약과 Webhook 알림 병합
Actions 스케줄이 실패 workflow_run을 모아 15~60분 창 digest를 만들고, 저장소 실패 Webhook은 게이트웨이가 받습니다. 하류에서 JSON 스키마(digest_schema_version, 창, run_id 등)를 통일하고 Idempotency-Key로 한 알림만 보냅니다. CI 전용 인스턴스의 OPENCLAW_HOME에만 Webhook·HMAC을 두고 운영과 키를 섞지 마세요.
트러블슈팅: 포트 충돌·PATH
- 포트 충돌:
lsof -iTCP:PORT -sTCP:LISTEN으로 점유자를 확인합니다.OPENCLAW_GATEWAY_PORT와--port가 같은지, 첫 인스턴스·로컬 Prometheus·Ollama 등과 겹치지 않는지 봅니다. 리버스 프록시 upstream이 예전 포트를 가리키면 조용히 엉뚱한 인스턴스로 붙습니다. - PATH: launchd 자식 프로세스에는 대화형 로그인 셸의 profile이 없습니다. Node나 CLI가 빠지면
command not found이거나 오래된 바이너리만 잡힙니다. plist에 전체 PATH를 쓰고which openclaw결과 절대 경로를 ProgramArguments에 넣은 뒤, 변경 시bootout후bootstrap으로 다시 올리세요.
로그인 없이: 먼저 스펙·가격, 이어서 구매
멀티 OpenClaw·CI Webhook용 맥 호스트는 로그인 없이 가격·사양을 본 뒤 구매로 이어가면 됩니다.