Get started

เวิร์กเกอร์บนคลาวด์

Status: active

Cloud workers ช่วยให้เซสชันเรียกใช้ลูปเอเจนต์บนเครื่องคลาวด์แบบใช้แล้วทิ้ง ขณะที่ทุกอย่างเกี่ยวกับเซสชันยังคงอยู่ในตำแหน่งเดิมเสมอ ได้แก่ มองเห็นได้ในแถบด้านข้าง สตรีมแบบสด และทรานสคริปต์อยู่ภายใต้การดูแลของ Gateway โดย Gateway จะเช่ากล่อง ติดตั้ง OpenClaw สำเนาที่ตรึงเวอร์ชันไว้ ซิงค์เวิร์กสเปซของเซสชันไปยังกล่อง และส่งมอบลูปของเทิร์นให้แก่กระบวนการ openclaw worker ที่ถูกจำกัด การเรียกโมเดลจะถูกพร็อกซีกลับผ่าน Gateway ดังนั้นข้อมูลประจำตัวของผู้ให้บริการจะไม่ออกจากเครื่องของคุณ และการแคชพรอมต์ยังคงทำงานได้เพราะผู้ให้บริการมองเห็นสตรีมเดียวที่ต่อเนื่อง

เมื่องานเสร็จสิ้น (หรือกล่องหยุดทำงาน) เครื่องจะถูกทิ้ง สถานะถาวร ได้แก่ ทรานสคริปต์ คอมมิตของเวิร์กสเปซ และระเบียนการจัดวาง จะอยู่กับ Gateway

สิ่งใดทำงานที่ใด

ประเด็น ตำแหน่ง
ลูปเอเจนต์ + เครื่องมือ (exec, read, write, edit, …) กล่อง Cloud worker
การอนุมานโมเดลและข้อมูลประจำตัวของผู้ให้บริการ Gateway (พร็อกซีโดยการอ้างอิง {provider, model})
ทรานสคริปต์ (ถาวร, ที่เก็บเซสชัน) Gateway
การสตรีมสดเข้าสู่แถบด้านข้าง การกระจายสัญญาณของ Gateway ซึ่งรับข้อมูลจากสตรีมเหตุการณ์ที่เล่นซ้ำได้ของ worker
ประวัติ Git ของเวิร์กสเปซ สร้างบนกล่องโดยไม่มีข้อมูลประจำตัว; Gateway รับช่วงคอมมิตและเป็นผู้ดำเนินการ push/PR

กล่องไม่จำเป็นต้องมีพอร์ตขาเข้า ยกเว้น sshd: Gateway เชื่อมต่อออกผ่าน SSH ที่ตรึงไว้ และอุโมงค์ย้อนกลับจะนำ WebSocket ของ worker กลับมา ผู้ให้บริการ Crabbox ที่รวมมาให้บังคับใช้เส้นทาง SSH สาธารณะและปิดใช้การลงทะเบียน Tailscale แบบจัดการ การเข้าถึงอินเทอร์เน็ตขาออกขึ้นอยู่กับนโยบายของผู้ให้บริการ โดยโปรไฟล์ AWS เริ่มต้นสามารถเข้าถึงอินเทอร์เน็ตได้ เว้นแต่คุณจะจำกัดเครือข่ายหรือกลุ่มความปลอดภัยของโปรไฟล์

ข้อกำหนด

  • Plugin ผู้ให้บริการ worker Plugin crabbox ที่รวมมาให้ควบคุม CLI ของ Crabbox ซึ่งเป็นตัวกลางสำหรับการเช่าเครื่องจากแบ็กเอนด์คลาวด์ต่าง ๆ (AWS, Hetzner และอื่น ๆ) ไบนารี crabbox ต้องอยู่ใน PATH (หรือตั้งค่า settings.binary) โดยกำหนดค่าข้อมูลประจำตัวของผู้ให้บริการไว้แล้ว การรับเข้า AWS ต้องใช้ Crabbox 0.38.1 หรือใหม่กว่า
  • สำหรับ worker ของ Crabbox AWS ค่า aws.instanceProfile ที่มีผลต้องว่างเปล่า ผู้ให้บริการจะตรวจสอบ crabbox config show --json ก่อนจัดสรร จากนั้นกำหนดให้ crabbox inspect --json รายงาน providerMetadata.instanceProfileAttached: false จาก EC2 DescribeInstances การเช่าที่มีบทบาทอินสแตนซ์หรือไม่มีเมทาดาทาที่เชื่อถือได้จะถูกหยุดและปฏิเสธ
  • Node.js บนเครื่องที่เช่า อิมเมจคลาวด์พื้นฐานมักไม่มี Node.js ให้ติดตั้งผ่านคำสั่ง setup ของโปรไฟล์
  • เซสชันที่มี managed worktree ซึ่งเซสชันเป็นเจ้าของ (สร้างด้วย worktree: true) การจัดส่งจะย้ายเนื้อหาของ worktree นั้น ส่วนไดเรกทอรีทั่วไปจะซิงค์เป็นสำเนามิเรอร์ตามแมนิเฟสต์

