Get started
เวิร์กเกอร์บนคลาวด์
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จาก EC2DescribeInstancesการเช่าที่มีบทบาทอินสแตนซ์หรือไม่มีเมทาดาทาที่เชื่อถือได้จะถูกหยุดและปฏิเสธ - Node.js บนเครื่องที่เช่า อิมเมจคลาวด์พื้นฐานมักไม่มี Node.js ให้ติดตั้งผ่านคำสั่ง
setupของโปรไฟล์ - เซสชันที่มี managed worktree ซึ่งเซสชันเป็นเจ้าของ (สร้างด้วย
worktree: true) การจัดส่งจะย้ายเนื้อหาของ worktree นั้น ส่วนไดเรกทอรีทั่วไปจะซิงค์เป็นสำเนามิเรอร์ตามแมนิเฟสต์
การกำหนดค่า
เพิ่มโปรไฟล์ภายใต้ cloudWorkers.profiles ใน openclaw.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 สำหรับโปรดักชัน (ปิดใช้สคริปต์) วิธีนี้ใช้สำหรับเรียกใช้บิลด์สำหรับการพัฒนาบน workernpmยืนยันว่ามีรีลีสอยู่ในรีจิสทรีสาธารณะ ตรึงค่าความถูกต้อง 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 ไม่สามารถจัดส่งได้
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 สำหรับการดูแลระบบที่เทียบเท่าคือ:
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) - การดูแลรักษา lease —
crabbox list --provider <backend>แสดง lease ที่ยังใช้งานอยู่ ส่วนcrabbox stop --provider <backend> --id <lease>ใช้ปล่อย lease หนึ่งรายการด้วยตนเอง lease ที่ไม่มีการใช้งานจะหมดอายุตามidleTimeoutของโปรไฟล์
ที่เกี่ยวข้อง
- การแซนด์บ็อกซ์ — ลดขอบเขตผลกระทบจากการเรียกใช้เครื่องมือภายในเครื่อง
- CLI ของเซสชัน — ตรวจสอบเซสชันที่จัดเก็บไว้
- ข้อมูลอ้างอิงการกำหนดค่า