วิธีทดสอบ Laravel API บนมือถือจริงด้วย Tailscale ให้เห็นผลเหมือนรันบนเว็บ

10 นาที 6 views บันทึกเป็น PDF
วิธีทดสอบ Laravel API บนมือถือจริงด้วย Tailscale ให้เห็นผลเหมือนรันบนเว็บ

เบื่อไหมที่เว็บ Laravel ในเครื่องเปิดบนมือถือไม่ได้? มาดูวิธีใช้ Tailscale เชื่อมต่ออุปกรณ์ให้มองเห็นกันและทดสอบ API ได้จริงแบบมือโปร

ทำไมมือถือถึงมองไม่เห็นเว็บไซต์ในเครื่องคอมพิวเตอร์ของเรา

เวลาเราเขียนโปรแกรมด้วย Laravel (เฟรมเวิร์กภาษา PHP สำหรับสร้างเว็บ) เรามักจะใช้เครื่องมืออย่าง Herd (โปรแกรมช่วยรันเว็บในเครื่อง) เพื่อสร้างเว็บไซต์จำลองชื่อว่า myapp.test ขึ้นมาใช้งาน ในคอมพิวเตอร์ของเราทุกอย่างจะดูปกติมาก เพราะเราตั้งค่าให้เครื่องเรารู้จักชื่อนี้ แต่พอเราหยิบมือถือมาเปิดดูเว็บเดียวกัน กลับกลายเป็นว่ามือถือมองไม่เห็นอะไรเลย หรือขึ้นข้อความว่าหาเว็บไม่เจอ

สาเหตุหลักคือ DNS (ระบบที่แปลงชื่อเว็บไซต์ให้เป็นเลขไอพีของเซิร์ฟเวอร์) ในมือถือไม่รู้จักชื่อ .test เพราะชื่อนี้ถูกสร้างขึ้นมาให้ใช้ได้เฉพาะในเครื่องคอมพิวเตอร์ของเราเท่านั้น นอกจากนี้ตัวโปรแกรม Herd ยังตั้งค่าให้เว็บทำงานอยู่แค่ภายในเครื่อง หรือที่เรียกว่า Loopback (การเชื่อมต่อที่สื่อสารกับตัวเองภายในเครื่องเดียว) ทำให้ไม่มีใครจากภายนอกเข้ามาดูได้เลย

อีกปัญหาหนึ่งที่น่าปวดหัวคือเรื่องของ TLS (เทคโนโลยีการเข้ารหัสข้อมูลเพื่อความปลอดภัย) ซึ่งเว็บ .test ของเรามักจะใช้ใบรับรองความปลอดภัยที่ออกโดยตัวโปรแกรมเอง มือถือจึงมองว่าเว็บนี้ไม่น่าเชื่อถือและบล็อกการเข้าถึงทันที การจะแก้ปัญหานี้ให้ได้ผลดีที่สุด เราจึงต้องหาวิธีที่ทำให้มือถือมองเห็นเว็บเราเหมือนเป็นเว็บที่อยู่บนอินเทอร์เน็ตจริงๆ โดยไม่ต้องไปตั้งค่าระบบเครือข่ายให้ยุ่งยาก

รู้จักกับ Tailscale ทางลัดในการเชื่อมต่ออุปกรณ์ให้เป็นเครือข่ายเดียวกัน

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

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

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

# ตรวจสอบสถานะอุปกรณ์ที่อยู่ในเครือข่ายเดียวกัน
tailscale status

คำสั่ง tailscale status จะแสดงรายการอุปกรณ์ทั้งหมดที่ล็อกอินบัญชีเดียวกัน ถ้าทุกอย่างปกติ เราจะเห็นชื่อเครื่อง Mac ของเราและชื่อมือถือ Android หรือ iOS ของเราแสดงขึ้นมาพร้อมเลขไอพีขึ้นต้นด้วย 100. ซึ่งเป็นเลขเฉพาะของเครือข่ายนี้

