คู่มือการใช้งาน
วิธีแชร์ localhost ของคุณ
ครั้งแรกใช้เวลาประมาณสองนาที
ก่อนเริ่ม
เครื่องที่คุณจะแชร์ต้องมีสองอย่างนี้ก่อน:
- ติดตั้ง Node.js เวอร์ชัน 18 ขึ้นไป เช็กด้วยคำสั่ง: node --version
- โปรเจกต์ของคุณรันอยู่แล้วในเครื่อง คือเปิด http://localhost:3000 (หรือพอร์ตที่คุณใช้) ในเบราว์เซอร์บนเครื่องนั้นแล้วเห็นเว็บ
ต้องพิมพ์คำสั่งพวกนี้ที่ไหน?
ทั้งสองคำสั่งด้านล่างพิมพ์ในเทอร์มินัลบนเครื่องที่รันโปรเจกต์อยู่ ไม่ใช่บนเว็บนี้ และไม่ใช่บนมือถือ
Windows: กดปุ่ม Start พิมพ์ว่า "PowerShell" แล้วเปิดขึ้นมา / macOS: กด Cmd+Space พิมพ์ว่า "Terminal" แล้วเปิด / Linux คุณรู้อยู่แล้ว
ถ้าโปรแกรมเขียนโค้ดของคุณมีเทอร์มินัลในตัว (VS Code กด Ctrl+` หรือเมนู View → Terminal) ใช้อันนั้นสะดวกที่สุด เพราะมันเปิดอยู่ในโฟลเดอร์โปรเจกต์ให้เลย
ขั้นที่ 1 — ล็อกอินจากเครื่องนั้น
ทำอันนี้ก่อนเสมอ การล็อกอินบนเว็บนี้คือการล็อกอินให้เบราว์เซอร์ ไม่ใช่ให้เครื่องคอมของคุณ สองอย่างนี้แยกกัน ทำครั้งเดียวต่อเครื่อง หลังจากนั้นมันจำให้เอง:
npx busymote login
ขั้นที่ 2 — แชร์พอร์ต
เปิดโปรเจกต์ตามปกติ (เช่น npm run dev) แล้วดูว่ามันบอกพอร์ตอะไร ปกติ Next.js จะเป็น 3000 ส่วน Vite เป็น 5173 จากนั้นเปิดเทอร์มินัลอีกหน้าต่าง แล้วชี้ Busymote ไปที่พอร์ตนั้น:
- ถ้าพอร์ตคุณไม่ใช่ 3000 ให้เปลี่ยนเลขตามจริง
- ปล่อยคำสั่งนี้รันค้างไว้ เพราะมันคือตัว tunnel ปิดเมื่อไหร่ลิงก์จะใช้ไม่ได้จนกว่าจะรันใหม่
npx busymote 3000
คุณจะได้อะไร
ลิงก์หน้าตาแบบ https://beam.busymote.xyz จะขึ้นทั้งในเทอร์มินัลและในหน้า dashboard ลิงก์นี้เป็นของพอร์ตนั้นและไม่เปลี่ยน ปิดเครื่อง เปิดใหม่ รันใหม่ ลิงก์เดิมก็ยังใช้ได้ ส่งให้ลูกค้าครั้งเดียวจบ
กดที่ลิงก์ในหน้า dashboard เพื่อเปลี่ยนชื่อได้ จะตั้งเป็น beam, acme-demo หรืออะไรก็ได้ที่ยังไม่มีคนใช้
จะโชว์ให้ลูกค้าดู? build ก่อน
dev server (npm run dev หรือ vite) เหมาะกับการเปิดดูงานตัวเองเร็ว ๆ แต่ถ้าจะโชว์ให้ลูกค้า หรือปล่อยลิงก์ทิ้งไว้สักพัก ให้ build โปรเจกต์เป็นโปรดักชันแล้วแชร์อันนั้นแทน เพราะเร็วกว่าและนิ่งกว่ามากเมื่อเปิดผ่านลิงก์สาธารณะ
ตอน dev เฟรมเวิร์กจะเปิดการเชื่อมต่อ hot-reload ค้างไว้เพื่อส่งการแก้โค้ดเข้าเบราว์เซอร์ พอผ่าน tunnel การเชื่อมต่อนี้จะไม่นิ่ง เวลามันหลุด หน้าเว็บอาจ reload เองหรือหยุดอัปเดต ทำให้ดูเหมือนหน้ารีเซ็ตหรือข้อมูลที่เพิ่งพิมพ์หายไป ส่วนโปรดักชัน build ไม่มีปัญหานี้
หรือให้ Busymote ทำให้จบในคำสั่งเดียวด้วย --run มันจะ build แล้ว start โปรเจกต์ให้ รอจนพอร์ตขึ้น แล้วค่อยแชร์ — npx busymote 3000 --run "npm run build && npm start" กด Ctrl-C ทีเดียวหยุดทั้ง tunnel และคำสั่งที่รัน
- Next.js: รัน npm run build แล้ว npm start จากนั้นแชร์พอร์ตที่มันบอก
- Vite: รัน npm run build แล้ว npm run preview จากนั้นแชร์พอร์ตนั้น
- ชี้ Busymote ไปที่พอร์ตของแอปที่ build แล้ว ไม่ใช่พอร์ต dev
ล็อกลิงก์ด้วยรหัสผ่าน
ปกติแล้วใครที่มีลิงก์ก็เปิด localhost ของคุณได้เลย ไม่ต้องล็อกอิน ไม่มีอะไรกั้น ในหน้า dashboard แต่ละ tunnel ที่เปิดอยู่จะมีปุ่ม "ล็อกลิงก์นี้ด้วยรหัสผ่าน" ตั้งรหัสไว้ แล้วคนที่เปิดลิงก์ต้องพิมพ์รหัสก่อนถึงจะเห็นหน้าเว็บ
อยากเปลี่ยนรหัสทีหลังก็กด "เปลี่ยนรหัสผ่าน" ที่ tunnel นั้น อยากเปิดลิงก์ให้ใครก็เข้าได้อีกครั้งก็กด "เอาออก" รหัสผ่านถูกเก็บแบบเข้ารหัส (hash) ไม่ได้เก็บเป็นตัวอักษรตรง ๆ เราเองก็อ่านไม่ได้
ทำไมการตั้งรหัสผ่านถึงสำคัญ
tunnel คือประตูที่เปิดตรงเข้าเครื่องของคุณ ระหว่างที่มันเปิดอยู่ ลิงก์จะเข้าถึงทุกอย่างที่เซิร์ฟเวอร์ในเครื่องคุณเสิร์ฟออกมา ไม่ว่าจะเป็นหน้าแอดมินที่ยังทำไม่เสร็จ เดโมของลูกค้า เครื่องมือภายใน หรือหน้าจัดการฐานข้อมูล รหัสผ่านคือเส้นแบ่งระหว่าง "เฉพาะคนที่ฉันส่งลิงก์ให้" กับ "ใครก็ตามที่ลิงก์ไปถึง"
- ลิงก์รั่วได้เสมอ มันถูกก๊อปไปวางในแชท ถูกส่งต่อ ถูกแคปหน้าจอ ถ้ามีรหัสผ่าน ต่อให้ลิงก์หลุดออกไปก็ยังเปิดไม่ได้ถ้าไม่มีรหัส
- บอตและ search engine ไล่เก็บ URL อยู่ตลอด ลิงก์สาธารณะอาจถูกจัดทำดัชนีหรือถูกบอตเข้ามาลองภายในไม่กี่นาที รหัสผ่านกันพวกนี้ไว้ที่หน้าประตู
- คุณเป็นคนคุมว่าใครดูได้ การแชร์งานที่ยังไม่เสร็จให้ลูกค้าคนเดียว ไม่ควรแปลว่าคนทั้งอินเทอร์เน็ตนั่งดูคุณทำงานได้
- ไม่มีต้นทุนอะไรเลย รหัสคำเดียว ตั้งครั้งเดียว ลิงก์ก็ยังเป็นที่อยู่เดิม ตั้งไว้ตั้งแต่ตอนที่ tunnel เริ่มเป็นอะไรที่มากกว่าการเทสต์เล่น ๆ
สั่งงานจากมือถือ
ล็อกอินเว็บนี้จากอุปกรณ์ไหนก็ได้ แล้วคุณจะเห็นทุกอย่างที่กำลังแชร์อยู่ ก๊อปลิงก์ เปิด QR แชร์พอร์ตเพิ่ม ตั้งหรือเปลี่ยนรหัสผ่าน หรือสั่งหยุดก็ได้ เครื่องที่บ้านจะทำตามที่คุณกด ตราบใดที่คำสั่ง busymote ยังรันอยู่ที่เครื่องนั้น
เลิกใช้แล้วทำยังไง
กด Ctrl+C ในเทอร์มินัล หรือกดปุ่มหยุดในหน้า dashboard ลิงก์ยังถูกจองไว้ให้คุณ และจะกลับมาใช้ได้ทันทีที่แชร์พอร์ตนั้นอีกครั้ง
ถ้ามีอะไรผิดพลาด
- "Not logged in. Run: busymote login" — คุณข้ามขั้นที่ 1 หรือกำลังอยู่คนละเครื่องกับที่เคยล็อกอินไว้
- "Session expired" — รัน npx busymote login ใหม่ เซสชันไม่ได้อยู่ตลอดไป
- ลิงก์ขึ้นว่า "Nothing is being shared here right now" — คำสั่ง busymote ไม่ได้รันอยู่บนเครื่องคุณ หรือหลุดการเชื่อมต่อไป เปิดใหม่อีกครั้ง
- ลิงก์เปิดได้แต่หน้าเว็บพังหรือว่างเปล่า — Busymote ส่งต่อสิ่งที่เซิร์ฟเวอร์ในเครื่องคุณตอบมาตรง ๆ ลองเปิด http://localhost:3000 บนเครื่องนั้นดูก่อนว่าใช้ได้จริงไหม
- หน้าเว็บ reload เอง รีเซ็ตซ้ำ ๆ หรือข้อมูลที่พิมพ์หาย — คุณกำลังแชร์ dev server ที่การเชื่อมต่อ hot-reload ไม่นิ่งเมื่อผ่าน tunnel ให้แชร์โปรดักชัน build แทน (ดูหัวข้อ "จะโชว์ให้ลูกค้าดู? build ก่อน")
- cloudflared not found (บน macOS) — ติดตั้งด้วยคำสั่ง: brew install cloudflared
- อย่างอื่น: ใช้ช่องส่ง feedback ในหน้า dashboard ข้อความจะถึงเราพร้อมบัญชีของคุณ เราจะได้ตามดูให้ได้จริง
เรื่องที่ต้องระวัง
ระหว่างที่ tunnel เปิดอยู่ ใครก็ตามที่มีลิงก์เข้าถึงพอร์ตนั้นบนเครื่องคุณได้ ลิงก์ไหนที่เป็นมากกว่าการเทสต์เล่น ๆ ให้ตั้งรหัสผ่านไว้ (ดูหัวข้อ "ทำไมการตั้งรหัสผ่านถึงสำคัญ" ด้านบน) ส่งลิงก์ให้เฉพาะคนที่ตั้งใจจะส่ง และปิด tunnel เมื่อใช้เสร็จ