웹 (Gateway)
Gateway는 Gateway WebSocket과 동일한 포트에서 소형 브라우저 Control UI (Vite + Lit)를 제공합니다:
- 기본값:
http://<host>:18789/ - 선택적 접두사:
gateway.controlUi.basePath설정 (예:/openclaw)
기능은 Control UI에 있습니다. 이 페이지는 바인드 모드, 보안 및 웹 대면 서피스에 중점을 둡니다.
웹훅
hooks.enabled=true이면, Gateway는 동일한 HTTP 서버에 소형 웹훅 엔드포인트도 노출합니다.
인증 + 페이로드에 대해서는 Gateway 설정 → hooks를 참조하세요.
설정 (기본 활성화)
Control UI는 에셋이 있으면 (dist/control-ui) 기본적으로 활성화됩니다.
설정을 통해 제어할 수 있습니다:
{
gateway: {
controlUi: { enabled: true, basePath: "/openclaw" }, // basePath 선택사항
},
}
Tailscale 접근
통합 Serve (권장)
Gateway를 루프백에 유지하고 Tailscale Serve가 프록시하도록 합니다:
{
gateway: {
bind: "loopback",
tailscale: { mode: "serve" },
},
}
그런 다음 게이트웨이를 시작합니다:
openclaw gateway
열기:
https://<magicdns>/(또는 설정된gateway.controlUi.basePath)
Tailnet 바인딩 + 토큰
{
gateway: {
bind: "tailnet",
controlUi: { enabled: true },
auth: { mode: "token", token: "your-token" },
},
}
그런 다음 게이트웨이를 시작합니다 (비루프백 바인딩에는 토큰 필요):
openclaw gateway
열기:
http://<tailscale-ip>:18789/(또는 설정된gateway.controlUi.basePath)
공개 인터넷 (Funnel)
{
gateway: {
bind: "loopback",
tailscale: { mode: "funnel" },
auth: { mode: "password" }, // 또는 OPENCLAW_GATEWAY_PASSWORD
},
}
보안 참고사항
- Gateway 인증은 기본적으로 필수입니다 (토큰/비밀번호 또는 Tailscale 신원 헤더).
- 비루프백 바인딩에도 공유 토큰/비밀번호가 필요합니다 (
gateway.auth또는 환경 변수). - 마법사가 기본적으로 게이트웨이 토큰을 생성합니다 (루프백에서도).
- UI는
connect.params.auth.token또는connect.params.auth.password를 전송합니다. - 비루프백 Control UI 배포의 경우,
gateway.controlUi.allowedOrigins를 명시적으로 설정하세요 (전체 오리진). 이를 설정하지 않으면 게이트웨이 시작이 기본적으로 거부됩니다. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true는 Host 헤더 오리진 폴백 모드를 활성화하지만, 위험한 보안 저하입니다.- Serve를 사용하면
gateway.auth.allowTailscale이true일 때 Tailscale 신원 헤더로 Control UI/WebSocket 인증을 충족할 수 있습니다 (토큰/비밀번호 불필요). HTTP API 엔드포인트는 여전히 토큰/비밀번호가 필요합니다. 명시적 자격 증명을 요구하려면gateway.auth.allowTailscale: false를 설정하세요. Tailscale 및 보안을 참조하세요. 이 토큰리스 흐름은 게이트웨이 호스트가 신뢰할 수 있다고 가정합니다. gateway.tailscale.mode: "funnel"은gateway.auth.mode: "password"(공유 비밀번호)가 필요합니다.
UI 빌드
Gateway는 dist/control-ui의 정적 파일을 제공합니다. 다음으로 빌드하세요:
pnpm ui:build # 첫 실행 시 UI 의존성 자동 설치