การกำหนดค่า

เพิ่มโปรไฟล์ภายใต้ cloudWorkers.profiles ใน openclaw.json:

json
{  "cloudWorkers": {    "profiles": {      "aws": {        "provider": "crabbox",        "install": "bundle",        "settings": {          "provider": "aws",          "class": "standard",          "ttl": "8h",          "idleTimeout": "45m",          "setup": "test -x /usr/bin/node || (curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs)"        }      }    }  }}

ฟิลด์ของโปรไฟล์:

คีย์ ความหมาย
provider ID ผู้ให้บริการ worker ที่ Plugin ลงทะเบียนไว้ (crabbox สำหรับ Plugin ที่รวมมาให้)
install bundle (ค่าเริ่มต้น) ส่งบิลด์ของ Gateway ที่กำลังทำงาน; npm ติดตั้ง Gateway เวอร์ชันรีลีสที่ตรงกันทุกประการพร้อมตรึงค่าความถูกต้อง npm กำหนดให้ Gateway ทำงานจากรีลีสที่จัดแพ็กเกจไว้
settings JSON ที่ผู้ให้บริการเป็นเจ้าของ สำหรับ crabbox: provider (แบ็กเอนด์), class (คลาสเครื่อง), ttl, idleTimeout (ระยะเวลาแบบ Go), setup ที่ระบุหรือไม่ก็ได้ และพาธสัมบูรณ์ binary OpenClaw บังคับใช้ SSH สาธารณะและปิดใช้ Tailscale แบบจัดการสำหรับการเช่าเหล่านี้
lifetime นโยบายที่จัดเก็บไว้ซึ่งระบุหรือไม่ก็ได้ (idleTimeoutMinutes, maxLifetimeMinutes)

คำสั่งตั้งค่า

settings.setup ทำงานบนกล่องที่เช่าหลังจาก SSH พร้อมใช้งานและก่อนติดตั้ง OpenClaw คำสั่งนี้ทำงานในความพยายามจัดเตรียม ทุกครั้ง (รวมถึงการเล่นซ้ำหลังจากการจัดส่งถูกขัดจังหวะ) ดังนั้นจึงต้องทำงานซ้ำได้โดยให้ผลลัพธ์เดิม — ป้องกันการติดตั้งด้วยการตรวจสอบ command -v/test -x ดังตัวอย่าง หากการตั้งค่าล้มเหลว ผู้ให้บริการจะหยุดการเช่าและการจัดส่งจะล้มเหลวแบบปิดกั้น โดยจะไม่ปล่อยให้กล่องที่กำหนดค่าไม่สมบูรณ์ยังทำงานอยู่

ช่องทางการติดตั้ง

  • bundle จัดแพ็ก dist ของ Gateway ที่กำลังทำงาน, package.json ที่ตัดส่วนไม่จำเป็นออก และแพ็กเกจเวิร์กสเปซใด ๆ ที่บิลด์อ้างอิง โดยทั้งหมดครอบคลุมด้วยแฮชเนื้อหา กล่องจะตรวจสอบบันเดิลดั้งเดิมเทียบกับแฮชดังกล่าว แล้วติดตั้งดีเพนเดนซี npm สำหรับโปรดักชัน (ปิดใช้สคริปต์) วิธีนี้ใช้สำหรับเรียกใช้บิลด์สำหรับการพัฒนาบน worker
  • npm ยืนยันว่ามีรีลีสอยู่ในรีจิสทรีสาธารณะ ตรึงค่าความถูกต้อง SHA-512 และติดตั้ง openclaw@<version> ที่ตรงกับ Gateway ทุกประการ

