เชื่อมต่อเซิร์ฟเวอร์ระยะไกล
ไคลเอนต์ทุกตัวเป็นตัวเรนเดอร์บน 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 เท่านั้น ส่วนลูปแบ็กและไคลเอนต์เนทีฟได้รับอนุญาตเสมอ
เชื่อมต่อแอปเดสก์ท็อป
หัวข้อที่มีชื่อว่า “เชื่อมต่อแอปเดสก์ท็อป”เมื่อติดตั้งใหม่:
- เปิด Control Center หน้าจอเปิดใช้ครั้งแรกจะถามว่า Control Center ควรรันอย่างไร?
- แทนที่จะเลือก รันในแอปนี้ ให้กรอกช่องเชื่อมต่อ: URL ของเซิร์ฟเวอร์ พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่
- คลิก เชื่อมต่อ Control Center จะต่อไปยังเซิร์ฟเวอร์และไปลงที่กล่องขาเข้าของเวิร์กสเปซ
บนเดสก์ท็อปที่รันเซิร์ฟเวอร์ของตัวเองอยู่แล้ว:
- เปิด การตั้งค่า → เซิร์ฟเวอร์ → การเชื่อมต่อและสถานะ
- คลิก เพิ่มเซิร์ฟเวอร์ กรอก URL ของเซิร์ฟเวอร์ (
wss://host:9030/rpc) พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่ ปุ่มต่อท้ายช่อง URL จะค้นหาอินสแตนซ์cc_serverใน LAN หรือ tailnet ของคุณ - คลิก เชื่อมต่อ แล้วคลิก สลับ ที่แถวของเซิร์ฟเวอร์ใหม่
การสลับเกิดทันที: แอปสร้างตัวเองใหม่รอบเซสชันใหม่ในที่ โดยไม่ต้องรีสตาร์ต ถ้าเชื่อมต่อไม่สำเร็จ คุณจะอยู่บนเซิร์ฟเวอร์เดิมและเห็นข้อผิดพลาด แถวของเซิร์ฟเวอร์ที่คุณอยู่จะไม่มีปุ่ม สลับ ส่วนเซิร์ฟเวอร์ในเครื่องคือแถวแรก ที่ติดป้ายว่า รันในแอปนี้
เมื่อสลับแล้ว เดสก์ท็อปจะไม่ถือฐานข้อมูลใด ๆ ทุกหน้าจออ่านและเขียน ผ่านเซิร์ฟเวอร์ระยะไกลบน WebSocket
เชื่อมต่อไคลเอนต์เว็บ
หัวข้อที่มีชื่อว่า “เชื่อมต่อไคลเอนต์เว็บ”บิลด์เว็บเป็นแบบระยะไกลเสมอ
- เปิด app.usectrl.dev หรือสำเนาบิลด์เว็บของคุณเอง
- กรอก URL ของเซิร์ฟเวอร์ พร้อมกับรหัสเชิญ หรือ ID อุปกรณ์และคีย์จับคู่
- ไคลเอนต์จะต่อไปยังเซิร์ฟเวอร์และเรนเดอร์ส่วนติดต่อเดียวกับที่เดสก์ท็อปใช้
ถ้ามีลิงก์แบบดีพสำหรับจับคู่อยู่ใน 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” ดูเวิร์กสเปซและการแยกโดเมน
คู่มือที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “คู่มือที่เกี่ยวข้อง”- รันเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ
- จับคู่อุปกรณ์: เส้นทางรีเลย์ของโทรศัพท์