เปิด Vagrant Environment บนเครื่องตัวเองแบบสาธารณะ

บทความนี้จะมาแนะนำความสามารถหนึ่งของ Vagrant (อ่านว่า เว'-เกรินทฺ) ซึ่งเป็นเครื่องมือที่สามารถควบคุม virtual machine ผ่าน command line ได้ ความสามารถนั้นคือ "Share"

หมายเหตุ ความสามารถนี้ถูกใส่เข้ามาใน Vagrant เวอร์ชั่น 1.5 นะครับ ใครที่ใช้เวอร์ชั่นต่ำกว่านี้ก็..​ อัพเกรดเถอะ 🙂

ขอเกริ่น.. ในการพัฒนาซอฟต์แวร์บางครั้งอาจจะมีข้อจำกัดบางอย่าง เช่น เราเขียนโค้ดบนเครื่องของเรา แล้วเราก็อยากแชร์ให้เพื่อนในทีมเราเข้ามาดู หรือว่าพัฒนาเว็บ prototype ขึ้นมา แล้วอยากลูกค้าของเราดูก่อน ลองเล่นก่อน วิธีแก้ปัญหาส่วนใหญ่ก็คือเราต้องแบกเครื่องไปหาเพื่อน หรือว่าแบกไปหาลูกค้าเอง ในหลายๆ ครั้งก็อาจจะไม่ประสบความสำเร็จเท่าไหร่เนื่องด้วยเวลาจำกัดหรืออะไรก็แล้วแต่ ยิ่งถ้าลูกค้าอยู่ต่างประเทศด้วยยิ่งลำบาก ถามว่าทำไมไม่ push เข้า GitHub แล้วดีพลอยไว้บน server สักตัวหนึ่ง? ทำแบบนั้นก็ได้ครับ 😀 ผมแค่อยากมาเสนอทางเลือกอีกทางที่ง่ายกว่า เร็วกว่า และประหยัดเงินกว่าแน่นอนครับ

ก่อนอื่นต้องมี account ของ HashiCorp's Atlas ก่อนนะครับ ถึงจะใช้ความสามารถนี้ได้ไปสมัครกันก่อนนะครับ ซึ่งวิธีใช้ง่ายมากครับสั่งคำสั่งตามนี้เลย

  1. vagrant login
  2. 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 นั้น ผมก็จะเห็นตามนี้ (เข้าผ่านมือถือแล้วก็ต่อเนทมือถือ)

Access Vagrant via Mobile

เข้า Vagrant ผ่านมือถือ

ชื่อของ Vagrant Share ที่ได้มาอย่าง brilliant-puppy-7314 จะเปลี่ยนไปเรื่อยๆ นะครับ เป็น ID ที่ต้อง unique

Vagrant Share นั้นมีอยู่ 3 แบบ แต่ทั้ง 3 แบบก็ไม่ได้แบ่งแยกขาดออกจากกันนะครับ การแชร์ทั้ง 3 แบบนี้จะมีส่วนทับซ้อนกันอยู่ ขึ้นอยู่กับว่าเราจะใส่ตัวเลือกว่าเราอยากแชร์แบบไหน

  1. แบบ HTTP ซึ่งแบบนี้จะเสมือนว่า Vagrant ของเราเป็น web server ไปเลย ไม่ว่าใครก็สามารถเข้ามาดูได้ถ้ารู้ URL เราสามารถแชร์แบบ https ได้ด้วยนะ ใช้คำสั่ง vagrant share ตามข้างต้นเลย
  2. แบบ SSH แบบนี้จะเปิดพอร์ต SSH ให้เพื่อนในทีม หรือใครก็ตามที่เราอยากให้เข้ามาในเครื่องเราได้ ซึ่งแบบนี้จะค่อนข้างปลอดภัยอยู่ ให้เราใส่คำสั่งเสริม --ssh เข้าไป (dash dash ssh) ดังนี้ vagrant share --ssh
    สำหรับเพื่อนร่วมทีมที่อยากเข้าเครื่องเรามาเค้าก็แค่สั่ง vagrant connect --ssh [vagrant share name]
  3. แบบเปิดให้ใครก็ได้เข้ามา พอร์ตไหนก็ได้..​ ค่อนข้างอันตรายนะครับ LOL ให้ระวังไว้หน่อยเวลาใช้ ซึ่งปกติวิธีนี้เวลาที่สั่ง vagrant share เราจะใส่คำสั่งเสริม --disable-http เข้าไปด้วยครับ และถ้าเราอยากให้คนเข้าเครื่องเรามาก็ให้เค้าใช้คำสั่ง vagrant connect [vagrant share name]

หมายเหตุ เวลาสั่ง vagrant share แบบไม่มีคำสั่งเสริม จะเป็นการเปิดแบบให้ใครเข้ามาก็ได้นะครับโดยค่าตั้งต้นของมัน แล้วก็แบบ 1 กับแบบ 3 จะดูค่อนข้างคล้ายกันนะครับ สำหรับผมแล้วผมแนะนำให้ดูที่จุดประสงค์ของการแชร์แล้วจะแยกการแชร์แต่ละแบบออกจากกันได้ชัดเจนมากขึ้น แล้วก็ทั้งนี้ทั้งนั้นถ้ามีเรื่องความปลอดภัยเข้ามาเอี่ยว สุดท้ายเราต้องกำหนด access เองภายในตัว virtual machine ของเราเองนะครับ

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

ใครที่อยากรู้ว่ามันทำงานอย่างไร ตามไปอ่าน Feature Preview: Vagrant Share เลยครับ


Leave a comment!

You must be logged in to post a comment.