เปิดประตูให้ Herd สื่อสารผ่าน Tailscale

เมื่อเราเชื่อมต่อคอมพิวเตอร์กับมือถือเข้าด้วยกันแล้ว ขั้นตอนถัดมาคือการบอกให้ Herd ยอมรับการเข้าถึงจากภายนอกผ่านทาง Tailscale เราจะใช้คำสั่ง tailscale serve เพื่อสร้างทางเชื่อมที่ปลอดภัย โดยให้มันส่งคำขอที่เข้ามาจากมือถือไปที่เว็บไซต์ myapp.test ของเราในเครื่อง

จุดสำคัญคือเราต้องใช้คำสั่ง https+insecure เพราะตัว Herd เองนั้นใช้ใบรับรองความปลอดภัยแบบภายในเครื่อง ซึ่ง Tailscale จะเป็นตัวกลางช่วยจัดการแปลงให้กลายเป็นใบรับรองที่น่าเชื่อถือสำหรับมือถือเราอีกทีหนึ่ง ขั้นตอนนี้เหมือนเราสร้างสะพานเชื่อมที่ปลอดภัยมาก โดยที่ตัวเราเองก็ยังทำงานบนเครื่องได้ตามปกติโดยไม่ต้องกังวลเรื่องความปลอดภัย

หลังจากรันคำสั่งนี้แล้ว ให้ลองใช้คำสั่ง tailscale cert เพื่อเป็นการอุ่นเครื่องให้ระบบออกใบรับรองความปลอดภัยให้เรียบร้อยก่อนใช้งานจริง ถ้าทุกอย่างราบรื่น เราจะสามารถเข้าถึงเว็บของเราผ่านชื่อที่ Tailscale กำหนดให้ได้เลย โดยไม่ต้องไปตั้งค่าอะไรในมือถือเพิ่มให้ยุ่งยาก

# สั่งให้ Tailscale เชื่อมต่อเว็บของเราออกสู่เครือข่ายส่วนตัว
tailscale serve --bg "https+insecure://myapp.test"

# อุ่นเครื่องใบรับรองความปลอดภัย
tailscale cert my-mac.tailnet-name.ts.net

คำสั่งแรกเป็นการสั่งให้ระบบรันเบื้องหลัง (--bg) เพื่อให้เว็บเราออนไลน์ตลอดเวลา ส่วนคำสั่งที่สองเป็นการเตรียมใบรับรองความปลอดภัยให้พร้อมใช้งาน ผลลัพธ์ที่ควรเห็นคือข้อความยืนยันว่าเซิร์ฟเวอร์เริ่มทำงานแล้ว และเราจะสามารถใช้ชื่อเว็บ https://my-mac.tailnet-name.ts.net ในการเข้าถึงจากมือถือได้ทันที

ทำไมบางครั้งถึงเจอ 404 ทั้งที่เว็บรันอยู่

หลายคนมักจะเจอปัญหาว่าพอเข้าเว็บผ่านมือถือแล้วเจอหน้า 404 Not Found (ข้อผิดพลาดที่ระบุว่าหาหน้าเว็บไม่เจอ) ทั้งที่ในคอมพิวเตอร์เข้าได้ปกติ ปัญหานี้ไม่ได้เกิดจากอินเทอร์เน็ตหลุด แต่มันเกิดจากสิ่งที่เรียกว่า Host Header (ข้อมูลส่วนหัวที่บอกว่าเรากำลังเรียกเว็บชื่ออะไร) ซึ่งตัว Tailscale จะส่งชื่อโดเมนของตัวมันเองไปแทนที่จะเป็น myapp.test

เมื่อคำขอไปถึง Herd หรือ Nginx (โปรแกรมจัดการการรับส่งข้อมูลหน้าเว็บ) มันจะสับสนเพราะมันไม่รู้จักโดเมนที่ส่งมา มันจึงหาทางไปต่อไม่ถูกและตอบกลับมาเป็น 404 ทันที วิธีแก้คือเราต้องทำให้คำขอที่ส่งมาจากมือถือมีข้อมูลชื่อโดเมน myapp.test แนบไปด้วย เพื่อให้ระบบเข้าใจว่าเรากำลังเรียกเว็บนี้จริงๆ

