Gateway 런북
이 페이지는 Gateway 서비스의 첫날 시작 작업과 이후 운영 작업에 사용합니다.심층 문제 해결
증상 우선 진단과 정확한 명령 단계 및 로그 시그니처를 제공합니다.
구성
작업 중심 설정 가이드 + 전체 구성 참조입니다.
시크릿 관리
SecretRef 계약, 런타임 스냅샷 동작, 마이그레이션/리로드 작업을 설명합니다.
시크릿 계획 계약
정확한
secrets apply 대상/경로 규칙과 ref-only auth-profile 동작을 설명합니다.5분 로컬 시작
서비스 상태 확인
Runtime: running, Connectivity probe: ok, 그리고 기대한 값과 일치하는 Capability: ...가 표시됩니다. 단순한 도달 가능성뿐 아니라 읽기 범위 RPC 증명이 필요할 때는 openclaw gateway status --require-rpc를 사용하세요.Gateway 구성 리로드는 활성 구성 파일 경로를 감시합니다(프로필/상태 기본값에서 확인되거나, 설정된 경우
OPENCLAW_CONFIG_PATH 사용).
기본 모드는 gateway.reload.mode="hybrid"입니다.
첫 번째 로드가 성공한 후 실행 중 프로세스는 활성 메모리 내 구성 스냅샷을 제공하며, 리로드가 성공하면 해당 스냅샷을 원자적으로 교체합니다.런타임 모델
- 라우팅, 제어 플레인, 채널 연결을 위한 단일 상시 실행 프로세스입니다.
- 다음을 위한 단일 다중화 포트:
- 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)를 사용하고, 비-루프백 리버스 프록시 구성은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는 항상 구성된 기본 에이전트에 매핑되는 안정적인 별칭입니다.- 백엔드 provider/model 재정의를 원할 때는
x-openclaw-model을 사용하세요. 그렇지 않으면 선택된 에이전트의 일반 모델 및 임베딩 설정이 계속 제어를 맡습니다.
포트 및 바인드 우선순위
| 설정 | 확인 순서 |
|---|---|
| Gateway 포트 | --port → OPENCLAW_GATEWAY_PORT → gateway.port → 18789 |
| 바인드 모드 | CLI/재정의 → gateway.bind → loopback |
핫 리로드 모드
gateway.reload.mode | 동작 |
|---|---|
off | 구성 리로드 없음 |
hot | 핫 적용이 안전한 변경만 적용 |
restart | 리로드가 필요한 변경 시 재시작 |
hybrid (기본값) | 안전하면 핫 적용, 필요하면 재시작 |
운영자 명령 집합
gateway status --deep는 추가 서비스 검색용입니다(LaunchDaemons/systemd 시스템
유닛/schtasks). 더 심층적인 RPC 상태 프로브용은 아닙니다.
여러 Gateway(동일 호스트)
대부분의 설치에서는 머신당 하나의 Gateway를 실행해야 합니다. 하나의 Gateway로 여러 에이전트와 채널을 호스팅할 수 있습니다. 여러 Gateway가 필요한 경우는 의도적으로 격리나 구조용 봇을 원할 때뿐입니다. 유용한 확인 명령:gateway status --deep는Other gateway-like services detected (best effort)를 보고할 수 있으며, 오래된 launchd/systemd/schtasks 설치가 남아 있을 때 정리 힌트를 출력합니다.- 둘 이상의 대상이 응답하면
gateway probe가multiple reachable gateways를 경고할 수 있습니다. - 이것이 의도된 경우 Gateway마다 포트, 구성/상태, 워크스페이스 루트를 분리하세요.
원격 액세스
권장: Tailscale/VPN. 대안: SSH 터널.ws://127.0.0.1:18789에 연결하세요.
참고: 원격 Gateway, 인증, Tailscale.
감독 및 서비스 수명 주기
프로덕션 수준의 신뢰성을 위해 감독된 실행을 사용하세요.- macOS (launchd)
- Linux (systemd user)
- Windows (native)
- Linux (system service)
ai.openclaw.gateway(기본값) 또는 ai.openclaw.<profile>(이름 있는 프로필)입니다. openclaw doctor는 서비스 구성 드리프트를 감사하고 복구합니다.하나의 호스트에서 여러 Gateway
대부분의 구성은 하나의 Gateway를 실행해야 합니다. 엄격한 격리/중복성(예: 구조 프로필)을 위해서만 여러 개를 사용하세요. 인스턴스별 체크리스트:- 고유한
gateway.port - 고유한
OPENCLAW_CONFIG_PATH - 고유한
OPENCLAW_STATE_DIR - 고유한
agents.defaults.workspace
dev 프로필 빠른 경로
19001이 포함됩니다.
프로토콜 빠른 참조(운영자 보기)
- 첫 번째 클라이언트 프레임은 반드시
connect여야 합니다. - Gateway는
hello-ok스냅샷(presence,health,stateVersion,uptimeMs, limits/policy)을 반환합니다. 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이 포함됩니다.
- 즉시 수락 확인 응답(
status:"accepted") - 최종 완료 응답(
status:"ok"|"error"), 그 사이에 스트리밍되는agent이벤트 포함
운영 점검
라이브니스
- WS를 열고
connect를 전송합니다. - 스냅샷이 포함된
hello-ok응답을 기대합니다.
레디니스
갭 복구
이벤트는 재생되지 않습니다. 시퀀스 갭이 있으면 계속하기 전에 상태를 새로 고치세요(health, system-presence).
일반적인 실패 시그니처
| 시그니처 | 가능성 높은 문제 |
|---|---|
refusing to bind gateway ... without auth | 유효한 Gateway 인증 경로 없이 비-루프백 바인드 시도 |
another gateway instance is already listening / EADDRINUSE | 포트 충돌 |
Gateway start blocked: set gateway.mode=local | 구성이 원격 모드로 설정되었거나, 손상된 구성에서 로컬 모드 스탬프가 누락됨 |
unauthorized during connect | 클라이언트와 Gateway 간 인증 불일치 |
안전 보장
- Gateway 프로토콜 클라이언트는 Gateway를 사용할 수 없을 때 빠르게 실패합니다(암시적 직접 채널 대체 없음).
- 유효하지 않거나
connect가 아닌 첫 프레임은 거부되고 연결이 닫힙니다. - 정상 종료 시 소켓이 닫히기 전에
shutdown이벤트를 전송합니다.
관련 항목: