OpenClaw 스테이징과 프로덕션 launchd 프로필 분리: 2026 임대 Mac mini(VmMac)
OpenClaw를 배포하는 플랫폼 엔지니어는 단일 임대 Apple Silicon Mac mini에서 결국 지루하게 들리는 위기를 맞습니다. 스테이징 실험이 프로덕션 게이트웨이를 오염—두 세계가 같은 상태 디렉터리를 읽거나 LaunchAgent 레이블 접두사를 공유하거나 동일한 localhost 포트에 바인딩합니다. 이 2026 런북은 호스트에 두 가지 감사 가능한 성격을 부여하는 방법—분리된 OpenClaw 홈 접두사, 충돌하지 않는 plist 레이블, 명시적 LimitLoadToSessionType 선택, 사고 중 grep으로 확인할 수 있는 환경 변수 우선순위 표—을 설명합니다. 시크릿과 plist 안전, 헤드리스 대 GUI 세션, 게이트웨이 복구와 함께 읽어 재시작이 자해 자동화 루프가 되지 않게 하세요.
VmMac은 홍콩·일본·한국·싱가포르·미국에서 노드와 SSH, 선택적 VNC를 제공하지만 프로필 격리는 여전히 고객 계약입니다.
공유 기억 상실 없이 한 호스트에 두 성격
스테이징과 프로덕션을 전원과 NVMe를 공유하는 두 함대로 취급하세요. 별도의 설정 루트, 로그 경로, API 키가 필요합니다—“같은 키에 모델만 다름”은 금지입니다. 스테이징을 프로덕션 디렉터리로 심볼릭 링크하는 속임은 공유 빌드 에이전트의 최악을 재현합니다. OPENCLAW_HOME_STG와 OPENCLAW_HOME_PRD는 LaunchAgent plist의 EnvironmentVariables에만 두고 대화형 SSH 세션이 바꿀 수 있는 셸 프로필에는 두지 마세요.
- 수치 가드레일: 두 게이트웨이가 동시에 실행될 때 NVMe에 최소 40GB 여유를 유지하세요. SQLite 대기열과 로컬 모델 캐시가 같은 디스크 예산을 놓고 다툽니다.
- 수치 가드레일: 여유를 측정하지 않았다면 진행 중인 아웃바운드 webhook 팬아웃 HTTP 클라이언트를 30개로 제한하세요.
- 수치 가드레일: 벤더가 요구하지 않아도 스테이징 토큰은 14일마다 교체하세요.
디렉터리 레이아웃: 상태, 로그, “여기 동기화 금지” 규율
두 루트를 데스크톱이나 iCloud 인접 경로가 아닌 운영자 소유 접두사(예: /usr/local/var/openclaw-*) 아래에 두세요. 홍콩·일본·한국·싱가포르·미국에서 동일 레이아웃을 미러링해 rsync 기반 진단 스크립트를 동일하게 만드세요. 구조화 로그와 디스크 회전과 짝을 이뤄 스테이징이 긴 주말에 디스크를 채워 프로덕션 로그를 쫓아내지 않게 하세요.
LaunchAgent 레이블, ThrottleInterval, LimitLoadToSessionType
서로 다른 역 DNS 레이블(예: com.yourorg.openclaw.gateway.stg와 com.yourorg.openclaw.gateway.prd)을 사용하고 대소문자만 다른 일은 피하세요. ThrottleInterval을 게이트웨이 복구의 최악 재시작 시간에 맞춰 프로덕션이 소켓을 비우는 동안 손상된 스테이징 plist가 다시 살아나지 않게 하세요. GUI 보조가 필요한 스테이징만 LimitLoadToSessionType에 Aqua를 포함하고 프로덕션은 헤드리스로 TCC 표면을 줄이세요.
포트, 루프백 바인딩, StandardOutPath 위생
기본으로 스테이징을 127.0.0.1:18789, 프로덕션을 127.0.0.1:18790에 바인딩—내부 표준이 이미 사용 중이면 조정해도 되지만 온콜이 기억하기 쉬운 홀짝 분할을 유지하세요. 두 에이전트의 StandardOutPath와 StandardErrorPath가 같은 파일을 가리키지 않게 하세요.
환경 변수 우선순위 매트릭스(운영자 치트시트)
| 소스 | 스테이징 우선순위 | 프로덕션 우선순위 | 사고 팁 |
|---|---|---|---|
LaunchAgent plist EnvironmentVariables |
데몬에 대해 셸보다 우선 | 데몬에 대해 셸보다 우선 | 항상 launchctl print gui/$(id -u)/com...stg로 출력 확인 |
SSH 세션의 ~/.zshenv |
사람에게만 적용 | plist를 덮어쓰면 안 됨 | 셸에서 시크릿 제거 |
상태 디렉터리 내 .env |
앱 로컬 기본값 허용 | 엄격한 허용 목록 | stg/prd 사이에 심볼릭 링크 금지 |
launchctl print가 어떤 환경 변수가 이겼는지 증명하지 못하면 운영자는 추측합니다—추측은 프로덕션 키가 스테이징 Slack 봇으로 새는 경로입니다.
엔지니어가 “API 키만 바꿔 프로덕션 plist를 재사용”하자고 하면 차이 우선 정책으로 막으세요. 각 스테이징 plist는 프로덕션과 최소 다섯 개의 가시 키—포트, 레이블, 로그 경로, 상태 루트, 스로틀 노브—에서 달라야 실수한 cp가 리뷰에서 바로 드러납니다.
승격 전 7단계 스모크와 롤백 플레이북
- 스테이징 plist 언로드;
lsof로 포트 닫힘 확인. - 포렌식을 위해 스테이징 상태 tarball을 보냄—프로덕션에서 재사용 금지.
- 카나리아 토큰으로 스테이징 리스너에 합성 webhook.
- 리전 간 plist diff; 호스트명 제외 차이 0 기대.
- 프로덕션 plist 로드; 헬스 엔드포인트가 12초 내 200 반환 확인.
- 알려진 양호 프로덕션 대기열 깊이 메트릭 재생; 기준선보다 3배 높으면 알림.
- 롤백 문서화: prd 언로드, git 태그에서 이전 plist 복원.
게이트웨이 복구 교차 링크와 알려진 자동화 함정
커뮤니티 보고에 따르면 에이전트 세션 안에서 게이트웨이 재시작을 호출하면 특정 launchd 구성에서 깨끗한 재실행 없이 프로세스가 종료될 수 있습니다. 승격은 먼저 근무 시간에 사람이 게이트웨이를 재시작하도록 설계하세요. 런북을 설치 및 배포 가이드에 묶어 “서비스 재설치” 단계를 부족 지식이 아닌 고정 버전으로 만드세요.
이중 프로필의 5개 리전 일관성 점검
매주 모든 VmMac 리전에서 동일한 7단계 승격 리허설을 실행하세요. 편차는 대개 경로 오타나 로캘별 plist 인코딩입니다. 저장소에 있는 실제 plist 키와 도움말 센터 예시를 맞추세요.
FAQ: 한 대 Mac mini의 스테이징과 프로덕션 OpenClaw
하나의 Node 바이너리를 공유할 수 있나요? 예—버전은 전역으로 고정. 상태 디렉터리는 공유하지 않습니다.
스테이징이 실제 벤더 API를 호출해야 하나요? 샌드박스 우선; 불가능하면 속도 제한과 트래픽 명시 라벨.
롤백 소유자는 누구인가요? 플랫폼 팀; VmMac은 plist를 되돌리지 않습니다.
2026년에도 Mac mini M4가 듀얼 게이트웨이 베어메탈에 맞는 이유
Apple Silicon Mac mini는 두 게이트웨이 프로세스, 로컬 SQLite 대기열, 백그라운드 모델 도우미에 시끄러운 이웃 없는 단일 테넌트 처리량을 제공합니다. 리전별 임대로 스테이징을 개발자 가까이 두고 프로덕션은 상류 SaaS 이그레스에 붙이세요. VmMac의 SSH 우선 워크플로는 애플리케이션 코드와 같은 git 파이프라인으로 plist 변경을 강제하고 홍콩·일본·한국·싱가포르·미국에서 동일하게 검증합니다. launchd 격리를 배관 사소가 아니라 제품 품질로 다루면 OpenClaw는 데모에서 인프라가 됩니다.