2026-04-15 임대 헤드리스 클라우드 Mac에서 OpenClaw 환경 변수와 비밀(launchd)
OpenClaw 게이트웨이는 프로세스 환경, 프로젝트.env,~/.openclaw/.env,~/.openclaw/openclaw.json의 JSON 블록을 겹쳐 읽습니다. 대화형 셸에서만 검증한 팀일수록 우선순위에 놀랍니다.SSH만 있는 임대Apple Silicon에서는 누락이 TUI가 아니라 상위 LLM 인증 실패로 나타납니다. 이 글(2026-04-15)은 실제 로드 순서,launchd 데몬의 빈틈, 비밀 저장 비교,여섯 단계 로테이션을 제시하고 헬스 프로브, nginx 인그레스, 구조화 로깅으로 이어져 홍콩/일본/한국/싱가포르/미국에서도 재현성을 지킵니다.
문서상 “부모 프로세스가 파일보다 이긴다”는 스택을 운영에 그대로 옮기면 사고가 납니다. 실무에서는launchctl이 CLI가 로컬 파일을 해석하기 전에 변수를 주입하고, 중복 키는 “tmux에서는 되는데 재부팅 후 깨짐”을 만듭니다. 비밀은 단일 감사 가능 지점에 모으고 JSON에서는${VAR} 확장으로만 노출하세요. 유효 환경 크기(대개 < 32 KB)를 로깅하면 CI가printenv를 잘못 끌어온 비대화를 빨리 잡습니다.
OpenClaw 환경 해석(2026 모델)
LaunchAgent로 실행하면 프로세스 트리는launchd에서 시작합니다..zprofile에만 있는 변수는 제어된 shell env 임포트 없이는 나타나지 않습니다. 비민감 토글(예:OPENCLAW_LOG_LEVEL=info)은 plist에 두되, 장수명 토큰을 여러 사람이 읽을 수 있는 plist에 직접 쓰지 마세요. 키체인에서 단명 변수를보내는 래퍼가 더 안전합니다.
“터미널에서 echo 가능”이 “게이트웨이가 본다”와 같지 않습니다. 베이스라인으로 프록시나 CA 변수를 주입한 호스트에서는 OpenClaw.env가 항상 마지막 승자가 아닐 수 있습니다. CI 래퍼에서마스킹된 키 존재 목록을 출력하고 plist 변경 후에는 diff 감사를 남기세요. 지역별로 어떤 자격 증명을 쓰는지 한 장 요약이 인수인계 주간의 오설정을 줄입니다.
임대 macOS의 헤드리스 공백
- 로그인 윈도 없음 —
.zprofile만의 변수는 LaunchAgent에 안 실림. - GUI vs SSH UID 혼선 —
~/.openclaw소유자와 다른 사용자로openclaw gateway실행 시 빈 설정. - 비밀 확산 — 디버깅으로
/tmp에.env복사 시 world-readable.chmod 600후 즉시 삭제. - 다지역 드리프트 — 미동부 키를 일본 게이트가 물려받으면 데이터 레지던시 위반 위험.
비밀 저장 매트릭스(주 저장소 하나)
| 메커니즘 | 강점 | 위험 |
|---|---|---|
~/.openclaw/.env (0600) |
빠른 반복, 백업 쉬움 | root·풀 디스크 이미지에 노출 |
launchd EnvironmentVariables |
데몬에 명시, 재부팅 후에도 유지 | ~/Library/LaunchAgents plist는 world-writable 금지 |
| 키체인 + 래퍼 | 감사 스토리 최상 | 헤드리스 키체인 잠금 해제 타이밍이 까다로움 |
임대 빌더용 launchd 패턴
plist UID는ssh CI 사용자와 일치시킵니다. 비민감은 인라인, 비밀은 키체인 또는OPENCLAW_STATE_DIR=/Volumes/secure/openclaw-$REGION로 Xcode 캐시와 홈을 분리합니다. 정책상 시각 확인이 필요할 때만 VNC를 쓰고, 평소에는 SSH+openclaw doctor 로그로 충분합니다.
#!/bin/bash
set -euo pipefail
export OPENCLAW_STATE_DIR="/Volumes/secure/openclaw-sg"
exec /usr/local/bin/openclaw gateway run
웹훅을 떨어뜨리지 않는 여섯 단계 로테이션
- 인그레스 동결 — nginx에서 외부 웹훅 최대90초 일시 중지(리버스 프록시 글).
- 새 키 — 콘솔에서 먼저 갱신, 구 키는15분 겹침 허용.
- 원자 치환 —
.env.newfsync 후mv,chmod 600. - launchctl kickstart -k gui/$UID/pcx.openclaw.gateway — syslog exit 0.
- 검증 —
openclaw doctor와 127.0.0.1:18789 합성(헬스 프로브). - nginx 재개 — 120초 내 200 다수, 오류율 >5%면 롤백.
.env 커밋. iOS 팀은 외부 CI로 미러링하는 경우가 많습니다.
멀티테넌트 Mac의 OPENCLAW_STATE_DIR 경계
한 대의Mac mini M4를 두 스쿼드가 나눠 쓰면/Volumes/secure/openclaw-teamA와...-teamB로 분리하고 launchd 라벨·unix 그룹으로 ACL을 나눕니다. 경로에 지역 코드(HK 등)를 넣으면 국경 넘는 추론 트래픽 오배선을 줄입니다. 같은 호스트에서 야간 Xcode 아카이브도 돌린다면 상태 디렉터리를 CI 청소 접두사 밖에 두고 janitor가/Volumes/secure를 건너뛰게 하세요.
FAQ: 클라우드 Mac의 OpenClaw 비밀
| 질문 | 답 | 링크 |
|---|---|---|
| 프로덕션에서 shell env 임포트 유지? | 무관 변수가 수백이면 끄고 plist를 명시. | 도움말 |
| 누가 키를 바꿨는지 증명하려면? | plist 체크섬을 git으로, syslog를 SIEM으로. | 로깅 |
| 지역 간 동일 .env 재사용? | 기술적으론 가능, 운영적으론 비권장—폭발 반경 분리. | 가격 |
가시성·용량으로의 다리
비밀은 절반입니다. 환경이 안정되면 프로브와 로그를 연결해 고객 전에 퇴행을 드러내세요.헬스 프로브를 다시 읽고, 큐 깊이가10분 넘게40 메시지를 넘기면 가격으로 노드를 늘리세요.블로그 색인에 시리즈 후속이 있습니다.
결론: OpenClaw 환경을 프로덕션 Kubernetes Secret처럼 다루면 도쿄와 버지니아에서도 동일하게 동작합니다.