Gateway
คู่มือปฏิบัติการ Gateway
ใช้หน้านี้สำหรับการเริ่มต้นวันแรกและการปฏิบัติการวันที่สองของบริการ Gateway
การวินิจฉัยตามอาการก่อน พร้อมลำดับคำสั่งที่แน่นอนและรูปแบบลายเซ็นของล็อก
คู่มือตั้งค่าตามงาน + เอกสารอ้างอิงการกำหนดค่าแบบครบถ้วน
สัญญา SecretRef, พฤติกรรมสแนปช็อตขณะรันไทม์ และการดำเนินการย้าย/โหลดใหม่
กฎเป้าหมาย/พาธของ secrets apply ที่แน่นอน และพฤติกรรมโปรไฟล์การยืนยันตัวตนแบบ ref-only
การเริ่มต้นในเครื่องภายใน 5 นาที
เริ่ม Gateway
openclaw gateway --port 18789# debug/trace mirrored to stdioopenclaw gateway --port 18789 --verbose# force-kill listener on selected port, then startopenclaw gateway --forceตรวจสอบสุขภาพของบริการ
openclaw gateway statusopenclaw statusopenclaw logs --followค่าพื้นฐานที่ดี: Runtime: running, Connectivity probe: ok และ Capability: ... ที่ตรงกับสิ่งที่คุณคาดไว้ ใช้ openclaw gateway status --require-rpc เมื่อคุณต้องการหลักฐาน RPC ในขอบเขตการอ่าน ไม่ใช่แค่การเข้าถึงได้
ตรวจสอบความพร้อมของช่องทาง
openclaw channels status --probeเมื่อ Gateway เข้าถึงได้ คำสั่งนี้จะรันการตรวจสอบช่องทางแบบสดต่อบัญชีและการตรวจสอบเพิ่มเติมที่เป็นตัวเลือก หาก Gateway เข้าถึงไม่ได้ CLI จะถอยกลับไปใช้สรุปช่องทางจากการกำหนดค่าเท่านั้นแทน ผลลัพธ์การตรวจสอบแบบสด
โมเดลรันไทม์
- กระบวนการที่เปิดตลอดหนึ่งกระบวนการสำหรับการกำหนดเส้นทาง, control plane และการเชื่อมต่อช่องทาง
- พอร์ตเดียวแบบ multiplex สำหรับ:
- การควบคุม/RPC ผ่าน WebSocket
- HTTP APIs (
/v1/models,/v1/embeddings,/v1/chat/completions,/v1/responses,/tools/invoke) - เส้นทาง HTTP ของ Plugin เช่น
/api/v1/admin/rpcที่เป็นตัวเลือก - Control UI และ hook
- โหมด bind เริ่มต้น:
loopback - ต้องมีการยืนยันตัวตนโดยค่าเริ่มต้น การตั้งค่าแบบ shared-secret ใช้
gateway.auth.token/gateway.auth.password(หรือOPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD) และการตั้งค่า reverse-proxy แบบ 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ก่อน - pipeline ของ RAG และหน่วยความจำจำนวนมากคาดหวัง
/v1/embeddings - ไคลเอนต์แบบ agent-native นิยมใช้
/v1/responsesมากขึ้น
หมายเหตุการวางแผน:
/v1/modelsให้ความสำคัญกับเอเจนต์ก่อน: ส่งคืนopenclaw,openclaw/defaultและopenclaw/<agentId>openclaw/defaultเป็น alias ที่เสถียรซึ่งแมปไปยังเอเจนต์เริ่มต้นที่กำหนดค่าไว้เสมอ- ใช้
x-openclaw-modelเมื่อคุณต้องการ override provider/model ของ backend; มิฉะนั้น การตั้งค่าโมเดลและ embedding ปกติของเอเจนต์ที่เลือกจะยังคงควบคุมอยู่
ทั้งหมดนี้รันบนพอร์ต Gateway หลักและใช้ขอบเขตการยืนยันตัวตนของผู้ปฏิบัติการที่เชื่อถือได้เดียวกันกับส่วนที่เหลือของ Gateway HTTP API
Admin HTTP RPC (POST /api/v1/admin/rpc) เป็นเส้นทาง Plugin แยกต่างหากที่ปิดโดยค่าเริ่มต้น สำหรับเครื่องมือโฮสต์ที่ใช้ WebSocket RPC ไม่ได้ ดู Admin HTTP RPC
ลำดับความสำคัญของพอร์ตและ bind
| การตั้งค่า | ลำดับการแก้ค่า |
|---|---|
| พอร์ต Gateway | --port → OPENCLAW_GATEWAY_PORT → gateway.port → 18789 |
| โหมด Bind | CLI/override → gateway.bind → loopback |
บริการ Gateway ที่ติดตั้งแล้วจะบันทึก --port ที่แก้ค่าแล้วไว้ใน metadata ของ supervisor หลังจากเปลี่ยน gateway.port ให้รัน openclaw doctor --fix หรือ openclaw gateway install --force เพื่อให้ launchd/systemd/schtasks เริ่มกระบวนการบนพอร์ตใหม่
การเริ่มต้น Gateway ใช้พอร์ตและ bind ที่มีผลเดียวกันเมื่อ seed origin ของ
Control UI ในเครื่องสำหรับ bind แบบ non-loopback ตัวอย่างเช่น --bind lan --port 3000
จะ seed http://localhost:3000 และ http://127.0.0.1:3000 ก่อนที่การตรวจสอบ
รันไทม์จะรัน เพิ่ม origin ของเบราว์เซอร์ระยะไกล เช่น HTTPS proxy URLs ลงใน
gateway.controlUi.allowedOrigins อย่างชัดเจน
โหมด hot reload
gateway.reload.mode |
พฤติกรรม |
|---|---|
off |
ไม่มีการโหลดการกำหนดค่าใหม่ |
hot |
ใช้เฉพาะการเปลี่ยนแปลงที่ปลอดภัยสำหรับ hot reload |
restart |
รีสตาร์ตเมื่อมีการเปลี่ยนแปลงที่ต้องโหลดใหม่ด้วยการรีสตาร์ต |
hybrid (ค่าเริ่มต้น) |
ใช้ hot-apply เมื่อปลอดภัย และรีสตาร์ตเมื่อจำเป็น |
ชุดคำสั่งสำหรับผู้ปฏิบัติการ
openclaw gateway statusopenclaw gateway status --deep # adds a system-level service scanopenclaw gateway status --jsonopenclaw gateway installopenclaw gateway restartopenclaw gateway stopopenclaw secrets reloadopenclaw logs --followopenclaw doctorgateway status --deep ใช้สำหรับการค้นพบบริการเพิ่มเติม (LaunchDaemons/หน่วย systemd system
/schtasks) ไม่ใช่การตรวจสอบสุขภาพ RPC ที่ลึกขึ้น
Gateway หลายตัว (โฮสต์เดียวกัน)
การติดตั้งส่วนใหญ่ควรรันหนึ่ง Gateway ต่อเครื่อง Gateway เดียวสามารถโฮสต์ เอเจนต์และช่องทางได้หลายรายการ
คุณต้องมี Gateway หลายตัวเฉพาะเมื่อคุณตั้งใจต้องการการแยกส่วนหรือบอทกู้คืน
การตรวจสอบที่มีประโยชน์:
openclaw gateway status --deepopenclaw gateway probeสิ่งที่คาดหวัง:
gateway status --deepอาจรายงานOther gateway-like services detected (best effort)และพิมพ์คำแนะนำการล้างข้อมูลเมื่อยังมีการติดตั้ง launchd/systemd/schtasks เก่าค้างอยู่gateway probeอาจเตือนเกี่ยวกับmultiple reachable gateway identitiesเมื่อ Gateway ที่แตกต่างกันตอบกลับ หรือเมื่อ OpenClaw พิสูจน์ไม่ได้ว่าเป้าหมายที่เข้าถึงได้เป็น Gateway เดียวกัน SSH tunnel, proxy URL หรือ URL ระยะไกลที่กำหนดค่าไว้ไปยัง Gateway เดียวกันนับเป็น Gateway เดียวที่มีหลาย transport แม้พอร์ต transport จะแตกต่างกัน- หากเป็นความตั้งใจ ให้แยกพอร์ต, config/state และ workspace root ต่อ Gateway
รายการตรวจสอบต่อ instance:
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 19001OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b openclaw gateway --port 19002การตั้งค่าโดยละเอียด: /gateway/multiple-gateways
การเข้าถึงระยะไกล
แนะนำ: Tailscale/VPN ทางเลือกสำรอง: SSH tunnel
ssh -N -L 18789:127.0.0.1:18789 user@hostจากนั้นเชื่อมต่อไคลเอนต์ภายในเครื่องไปที่ ws://127.0.0.1:18789
ดู: Remote Gateway, Authentication, Tailscale
การควบคุมดูแลและวงจรชีวิตบริการ
ใช้การรันแบบมี supervisor เพื่อความน่าเชื่อถือระดับใกล้ production
macOS (launchd)
openclaw gateway installopenclaw gateway statusopenclaw gateway restartopenclaw gateway stopใช้ openclaw gateway restart สำหรับการรีสตาร์ต อย่าต่อคำสั่ง openclaw gateway stop และ openclaw gateway start เพื่อใช้แทนการรีสตาร์ต
บน macOS, gateway stop ใช้ launchctl bootout โดยค่าเริ่มต้น — การดำเนินการนี้ลบ LaunchAgent ออกจากเซสชันบูตปัจจุบันโดยไม่บันทึกการปิดใช้งานถาวร ดังนั้นการกู้คืนอัตโนมัติของ KeepAlive ยังทำงานหลังจากเกิดการล่มที่ไม่คาดคิด และ gateway start เปิดใช้งานใหม่ได้อย่างสะอาด หากต้องการระงับการเกิดใหม่อัตโนมัติข้ามการรีบูตแบบถาวร ให้ส่ง --disable: openclaw gateway stop --disable
label ของ LaunchAgent คือ ai.openclaw.gateway (ค่าเริ่มต้น) หรือ ai.openclaw.<profile> (โปรไฟล์ที่มีชื่อ) openclaw doctor ตรวจสอบและซ่อมแซมความคลาดเคลื่อนของการกำหนดค่าบริการ
Linux (systemd user)
openclaw gateway installsystemctl --user enable --now openclaw-gateway[-<profile>].serviceopenclaw gateway statusเพื่อให้คงอยู่หลังออกจากระบบ ให้เปิดใช้ lingering:
sudo loginctl enable-linger <user>ตัวอย่าง user-unit แบบ manual เมื่อคุณต้องการพาธติดตั้งที่กำหนดเอง:
[Unit]Description=OpenClaw GatewayAfter=network-online.targetWants=network-online.target [Service]ExecStart=/usr/local/bin/openclaw gateway --port 18789Restart=alwaysRestartSec=5TimeoutStopSec=30TimeoutStartSec=30SuccessExitStatus=0 143OOMPolicy=continueKillMode=control-group [Install]WantedBy=default.targetWindows (native)
openclaw gateway installopenclaw gateway status --jsonopenclaw gateway restartopenclaw gateway stopการเริ่มต้นที่จัดการโดย Windows native ใช้ Scheduled Task ชื่อ OpenClaw Gateway
(หรือ OpenClaw Gateway (<profile>) สำหรับโปรไฟล์ที่มีชื่อ) หากการสร้าง Scheduled Task
ถูกปฏิเสธ OpenClaw จะถอยกลับไปใช้ตัวเรียกจาก Startup-folder ต่อผู้ใช้
ที่ชี้ไปยัง gateway.cmd ภายในไดเรกทอรีสถานะ
Linux (system service)
ใช้ system unit สำหรับโฮสต์แบบหลายผู้ใช้/เปิดตลอดเวลา
sudo systemctl daemon-reloadsudo systemctl enable --now openclaw-gateway[-<profile>].serviceใช้เนื้อหา service เดียวกับ user unit แต่ติดตั้งไว้ใต้
/etc/systemd/system/openclaw-gateway[-<profile>].service และปรับ
ExecStart= หาก binary openclaw ของคุณอยู่ที่อื่น
อย่าให้ openclaw doctor --fix ติดตั้งบริการ Gateway ระดับผู้ใช้สำหรับโปรไฟล์/พอร์ตเดียวกันด้วย Doctor จะปฏิเสธการติดตั้งอัตโนมัตินั้นเมื่อพบบริการ OpenClaw Gateway ระดับระบบ; ใช้ OPENCLAW_SERVICE_REPAIR_POLICY=external เมื่อ system unit เป็นเจ้าของวงจรชีวิต
เส้นทางด่วนสำหรับโปรไฟล์ Dev
openclaw --dev setupopenclaw --dev gateway --allow-unconfiguredopenclaw --dev statusค่าเริ่มต้นรวมถึง state/config ที่แยกไว้ และพอร์ต Gateway พื้นฐาน 19001
เอกสารอ้างอิงย่อของโปรโตคอล (มุมมองผู้ปฏิบัติการ)
- เฟรมแรกของไคลเอนต์ต้องเป็น
connect - Gateway ส่งคืนสแนปช็อต
hello-ok(presence,health,stateVersion,uptimeMs, limits/policy) hello-ok.features.methods/eventsเป็นรายการค้นพบแบบอนุรักษ์นิยม ไม่ใช่ dump ที่สร้างจากทุกเส้นทาง helper ที่เรียกได้- คำขอ:
req(method, params)→res(ok/payload|error) - เหตุการณ์ทั่วไปประกอบด้วย
connect.challenge,agent,chat,session.message,session.operation,session.tool,sessions.changed,presence,tick,health,heartbeat, เหตุการณ์วงจรชีวิตการจับคู่/การอนุมัติ และshutdown
การรันเอเจนต์มีสองขั้นตอน:
- ack ยอมรับทันที (
status:"accepted") - การตอบกลับเมื่อเสร็จสิ้นสุดท้าย (
status:"ok"|"error") พร้อมเหตุการณ์agentแบบสตรีมระหว่างทาง
ดูเอกสารโปรโตคอลฉบับเต็ม: Gateway Protocol
การตรวจสอบการปฏิบัติการ
ความมีชีวิต
- เปิด WS และส่ง
connect - คาดหวังการตอบกลับ
hello-okพร้อมสแนปช็อต
ความพร้อม
openclaw gateway statusopenclaw channels status --probeopenclaw healthการกู้คืนช่องว่าง
เหตุการณ์จะไม่ถูก replay เมื่อมีช่องว่างของลำดับ ให้รีเฟรชสถานะ (health, system-presence) ก่อนดำเนินการต่อ
รูปแบบความล้มเหลวที่พบบ่อย
| ลายเซ็น | ปัญหาที่เป็นไปได้ |
|---|---|
refusing to bind gateway ... without auth |
ผูกกับที่อยู่ที่ไม่ใช่ loopback โดยไม่มีพาธการยืนยันตัวตนของ Gateway ที่ถูกต้อง |
another gateway instance is already listening / EADDRINUSE |
พอร์ตขัดแย้ง |
Gateway start blocked: set gateway.mode=local |
ตั้งค่าคอนฟิกเป็นโหมดระยะไกล หรือสแตมป์โหมด local หายไปจากคอนฟิกที่เสียหาย |
unauthorized during connect |
การยืนยันตัวตนไม่ตรงกันระหว่างไคลเอนต์กับ Gateway |
สำหรับลำดับขั้นการวินิจฉัยแบบครบถ้วน ให้ใช้ การแก้ไขปัญหา Gateway
การรับประกันด้านความปลอดภัย
- ไคลเอนต์โปรโตคอล Gateway ล้มเหลวอย่างรวดเร็วเมื่อ Gateway ไม่พร้อมใช้งาน (ไม่มี fallback ไปยัง direct-channel โดยนัย)
- เฟรมแรกที่ไม่ถูกต้องหรือไม่ใช่การเชื่อมต่อจะถูกปฏิเสธและปิด
- การปิดระบบอย่างนุ่มนวลจะปล่อยเหตุการณ์
shutdownก่อนปิดซ็อกเก็ต
ที่เกี่ยวข้อง: