Linux VPS 한 대에 둘 이상 OpenClaw Gateway 프로필(운영·스테이징·실험)을 올릴 때 실패 원인은 포트 충돌, 상태 디렉터리 공유, systemd 유닛이 같은 사용자·작업 경로를 두고 충돌하는 경우가 대부분입니다. 포트 매트릭스·systemd --user·OPENCLAW_* 격리·FAQ를 한 페이지로 묶었습니다. CI에서 큐·시크릿을 나누는 표준은 2026년 단주기 스프린트: 두 번째 macOS CI 파이프라인 vs Linux 에이전트 잡 분리 — 대기열 비용·시크릿 격리 매트릭스·FAQ와 맞닿아 있습니다.
한 호스트에서 프로필을 병렬로?
VM 분리는 비용·IPv4 부담이 크고, 컨테이너도 포트 공간은 공유합니다. 프로필별로 안 겹치는 바인드 포트, 권한 분리용 전용 사용자·홈, 토큰 혼선을 막는 문서화된 env만 갖추면 VPS 한 대로도 prod·stage·dev를 나눌 수 있습니다.
포트 매트릭스: 리버스 프록시 앞에서 바인드부터
TLS 앞단을 쓰기 전에 루프백 vs 공개 바인드를 정합니다. 흔한 패턴은 Gateway를 127.0.0.1에 두고 Nginx/Caddy가 0.0.0.0:443을 받는 것입니다. 직접 HTTP 노출이면 방화벽 행을 매트릭스에 같이 적습니다.
| 프로필 | HTTP 바인드 | 비고 |
|---|---|---|
prod |
127.0.0.1:18789 |
유닛 이름 고정, 로드밸런서 업스트림에 고정 |
stage |
127.0.0.1:18790 |
prod 토큰 재사용 금지, 별도 systemd 유닛 |
dev |
127.0.0.1:18791 |
선택: VPN 또는 SSH 터널로만 접근 |
systemd 사용자 유닛: linger, 슬라이스, 로그 경계
사용자별 systemd --user는 journalctl --user -u …로 로그를 나누기 쉽습니다. 상주가 필요하면 loginctl enable-linger를 켜고, 유닛마다 WorkingDirectory=와 프로필 전용 EnvironmentFile=을 고정하세요. 시스템 유닛이면 [email protected] 같은 템플릿도 같은 원칙입니다. 프로필당 유닛 노드 하나·포트 행 하나입니다.
# /etc/openclaw/prod.env — 모드 640, 소유자는 서비스 사용자 OPENCLAW_STATE_DIR=/var/lib/openclaw/prod OPENCLAW_CONFIG_PATH=/etc/openclaw/prod.yaml # Gateway 리슨 — 포트 매트릭스와 반드시 일치 OPENCLAW_GATEWAY_BIND=127.0.0.1:18789
OPENCLAW_* 디렉터리: 설정만이 아니라 상태도 격리
설정 외에 런타임 상태(세션·캐시·다운로드)가 조용히 섞입니다. OPENCLAW_STATE_DIR 등을 프로필마다 분리(/var/lib/openclaw/prod vs …/stage)하고 서비스 사용자 소유로 맞추면 백업·쿼터·삭제 범위도 prod와 분리됩니다.
~/.config 등 기본값으로 수렴할 수 있으니 env에 상태 루트를 절대 경로로 고정하세요.
재현 가능한 배포 체크리스트
매트릭스와 env를 인프라 코드와 같은 저장소에 둡니다. daemon-reload 후 의존성 순으로 재시작하고, 롤백은 직전 env·유닛 drop-in 한 쌍으로 적습니다. macOS launchd와의 차이는 2026 클라우드 Mac에서 OpenClaw 배포: Linux VPS와 다른 macOS 검증, launchd 상주, 재현 가능한 FAQ를 참고하세요.
프로필 추가 후 스모크 테스트
ss -lntp로 포트·PID를 유닛과 매칭하고, 루프백에서 헬스 URL을 curl한 뒤 공개 호스트명을 프록시 경유로 같은 경로로 확인합니다. TLS만 되고 트래픽이 엇나가면 업스트림 포트 행을 의심합니다.
ss -lntp | grep -E '18789|18790|18791' curl -svS http://127.0.0.1:18789/health curl -svS https://prod-gateway.example.com/health
환경 드리프트는 systemctl show 결과를 저장소 env와 diff하면 빨리 잡힙니다.
FAQ: 병렬 구성에서 자주 보는 충돌
Address already in use — systemd 밖 잔존 프로세스. 스테이징이 운영 토큰으로 답함 — EnvironmentFile 중복. 디스크 풀 — 상태 디렉터리별 쿼터·로테이션. 한 호스트만 HTTPS 이상 — 업스트림이 다른 루프백 포트를 가리킴(ACME보다 매트릭스를 먼저).
게이트웨이는 Linux, 나머지 루프는 클라우드 Mac에
병렬 OpenClaw는 Linux VPS의 낮은 대기 전력·고정 IP·예측 가능한 systemd와 잘 맞습니다. 반면 Xcode·서명·Apple CLI는 VPSSpark 클라우드 Mac mini에서 네이티브 macOS·Homebrew·SSH·컨테이너를 그대로 쓰는 편이 덜 꼬입니다. Apple Silicon 통합 메모리는 대화형 빌드에도 유리합니다.
macOS 안정성과 Gatekeeper·SIP는 장기 무인에 유리하고, M4 Mac mini 대기 전력 약 4W면 VPS 옆 상시 노드 비용도 현실적입니다.
Linux 게이트웨이와 Apple 작업을 동시에 계획 중이라면 VPSSpark 클라우드 Mac mini M4를 함께 보세요——지금 플랜 살펴보기로 양쪽 스택을 맞춰 두면 됩니다.