ข้ามไปยังเนื้อหา

เชื่อมต่อเซิร์ฟเวอร์ระยะไกล

ไคลเอนต์ทุกตัวเป็นตัวเรนเดอร์บน cc_server ที่เป็นเจ้าของข้อมูล เดสก์ท็อปสามารถ รันหนึ่งตัวไว้ในตัวเองได้ ส่วนเว็บแอปที่ app.usectrl.dev ทำไม่ได้ เพราะแท็บเบราว์เซอร์โฮสต์เซิร์ฟเวอร์ไม่ได้ ไม่ว่าจะทางใด คู่มือนี้จะชี้ ไคลเอนต์ไปยังเซิร์ฟเวอร์ที่รันอยู่ที่อื่น — เครื่องเล็ก ๆ เครื่อง VM บนคลาวด์ หรือเครื่องบิลด์

  • cc_server ที่รันอยู่ หากยังไม่มี ดูรันเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ
  • อย่างใดอย่างหนึ่งในสองอย่างนี้: ค่าจับคู่สามค่าที่เซิร์ฟเวอร์สร้างขึ้น — URL ของเซิร์ฟเวอร์ (ws://…/rpc หรือ wss://…/rpc) ID อุปกรณ์ และ คีย์จับคู่ — หรือ รหัสเชิญแบบใช้ครั้งเดียวจากแอดมินเวิร์กสเปซ การแลกรับรหัสเชิญจะจัดเตรียมผู้ใช้ของคุณ บันทึกสมาชิกภาพของคุณ และสร้างข้อมูลรับรองของไคลเอนต์นี้ให้คุณ คุณจึงไม่ต้องจัดการ ID อุปกรณ์หรือคีย์เอง

เซิร์ฟเวอร์ในเครื่องไม่ต้องทำอะไรเพิ่ม: ws://localhost:9030/rpc ใช้ได้ทั้งจาก เดสก์ท็อปและเบราว์เซอร์ เพราะเบราว์เซอร์ถือว่าลูปแบ็กเป็นต้นทางที่เชื่อถือได้

เซิร์ฟเวอร์บนเครื่องอื่นนั้นต่างออกไป app.usectrl.dev ให้บริการผ่าน HTTPS เบราว์เซอร์จึงจะเปิดซ็อกเก็ต wss:// ได้เฉพาะกับใบรับรองที่มันเชื่อถืออยู่แล้ว — และ cc_server ก็ปฏิเสธที่จะผูกที่อยู่ที่ไม่ใช่ลูปแบ็กหากไม่มี TLS ตั้งแต่แรก ให้อย่างใดอย่างหนึ่งกับมัน:

  • ใบรับรองโดยตรง ด้วย --tls-cert และ --tls-key
  • รีเวิร์สพร็อกซีที่ยุติ TLS ไว้ข้างหน้า โดยเริ่มเซิร์ฟเวอร์ด้วย --insecure (ข้อความธรรมดาอยู่หลังพร็อกซี บนเครือข่ายที่เชื่อถือได้เท่านั้น)
  • ทันเนลหรือ VPN ที่ให้ใบรับรองมา — Tailscale, cloudflared หรือทำนองเดียวกัน การตั้งค่า → เซิร์ฟเวอร์ → การเชื่อมต่อและสถานะ มีการเลือกใช้ทันเนลในตัวอยู่ใต้ แชร์เซิร์ฟเวอร์นี้

มีการตั้งค่าสองอย่างฝั่งเซิร์ฟเวอร์ที่มองข้ามได้ง่าย หลังพร็อกซี NAT หรือทันเนล ให้ตั้ง --public-url เป็นที่อยู่ที่ไคลเอนต์ควรต่อจริง ๆ — ค่าเริ่มต้นคือการผูก ในเครื่อง ถ้าไม่ตั้ง ไคลเอนต์ก็จะลองโฮสต์ที่ผิด และถ้าคุณโฮสต์สำเนาบิลด์เว็บของ ตัวเอง ให้เพิ่มออริจินของมันใน --allowed-origins ซึ่งค่าเริ่มต้นมีแค่ https://app.usectrl.dev เท่านั้น ส่วนลูปแบ็กและไคลเอนต์เนทีฟได้รับอนุญาตเสมอ

เมื่อติดตั้งใหม่:

  1. เปิด Control Center หน้าจอเปิดใช้ครั้งแรกจะถามว่า Control Center ควรรันอย่างไร?
  2. แทนที่จะเลือก รันในแอปนี้ ให้กรอกช่องเชื่อมต่อ: URL ของเซิร์ฟเวอร์ พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่
  3. คลิก เชื่อมต่อ Control Center จะต่อไปยังเซิร์ฟเวอร์และไปลงที่กล่องขาเข้าของเวิร์กสเปซ

บนเดสก์ท็อปที่รันเซิร์ฟเวอร์ของตัวเองอยู่แล้ว:

  1. เปิด การตั้งค่า → เซิร์ฟเวอร์ → การเชื่อมต่อและสถานะ
  2. คลิก เพิ่มเซิร์ฟเวอร์ กรอก URL ของเซิร์ฟเวอร์ (wss://host:9030/rpc) พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่ ปุ่มต่อท้ายช่อง URL จะค้นหาอินสแตนซ์ cc_server ใน LAN หรือ tailnet ของคุณ
  3. คลิก เชื่อมต่อ แล้วคลิก สลับ ที่แถวของเซิร์ฟเวอร์ใหม่

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

เมื่อสลับแล้ว เดสก์ท็อปจะไม่ถือฐานข้อมูลใด ๆ ทุกหน้าจออ่านและเขียน ผ่านเซิร์ฟเวอร์ระยะไกลบน WebSocket

บิลด์เว็บเป็นแบบระยะไกลเสมอ

  1. เปิด app.usectrl.dev หรือสำเนาบิลด์เว็บของคุณเอง
  2. กรอก URL ของเซิร์ฟเวอร์ พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่
  3. ไคลเอนต์จะต่อไปยังเซิร์ฟเวอร์และเรนเดอร์ส่วนติดต่อเดียวกับที่เดสก์ท็อปใช้

ถ้ามีลิงก์แบบดีพสำหรับจับคู่อยู่ใน URL ช่องต่าง ๆ จะถูกกรอกไว้ล่วงหน้า คีย์จับคู่จะเดินทางในแฟรกเมนต์ของ URL ซึ่งเบราว์เซอร์ไม่เคยส่งไปยัง เซิร์ฟเวอร์ที่โฮสต์หน้าเว็บ โฮสต์สแตติกจึงไม่เคยเห็นมัน

ไคลเอนต์เว็บอ่านและเขียนเซิร์ฟเวอร์เดียวกับเดสก์ท็อป แต่มีพื้นผิวไม่กี่อย่าง ที่ต้องใช้หน้าต่างเนทีฟหรืออุปกรณ์ของเครื่องเอง:

  • ไม่มีทอสต์แจ้งเตือนของระบบ เสียงแจ้งเตือน หรือแถบแบนเนอร์แบบแวดล้อม (ศูนย์แจ้งเตือนในแอปยังใช้ได้)
  • ไม่มีการค้นหาเซิร์ฟเวอร์ใน LAN หรือ tailnet ในกล่องโต้ตอบ เพิ่มเซิร์ฟเวอร์
  • ไม่มีตัวอ่านบทความในแอป — บทความในฟีดข่าวเปิดในแท็บใหม่
  • ไม่มีการรันสรุปการประชุมซ้ำ และไม่มีการยกเลิกอันที่กำลังประมวลผลอยู่

สองอย่างทำงานต่างออกไปแทนที่จะหายไป การบันทึกการประชุมใช้ได้ในเบราว์เซอร์ โดยจับไมโครโฟนของคุณบวกกับการแชร์หน้าจอที่มีแทร็กเสียง เปิดใน IDE ก็ใช้ได้ เช่นกัน แต่จะขอให้เซิร์ฟเวอร์เปิดตัวแก้ไขบนจอของ เซิร์ฟเวอร์ ปุ่มจึงซ่อนตัวเอง เมื่อเจอโฮสต์แบบไม่มีส่วนติดต่อที่ไม่ได้ติดตั้งตัวแก้ไขไว้

  • การเชื่อมต่อหมดเวลา: เซิร์ฟเวอร์ต้องเข้าถึงได้จากไคลเอนต์ ตรวจสอบการผูก (--bind any) ว่าพอร์ตเปิดอยู่ และ --public-url ระบุที่อยู่ที่ไคลเอนต์ต่อได้จริง บนอินเทอร์เน็ตเปิด TLS เป็นสิ่งบังคับ — การผูกแบบข้อความธรรมดาที่ไม่ใช่ลูปแบ็กจะถูกปฏิเสธตอนเริ่ม เว้นแต่จะเริ่มเซิร์ฟเวอร์ด้วย --insecure ไว้หลังพร็อกซี
  • เบราว์เซอร์ไม่ยอมเชื่อมต่อแต่ไคลเอนต์เนทีฟใช้ได้: ออริจินของเบราว์เซอร์ไม่ได้อยู่ในรายการ --allowed-origins ของเซิร์ฟเวอร์ ค่าเริ่มต้นอนุญาตเฉพาะ https://app.usectrl.dev (บวกลูปแบ็ก)
  • คีย์จับคู่ถูกปฏิเสธ: รัน cc_server pair บนเซิร์ฟเวอร์อีกครั้งเพื่อหมุนคีย์ของอุปกรณ์นั้น แล้วกรอกคีย์ใหม่ อุปกรณ์ที่ถูกเพิกถอนจะไม่พบข้อมูลรับรองและถูกปฏิเสธทันที ส่วนการเพิกถอนจะตัดเซสชันที่ใช้งานอยู่ภายในไม่กี่วินาที
  • เวิร์กสเปซผิด: เวิร์กสเปซเป็นส่วนหนึ่งของ URL (/workspaces/:workspaceId/…) และเดินทางไปกับการเรียกทุกครั้ง การสลับเวิร์กสเปซในไคลเอนต์หนึ่งจึงเปลี่ยนแค่มุมมองของคุณเอง คุณเข้าถึงได้เฉพาะเวิร์กสเปซที่คุณเป็นสมาชิกเท่านั้น — อย่างอื่นจะถูกปฏิเสธด้วยข้อความ “Not a member of this workspace” ดูเวิร์กสเปซและการแยกโดเมน