การจัดส่งเซสชัน

ใน Control UI ให้เปิด เซสชันใหม่ เลือกเอเจนต์ที่กำหนดค่ารันไทม์เป็น OpenClaw เลือกเป้าหมาย Cloud · profile ที่กำหนดค่าไว้จากเมนู ตำแหน่ง แล้วเริ่มงาน การเลือก Cloud จะเปิดใช้ managed worktree ที่จำเป็นโดยอัตโนมัติ; Gateway จะสร้างเซสชัน ดำเนินการจัดส่งให้เสร็จ และส่งเทิร์นแรกหลังจากนั้นเท่านั้น ป้ายเซิร์ฟเวอร์ในแถบด้านข้างของเซสชันแสดงสถานะการจัดวางถาวร เป้าหมาย Cloud จะไม่มีให้เลือกสำหรับแค็ตตาล็อกเซสชัน CLI ภายนอก

โฟลว์ RPC ที่เทียบเท่าคือ:

สร้างเซสชันพร้อม managed worktree แล้วจัดส่งเซสชัน (RPC ต้องใช้ operator.admin และจะมีอยู่เมื่อกำหนดค่าโปรไฟล์แล้วเท่านั้น):

Cloud workers เรียกใช้รันไทม์เอเจนต์ OpenClaw เลือก openai/* หรือโมเดลอื่นที่แก้ไขไปยังรันไทม์ดังกล่าว; เซสชันที่กำหนดค่าให้ใช้รันไทม์ CLI ภายนอก เช่น claude-cli ไม่สามารถจัดส่งได้

bash
openclaw gateway call sessions.create \  --params '{"key":"agent:main:big-refactor","worktree":true,"cwd":"/path/to/repo","worktreeName":"big-refactor"}' openclaw gateway call sessions.dispatch \  --timeout 1500000 \  --params '{"key":"agent:main:big-refactor","profileId":"aws"}'

sessions.dispatch ปิดการรับเทิร์นในเครื่อง รอให้งานที่ทำอยู่เสร็จ จัดเตรียมการเช่า เรียกใช้การตั้งค่า บูตสแตรป OpenClaw ซิงค์เวิร์กสเปซ และส่งคืนเมื่อการจัดวางไปถึงการเป็นเจ้าของโดย worker ในสถานะ active ควรเผื่อเวลาหลายนาทีสำหรับการจัดส่งครั้งแรก; ระบบจะแคชการเช่าและการติดตั้งเมื่อผู้ให้บริการรองรับ หลังจากนั้นให้โต้ตอบกับเซสชันตามปกติ โดยเทิร์นจะถูกกำหนดเส้นทางไปยัง worker โดยอัตโนมัติ

เทิร์นของ worker ที่เสร็จสมบูรณ์จะปรับข้อมูลไฟล์เวิร์กสเปซที่เข้าเกณฑ์และมีขนาดไม่เกินขีดจำกัดกลับเข้าสู่ managed worktree ของเซสชัน ก่อนปล่อยการอ้างสิทธิ์เทิร์น เหตุการณ์ worker สุดท้ายจะสร้างแนวกั้นผลลัพธ์ที่รอดำเนินการแบบถาวรก่อนมีการตอบรับ ดังนั้นการกู้คืนหลัง Gateway เริ่มระบบใหม่จะดึงเวิร์กสเปซระยะไกลกลับมาก่อนที่การล้างเทิร์นเก่าจะทำลายเจ้าของ การปรับข้อมูลจะตรวจสอบสิทธิ์แมนิเฟสต์ของ worker และหยุดเมื่อข้อมูลในเครื่องแตกต่างออกไป แทนที่จะเขียนทับฝ่ายใดฝ่ายหนึ่ง ก่อนเปลี่ยนแปลงไฟล์ Gateway จะจัดเก็บบันทึกย้อนกลับที่มีขนาดจำกัดไว้ในฐานข้อมูลสถานะ SQLite; การลองใหม่จะกู้คืนบันทึกดังกล่าวหลังจากกระบวนการ Gateway ถูกขัดจังหวะ ผลลัพธ์เวิร์กสเปซใช้ความหมายของไฟล์แบบ Git ได้แก่ เก็บรักษาไฟล์ปกติ บิตเรียกทำงาน symlink การเพิ่ม การเปลี่ยนแปลง และการลบ ส่วนไดเรกทอรีว่างและโหมดไดเรกทอรีอื่นจะไม่ถูกเก็บรักษา ออบเจ็กต์คอมมิตระยะไกลจะไม่ถูกเก็บรักษา; การเปลี่ยนแปลงไฟล์ที่ได้จะยังคงอยู่ใน managed worktree เพื่อการตรวจสอบและคอมมิตตามปกติ

เมื่องานเสร็จสมบูรณ์และไม่มีเทิร์นกำลังทำงาน ให้เปิดเมนูเซสชันแล้วเลือก หยุด Cloud worker… Gateway จะปรับข้อมูลเวิร์กสเปซครั้งสุดท้ายก่อนทำลายสภาพแวดล้อม การจัดวางที่อยู่ใน draining หรือ reconciling กำลังดำเนินการรื้อถอนให้เสร็จสิ้น; รอจนป้ายเปลี่ยนเป็น reclaimed ก่อนลบเซสชัน

สำหรับ worker ที่เชื่อมต่ออยู่แต่เสียหายหรือทำงานควบคุมไม่ได้ ผู้ปฏิบัติงานสามารถเรียก environments.destroy พร้อม { "force": true } เป็นทางเลือกสุดท้าย การรื้อถอนแบบบังคับจะทำเครื่องหมายการจัดวางว่าล้มเหลวอย่างถาวร และละทิ้งผลลัพธ์ระยะไกลที่ยังไม่ได้ปรับข้อมูลก่อนทำลายสภาพแวดล้อม

RPC สำหรับการดูแลระบบที่เทียบเท่าคือ:

bash
openclaw gateway call sessions.reclaim \  --timeout 600000 \  --params '{"key":"agent:main:big-refactor"}'

การจัดวางจะเคลื่อนผ่านเครื่องสถานะถาวร (local → requested → provisioning → syncing → starting → active) ดังนั้นหาก Gateway เริ่มระบบใหม่ระหว่างการจัดส่ง ระบบจะปรับข้อมูลแทนที่จะปล่อยให้เครื่องรั่วไหล เทิร์นโมเดลที่ล้มเหลวจะคงการจัดวางที่ใช้งานอยู่ไว้เพื่อให้ลองใหม่ได้ หากการปรับข้อมูลเวิร์กสเปซขาเข้าล้มเหลว worker จะยังคงทำงานอยู่เช่นกัน เพื่อให้ผู้ปฏิบัติงานแก้ไขความขัดแย้งในเครื่องและลองใหม่โดยไม่สูญเสียผลลัพธ์ระยะไกล; ส่วนความล้มเหลวของวงจรชีวิตจะย้ายการจัดวางไปยังสถานะข้อผิดพลาดหรือเรียกคืนแล้ว และเก็บส่วนท้ายของข้อมูลวินิจฉัยไว้

โมเดลความปลอดภัย

  • ปิดการรับข้อมูลขาเข้าของ worker Worker สื่อสารด้วยโปรโตคอลเฉพาะบนซ็อกเก็ตที่ผ่านอุโมงค์ โดยมีรายการอนุญาตเมธอดแบบปิด — worker ไม่สามารถเรียก RPC ของผู้ปฏิบัติงานได้
  • ออกข้อมูลประจำตัวใหม่และจัดเก็บแบบแฮช การจัดส่งแต่ละครั้งจะออกข้อมูลประจำตัวของ worker; Gateway จัดเก็บเฉพาะค่าแฮช การหมุนเวียนข้อมูลประจำตัวและการกั้นด้วยยุคของเจ้าของรับประกันว่ามีเจ้าของที่ใช้งานอยู่ได้ไม่เกินหนึ่งรายต่อเซสชัน — worker เก่าที่เชื่อมต่อใหม่จะถูกกั้นออกและไม่ถูกผสาน
  • การตรึงคีย์โฮสต์ ผู้ให้บริการต้องเปิดเผยคีย์โฮสต์ SSH ของกล่องขณะจัดเตรียม; การบูตสแตรปจะเชื่อมต่อโดยตรึงคีย์อย่างเข้มงวดและล้มเหลวแบบปิดกั้นหากไม่มีคีย์ดังกล่าว
  • ไม่มีข้อมูลประจำตัวของโมเดล แพลตฟอร์มซอร์สโค้ด หรือคลาวด์ค้างอยู่บนกล่อง การยืนยันตัวตนของโมเดลจะอยู่บน Gateway (การอนุมานเดินทางโดยการอ้างอิง {provider, model}) คอมมิต Git ของเวิร์กสเปซจะถูกสร้างโดยไม่มีข้อมูลประจำตัวของแพลตฟอร์มซอร์สโค้ด และเมทาดาทาการเช่า Crabbox AWS จะถูกตรวจสอบกับแหล่งข้อมูลที่เชื่อถือได้ว่ามีบทบาทอินสแตนซ์หรือไม่ก่อนตั้งค่า คำสั่งตั้งค่าต้องไม่มีข้อมูลประจำตัวเช่นกัน
  • การรับส่งข้อมูลขาออกที่ผู้ให้บริการเป็นเจ้าของ อุโมงค์ย้อนกลับทำให้ OpenClaw ไม่จำเป็นต้องเข้าถึงโมเดลโดยตรง แต่ OpenClaw จะไม่เขียนกฎไฟร์วอลล์ของผู้ให้บริการใหม่ จำกัดการรับส่งข้อมูลขาออกในผู้ให้บริการ worker เมื่องานกำหนดให้ต้องทำ
  • ทรานสคริปต์ถาวรแบบครั้งเดียวพอดี Worker คอมมิตชุดทรานสคริปต์ผ่านโปรโตคอลเปรียบเทียบและสลับกับ leaf ของเซสชัน; ฐานที่เก่าจะหยุดการทำงานทันที แทนที่จะทำซ้ำหรือ rebase เอาต์พุตที่มีค่าใช้จ่าย

การแก้ไขปัญหา

  • sessions.dispatch เป็นเมธอดที่ไม่รู้จัก — ไม่มีการกำหนดค่า cloudWorkers.profiles หรือผู้เรียกไม่มี operator.admin
  • "เทิร์นของ Cloud worker ต้องใช้รันไทม์ OpenClaw" — เลือกโมเดลที่กำหนดค่ารันไทม์เป็น OpenClaw รันไทม์ CLI ภายนอก เช่น claude-cli ไม่รองรับการอนุมานของ worker
  • "การบูตสแตรป worker ต้องใช้ Node.js บนโฮสต์ที่เช่า" — เพิ่มการติดตั้ง Node ลงใน settings.setup (ดูด้านบน)
  • การรับรองบทบาทอินสแตนซ์ AWS ล้มเหลว — ล้าง aws.instanceProfile (และ CRABBOX_AWS_INSTANCE_PROFILE หากตั้งค่าไว้) ติดตั้ง Crabbox 0.38.1 หรือใหม่กว่า ไบนารีรุ่นเก่าไม่เปิดเผยสัญญา providerMetadata.instanceProfileAttached ที่เป็นแหล่งข้อมูลหลักซึ่งจำเป็นสำหรับการรับเข้า AWS
  • การส่งงานล้มเหลวพร้อมข้อผิดพลาดจากผู้ให้บริการ — ระเบียนการจัดวางและ environments.list จะเก็บข้อผิดพลาดล่าสุด รวมถึงส่วนท้ายของ stderr จากการตั้งค่า/บูตสแตรป Box จะถูกทำลายเมื่อเกิดความล้มเหลว ดังนั้นส่วนท้ายดังกล่าวจึงเป็นหลักฐานนิติพิสูจน์หลัก
  • ไคลเอนต์หมดเวลาขณะส่งงานopenclaw gateway call ใช้ค่าเริ่มต้นเป็นการหมดเวลา 10s โปรดกำหนด --timeout ให้มากเพียงพอ (การส่งงานจะยังคงทำงานต่อที่ฝั่งเซิร์ฟเวอร์ไม่ว่าอย่างไรก็ตาม และการลองใหม่ระหว่างการจัดเตรียมจะถูกปฏิเสธด้วย session cannot dispatch from placement provisioning)
  • การดูแลรักษา leasecrabbox list --provider <backend> แสดง lease ที่ยังใช้งานอยู่ ส่วน crabbox stop --provider <backend> --id <lease> ใช้ปล่อย lease หนึ่งรายการด้วยตนเอง lease ที่ไม่มีการใช้งานจะหมดอายุตาม idleTimeout ของโปรไฟล์

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page