Gateway
Gateway 런북
이 페이지는 Gateway 서비스의 day-1 시작과 day-2 운영에 사용하세요.
정확한 명령 단계와 로그 시그니처를 포함한 증상 우선 진단입니다.
작업 중심 설정 가이드 + 전체 구성 참조입니다.
SecretRef 계약, 런타임 스냅샷 동작, 마이그레이션/다시 로드 작업입니다.
정확한 secrets apply 대상/경로 규칙과 ref 전용 auth-profile 동작입니다.
5분 로컬 시작
Gateway 시작
openclaw gateway --port 18789
# debug/trace mirrored to stdio
openclaw gateway --port 18789 --verbose
# force-kill listener on selected port, then start
openclaw gateway --force
서비스 상태 확인
openclaw gateway status
openclaw status
openclaw logs --follow
정상 기준: Runtime: running, Connectivity probe: ok, 그리고 예상과 일치하는 Capability: ...입니다. 단순 도달 가능성이 아니라 읽기 범위 RPC 증명이 필요할 때는 openclaw gateway status --require-rpc를 사용하세요.
채널 준비 상태 검증
openclaw channels status --probe
도달 가능한 Gateway가 있으면 계정별 실시간 채널 프로브와 선택적 감사를 실행합니다. Gateway에 도달할 수 없으면 CLI는 실시간 프로브 출력 대신 구성 전용 채널 요약으로 대체합니다.
런타임 모델
- 라우팅, 제어 평면, 채널 연결을 위한 항상 켜져 있는 단일 프로세스입니다.
- 다음을 위한 단일 다중화 포트:
- WebSocket 제어/RPC
- HTTP API, OpenAI 호환(
/v1/models,/v1/embeddings,/v1/chat/completions,/v1/responses,/tools/invoke) - 제어 UI 및 훅
- 기본 바인드 모드:
loopback. - 인증은 기본적으로 필요합니다. 공유 비밀 설정은
gateway.auth.token/gateway.auth.password(또는OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD)를 사용하며, non-loopback 리버스 프록시 설정은gateway.auth.mode: "trusted-proxy"를 사용할 수 있습니다.
OpenAI 호환 엔드포인트
OpenClaw의 가장 활용도가 높은 호환성 표면은 이제 다음과 같습니다.
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completionsPOST /v1/responses
이 집합이 중요한 이유:
- 대부분의 Open WebUI, LobeChat, LibreChat 통합은 먼저
/v1/models를 프로브합니다. - 많은 RAG 및 메모리 파이프라인은
/v1/embeddings를 기대합니다. - 에이전트 네이티브 클라이언트는 점점
/v1/responses를 선호합니다.
계획 참고:
/v1/models는 에이전트 우선입니다.openclaw,openclaw/default,openclaw/<agentId>를 반환합니다.openclaw/default는 항상 구성된 기본 에이전트에 매핑되는 안정적인 별칭입니다.- 백엔드 제공자/모델 재정의가 필요할 때는
x-openclaw-model을 사용하세요. 그렇지 않으면 선택한 에이전트의 일반 모델 및 임베딩 설정이 제어권을 유지합니다.
이 모든 엔드포인트는 기본 Gateway 포트에서 실행되며 Gateway HTTP API의 나머지 부분과 동일한 신뢰된 운영자 인증 경계를 사용합니다.
포트 및 바인드 우선순위
| 설정 | 해석 순서 |
|---|---|
| Gateway 포트 | --port → OPENCLAW_GATEWAY_PORT → gateway.port → 18789 |
| 바인드 모드 | CLI/재정의 → gateway.bind → loopback |
설치된 Gateway 서비스는 해석된 --port를 감독자 메타데이터에 기록합니다. gateway.port를 변경한 후에는 launchd/systemd/schtasks가 새 포트에서 프로세스를 시작하도록 openclaw doctor --fix 또는 openclaw gateway install --force를 실행하세요.
Gateway 시작은 non-loopback 바인드에 대한 로컬 제어 UI 출처를 시드할 때 동일한 유효 포트와 바인드를 사용합니다. 예를 들어 --bind lan --port 3000은 런타임 검증이 실행되기 전에 http://localhost:3000 및 http://127.0.0.1:3000을 시드합니다. HTTPS 프록시 URL 같은 원격 브라우저 출처는 gateway.controlUi.allowedOrigins에 명시적으로 추가하세요.
핫 다시 로드 모드
gateway.reload.mode |
동작 |
|---|---|
off |
구성 다시 로드 없음 |
hot |
핫 세이프 변경 사항만 적용 |
restart |
다시 시작이 필요한 변경 시 다시 시작 |
hybrid (기본값) |
안전하면 핫 적용, 필요하면 다시 시작 |
운영자 명령 집합
openclaw gateway status
openclaw gateway status --deep # adds a system-level service scan
openclaw gateway status --json
openclaw gateway install
openclaw gateway restart
openclaw gateway stop
openclaw secrets reload
openclaw logs --follow
openclaw doctor
gateway status --deep는 추가 서비스 검색(LaunchDaemons/systemd 시스템
유닛/schtasks)을 위한 것이며, 더 깊은 RPC 상태 프로브가 아닙니다.
여러 Gateway(동일 호스트)
대부분의 설치는 머신당 하나의 Gateway를 실행해야 합니다. 단일 Gateway가 여러 에이전트와 채널을 호스트할 수 있습니다.
의도적으로 격리 또는 구조용 봇을 원할 때만 여러 Gateway가 필요합니다.
유용한 확인:
openclaw gateway status --deep
openclaw gateway probe
예상되는 내용:
gateway status --deep는 오래된 launchd/systemd/schtasks 설치가 아직 남아 있으면Other gateway-like services detected (best effort)를 보고하고 정리 힌트를 출력할 수 있습니다.- 둘 이상의 대상이 응답하면
gateway probe가multiple reachable gateways에 대해 경고할 수 있습니다. - 이것이 의도된 경우 Gateway별로 포트, 구성/상태, 워크스페이스 루트를 격리하세요.
인스턴스별 체크리스트:
- 고유한
gateway.port - 고유한
OPENCLAW_CONFIG_PATH - 고유한
OPENCLAW_STATE_DIR - 고유한
agents.defaults.workspace
예:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json OPENCLAW_STATE_DIR=~/.openclaw-a openclaw gateway --port 19001
OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b openclaw gateway --port 19002
자세한 설정: /gateway/multiple-gateways.
원격 액세스
권장: Tailscale/VPN. 대안: SSH 터널.
ssh -N -L 18789:127.0.0.1:18789 user@host
그런 다음 클라이언트를 로컬에서 ws://127.0.0.1:18789에 연결하세요.
참고: 원격 Gateway, 인증, Tailscale.
감독 및 서비스 수명 주기
프로덕션에 가까운 안정성을 위해 감독되는 실행을 사용하세요.
macOS (launchd)
openclaw gateway install
openclaw gateway status
openclaw gateway restart
openclaw gateway stop
다시 시작에는 openclaw gateway restart를 사용하세요. openclaw gateway stop과 openclaw gateway start를 연결하지 마세요. macOS에서 gateway stop은 중지하기 전에 의도적으로 LaunchAgent를 비활성화합니다.
LaunchAgent 레이블은 ai.openclaw.gateway(기본값) 또는 ai.openclaw.<profile>(이름 지정 프로필)입니다. openclaw doctor는 서비스 구성 드리프트를 감사하고 복구합니다.
Linux (systemd 사용자)
openclaw gateway install
systemctl --user enable --now openclaw-gateway[-<profile>].service
openclaw gateway status
로그아웃 후에도 지속하려면 lingering을 활성화하세요.
sudo loginctl enable-linger <user>
사용자 지정 설치 경로가 필요할 때의 수동 사용자 유닛 예:
[Unit]
Description=OpenClaw Gateway
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/openclaw gateway --port 18789
Restart=always
RestartSec=5
TimeoutStopSec=30
TimeoutStartSec=30
SuccessExitStatus=0 143
KillMode=control-group
[Install]
WantedBy=default.target
Windows (네이티브)
openclaw gateway install
openclaw gateway status --json
openclaw gateway restart
openclaw gateway stop
네이티브 Windows 관리 시작은 OpenClaw Gateway라는 Scheduled Task를 사용합니다
(이름 지정 프로필의 경우 OpenClaw Gateway (<profile>)). Scheduled Task
생성이 거부되면 OpenClaw는 상태 디렉터리 내부의 gateway.cmd를 가리키는
사용자별 Startup 폴더 런처로 대체합니다.
Linux (시스템 서비스)
다중 사용자/항상 켜져 있는 호스트에는 시스템 유닛을 사용하세요.
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway[-<profile>].service
사용자 유닛과 동일한 서비스 본문을 사용하되
/etc/systemd/system/openclaw-gateway[-<profile>].service 아래에 설치하고,
openclaw 바이너리가 다른 위치에 있으면 ExecStart=를 조정하세요.
동일한 프로필/포트에 대해 openclaw doctor --fix가 사용자 수준 Gateway 서비스를 설치하게 하지 마세요. Doctor는 시스템 수준 OpenClaw Gateway 서비스를 발견하면 해당 자동 설치를 거부합니다. 시스템 유닛이 수명 주기를 소유할 때는 OPENCLAW_SERVICE_REPAIR_POLICY=external을 사용하세요.
개발 프로필 빠른 경로
openclaw --dev setup
openclaw --dev gateway --allow-unconfigured
openclaw --dev status
기본값에는 격리된 상태/구성과 기본 Gateway 포트 19001이 포함됩니다.
프로토콜 빠른 참조(운영자 관점)
- 첫 번째 클라이언트 프레임은
connect여야 합니다. - Gateway는
hello-ok스냅샷(presence,health,stateVersion,uptimeMs, 제한/정책)을 반환합니다. hello-ok.features.methods/events는 모든 호출 가능한 헬퍼 라우트의 생성된 덤프가 아니라 보수적인 검색 목록입니다.- 요청:
req(method, params)→res(ok/payload|error). - 일반 이벤트에는
connect.challenge,agent,chat,session.message,session.tool,sessions.changed,presence,tick,health,heartbeat, 페어링/승인 수명 주기 이벤트,shutdown이 포함됩니다.
에이전트 실행은 2단계입니다.
- 즉시 수락 ack(
status:"accepted") - 최종 완료 응답(
status:"ok"|"error"), 그 사이에 스트리밍되는agent이벤트 포함.
전체 프로토콜 문서 참고: Gateway 프로토콜.
운영 확인
활성 상태
- WS를 열고
connect를 보냅니다. - 스냅샷이 포함된
hello-ok응답을 기대합니다.
준비 상태
openclaw gateway status
openclaw channels status --probe
openclaw health
간격 복구
이벤트는 재생되지 않습니다. 시퀀스 간격이 발생하면 계속하기 전에 상태(health, system-presence)를 새로 고치세요.
일반적인 실패 시그니처
| 시그니처 | 가능성 높은 문제 |
|---|---|
refusing to bind gateway ... without auth |
유효한 Gateway 인증 경로 없이 non-loopback 바인드 |
another gateway instance is already listening / EADDRINUSE |
포트 충돌 |
Gateway start blocked: set gateway.mode=local |
구성이 원격 모드로 설정되었거나 손상된 구성에서 로컬 모드 스탬프가 누락됨 |
unauthorized during connect |
클라이언트와 Gateway 간 인증 불일치 |
전체 진단 단계는 Gateway 문제 해결을 사용하세요.
안전 보장
- Gateway 프로토콜 클라이언트는 Gateway를 사용할 수 없을 때 즉시 실패합니다(암시적인 직접 채널 대체 경로 없음).
- 잘못되었거나 connect가 아닌 첫 프레임은 거부되고 닫힙니다.
- 정상 종료는 소켓이 닫히기 전에
shutdown이벤트를 내보냅니다.
관련: