บทความนี้จะมาแนะนำความสามารถหนึ่งของ Vagrant (อ่านว่า เว’-เกรินทฺ) ซึ่งเป็นเครื่องมือที่สามารถควบคุม virtual machine ผ่าน command line ได้ ความสามารถนั้นคือ “Share”
หมายเหตุ ความสามารถนี้ถูกใส่เข้ามาใน Vagrant เวอร์ชั่น 1.5 นะครับ ใครที่ใช้เวอร์ชั่นต่ำกว่านี้ก็.. อัพเกรดเถอะ 🙂
ขอเกริ่น.. ในการพัฒนาซอฟต์แวร์บางครั้งอาจจะมีข้อจำกัดบางอย่าง เช่น เราเขียนโค้ดบนเครื่องของเรา แล้วเราก็อยากแชร์ให้เพื่อนในทีมเราเข้ามาดู หรือว่าพัฒนาเว็บ prototype ขึ้นมา แล้วอยากลูกค้าของเราดูก่อน ลองเล่นก่อน วิธีแก้ปัญหาส่วนใหญ่ก็คือเราต้องแบกเครื่องไปหาเพื่อน หรือว่าแบกไปหาลูกค้าเอง ในหลายๆ ครั้งก็อาจจะไม่ประสบความสำเร็จเท่าไหร่เนื่องด้วยเวลาจำกัดหรืออะไรก็แล้วแต่ ยิ่งถ้าลูกค้าอยู่ต่างประเทศด้วยยิ่งลำบาก ถามว่าทำไมไม่ push เข้า GitHub แล้วดีพลอยไว้บน server สักตัวหนึ่ง? ทำแบบนั้นก็ได้ครับ 😀 ผมแค่อยากมาเสนอทางเลือกอีกทางที่ง่ายกว่า เร็วกว่า และประหยัดเงินกว่าแน่นอนครับ
ก่อนอื่นต้องมี account ของ HashiCorp’s Atlas ก่อนนะครับ ถึงจะใช้ความสามารถนี้ได้ไปสมัครกันก่อนนะครับ ซึ่งวิธีใช้ง่ายมากครับสั่งคำสั่งตามนี้เลย
- vagrant login
- vagrant share
จบ! ผลที่ได้จะออกมาตามนี้ครับ
➜ hello-vagrant-share vagrant share ==> default: Detecting network information for machine... default: Local machine address: 192.168.12.34 default: Local HTTP port: 80 default: Local HTTPS port: disabled ==> default: Checking authentication and authorization... You must logged in to Vagrant Cloud in order to use `vagrant share`. Please log in with `vagrant login`. ➜ hello-vagrant-share vagrant login In a moment we will ask for your username and password to HashiCorp's Atlas. After authenticating, we will store an access token locally on disk. Your login details will be transmitted over a secure connection, and are never stored on disk locally. If you do not have an Atlas account, sign up at https://atlas.hashicorp.com. Atlas Username: zkan Password (will be hidden): You are now logged in. ➜ hello-vagrant-share vagrant share ==> default: Detecting network information for machine... default: Local machine address: 192.168.12.34 default: Local HTTP port: 80 default: Local HTTPS port: disabled ==> default: Checking authentication and authorization... ==> default: Creating Vagrant Share session... default: Share will be at: brilliant-puppy-7314 ==> default: Your Vagrant Share is running! Name: brilliant-puppy-7314 ==> default: URL: http://brilliant-puppy-7314.vagrantshare.com ...
ถ้าผมสั่ง vagrant share เลย ก็จะโดนด่าว่าคุณต้อง login ก่อนนะ พอสั่งคำสั่งเสร็จจะเห็นได้ว่าตอนท้ายจะมี Name กับ URL โผล่ออกมาแบบนี้
default: Share will be at: brilliant-puppy-7314 ==> default: Your Vagrant Share is running! Name: brilliant-puppy-7314 ==> default: URL: http://brilliant-puppy-7314.vagrantshare.com
นั่นแหละครับ เอา Name หรือ URL นั้นไปให้เพื่อนหรือว่าให้ลูกค้าได้เลย ในที่นี้เครื่อง virtual machine ของผมติดตั้ง Nginx ไว้ ดังนั้นเวลาที่ผมเข้า URL นั้น ผมก็จะเห็นตามนี้ (เข้าผ่านมือถือแล้วก็ต่อเนทมือถือ)
ชื่อของ Vagrant Share ที่ได้มาอย่าง brilliant-puppy-7314
จะเปลี่ยนไปเรื่อยๆ นะครับ เป็น ID ที่ต้อง unique
Vagrant Share นั้นมีอยู่ 3 แบบ แต่ทั้ง 3 แบบก็ไม่ได้แบ่งแยกขาดออกจากกันนะครับ การแชร์ทั้ง 3 แบบนี้จะมีส่วนทับซ้อนกันอยู่ ขึ้นอยู่กับว่าเราจะใส่ตัวเลือกว่าเราอยากแชร์แบบไหน
- แบบ HTTP ซึ่งแบบนี้จะเสมือนว่า Vagrant ของเราเป็น web server ไปเลย ไม่ว่าใครก็สามารถเข้ามาดูได้ถ้ารู้ URL เราสามารถแชร์แบบ https ได้ด้วยนะ ใช้คำสั่ง vagrant share ตามข้างต้นเลย
- แบบ SSH แบบนี้จะเปิดพอร์ต SSH ให้เพื่อนในทีม หรือใครก็ตามที่เราอยากให้เข้ามาในเครื่องเราได้ ซึ่งแบบนี้จะค่อนข้างปลอดภัยอยู่ ให้เราใส่คำสั่งเสริม –ssh เข้าไป (dash dash ssh) ดังนี้ vagrant share –ssh
สำหรับเพื่อนร่วมทีมที่อยากเข้าเครื่องเรามาเค้าก็แค่สั่ง vagrant connect –ssh [vagrant share name] - แบบเปิดให้ใครก็ได้เข้ามา พอร์ตไหนก็ได้.. ค่อนข้างอันตรายนะครับ LOL ให้ระวังไว้หน่อยเวลาใช้ ซึ่งปกติวิธีนี้เวลาที่สั่ง vagrant share เราจะใส่คำสั่งเสริม –disable-http เข้าไปด้วยครับ และถ้าเราอยากให้คนเข้าเครื่องเรามาก็ให้เค้าใช้คำสั่ง vagrant connect [vagrant share name]
หมายเหตุ เวลาสั่ง vagrant share แบบไม่มีคำสั่งเสริม จะเป็นการเปิดแบบให้ใครเข้ามาก็ได้นะครับโดยค่าตั้งต้นของมัน แล้วก็แบบ 1 กับแบบ 3 จะดูค่อนข้างคล้ายกันนะครับ สำหรับผมแล้วผมแนะนำให้ดูที่จุดประสงค์ของการแชร์แล้วจะแยกการแชร์แต่ละแบบออกจากกันได้ชัดเจนมากขึ้น แล้วก็ทั้งนี้ทั้งนั้นถ้ามีเรื่องความปลอดภัยเข้ามาเอี่ยว สุดท้ายเราต้องกำหนด access เองภายในตัว virtual machine ของเราเองนะครับ
จริงๆ การที่เราทำแบบมียังมีข้อดีอีกหลายอย่างนะครับ เช่นว่า เราสามารถทำ pair programming กับเพื่อนที่ทำงานอยู่ต่างสถานที่กันได้ หรือว่าอีกอย่างหนึ่งคนเราสามารถทดสอบ webhook จากเว็บนอกได้ ซึ่งเป็นความสามารถที่ดีโคตรๆ ครับ ลองใช้กันดู!
ใครที่อยากรู้ว่ามันทำงานอย่างไร ตามไปอ่าน Feature Preview: Vagrant Share เลยครับ