การเข้าใจเรื่องนี้เป็นสิ่งที่สำคัญมากสำหรับโปรแกรมเมอร์ เพราะมันสอนให้เรารู้ว่าการทำงานของระบบเครือข่ายนั้นละเอียดอ่อนแค่ไหน การทดสอบด้วยการลองเปลี่ยน Header (ส่วนหัวของคำขอ) ดูด้วยตัวเองจะช่วยให้เราเห็นภาพชัดเจนว่าทำไมระบบถึงปฏิเสธคำขอของเรา และนี่คือบทเรียนที่ดีที่สุดในการแก้บั๊กเกี่ยวกับการเชื่อมต่อ

ขั้นตอนการแก้ไขปัญหา 404 ให้ตรงจุด

เพื่อให้ Herd ยอมรับคำขอของเรา เราต้องตั้งค่าให้ระบบส่งต่อ Host header ให้ถูกต้อง การทำแบบนี้จะทำให้ Nginx เชื่อว่าคำขอนั้นมาจากโดเมน myapp.test โดยตรง ซึ่งจะช่วยให้ Laravel ทำงานต่อได้อย่างถูกต้องและไม่เกิดข้อผิดพลาด 404 อีกต่อไป

ถ้าเราใช้ Ionic หรือแอปมือถืออื่นๆ ในการเรียก API (ช่องทางเชื่อมต่อข้อมูลระหว่างแอปกับเว็บ) เราต้องมั่นใจว่าทุกคำขอที่ส่งออกไปมีการระบุค่านี้ไว้ในส่วนของ Header เสมอ การทำแบบนี้อาจจะดูยุ่งยากในตอนแรก แต่ถ้าเราเขียนโค้ดให้จัดการเรื่องนี้เป็นมาตรฐานตั้งแต่ต้น เราจะประหยัดเวลาแก้ปัญหาไปได้มหาศาล

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

// ตัวอย่างการส่งคำขอผ่าน Axios (เครื่องมือส่งข้อมูลใน JavaScript)
axios.get('https://my-mac.tailnet-name.ts.net/api/user', {
    headers: {
        'Host': 'myapp.test' // ระบุชื่อโดเมนให้ถูกต้องเพื่อให้เซิร์ฟเวอร์รู้จัก
    }
});

โค้ดชุดนี้แสดงการแนบ Host header เข้าไปในคำขอ ถ้าเราส่งคำขอนี้จากแอปมือถือ Laravel จะได้รับค่าที่ถูกต้องและส่งข้อมูลผู้ใช้งานกลับมาให้เราได้โดยไม่มีข้อผิดพลาด 404 อีก

สรุป: เปลี่ยนมือถือให้กลายเป็นเครื่องมือทดสอบที่ทรงพลัง

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

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

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


ที่มา: Testing a Laravel Herd API on a Real Phone with Tailscale — DEV Community: laravel

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เรียนรู้วิธีเขียนแอป Flutter เชื่อมต่อ Meta Smart Glasses ให้ทำงานเร็ว ไม่กระตุก ด้วยการวางสถาปัตยกรรมโค้ดและการจัดการข้อมูลแบบมือโปรที่มือใหม่ทำตามได้จริง

ที่มา: DEV Community

3 hours ago 10 นาที
5 views
เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

อยากทำระบบ Real-Time แต่ไม่รู้จะเลือกใช้ Polling, SSE หรือ WebSocket ดี? มาดูวิธีเลือกใช้ให้เหมาะกับงาน เพื่อให้แอปของคุณทำงานลื่นไหลและประหยัดทรัพยากรเซิร์ฟเวอร์

ที่มา: DEV Community

6 hours ago 10 นาที
4 views