สร้าง Dev Environment ง่ายๆด้วย “Vagrant”

2557-11-18 14_18_11-Vagrant

คุณเคยไหม ! เมื่อต้องทำงานเขียนโปรแกรมด้วยกันเป็นทีม แล้วประสบปัญหา “Environment ของระบบที่รันไม่เป็นใจ” Developer A รันได้ แต่ Developer B รันไม่ได้ สาเหตุอาจจะเป็นเพราะ สร้าง VM มา Dev แล้วลงระบบไม่เหมือนกัน หรือปัญหาอื่นๆ บลาๆๆ อีกหลายๆ อย่าง ที่ขี้เกียจจะพูดถึง แต่ในวงการ Developer ตอนนี้ก็ได้มี Tools หลายๆ ตัวที่มาช่วยให้ Developer ทำงานได้ง่ายขึ้น ส่วนจะทำงานได้ง่ายขึ้นยังไง มาดูกัน!

Vagrant คืออะไร?

Vagrant คือโปรแกรมที่ทำงานร่วมกับ VirtualBox (หรือตัวอื่นๆก็ได้ แต่ไม่ฟรี) โดยตัว Vagrant จะทำหน้าที่ไปครอบเพื่อคุม VirtualBox อีกที ในการช่วยสร้าง Environment อย่างง่าย

Vagrant เหมาะกับใคร?

Vagrant เหมาะกับ Developer ที่พัฒนาโปรแกรม (เว็บ) ที่จะนำไปรันบน OS Linux แต่ตัว Developer เองใช้ Windows หรือ OSX และไม่อยากยุ่งยากกับ  Build ระบบ ขึ้นมาใหม่ ไม่อยากยุ่งยากในการสร้าง VM ขึ้นมาทดสอบซอฟต์แวร์ของตัวเอง ไหนจะต้องลง OS Linux ใน VM ต้องเซ็ตอัพ Apache, Nginx, Mysql บลาๆๆ กว่าจะจัดการ VM เสร็จก็ปาไปครึ่งวัน แถมการ Develop ก็ไม่สะดวกเท่าที่ควร แต่เมื่อใช้ Vagrant ปัญหาเหล่านี้อาจจะหมดไป

การเตรียมตัวใช้ Vagrant

แน่นอน เนื่องจาก Vagrant ทำงานกับ VirtualBox ดังนั้นก็ต้องลง VirtualBox ก่อน (Download VirtualBox) หากคุณมีซอฟต์แวร์ Vmware, Parallel หรือซอฟต์แวร์ Virtualize ตัวอื่นๆ ก็ไม่ต้องซีเรียส ลงๆ ไปเหอะ มันคงไม่ได้ตีกันมาก จากนั้นก็ลงโปรแกรม Vagrant

หลังจากติดตั้งทั้งคู่แล้ว ลองเปิด CMD ขึ้นมา แล้วลองดูว่ามีคำสั่ง vagrant ในเครื่องหรือยัง ถ้ายังก็ลอง Restart เครื่องหรือเซ็ต class path ให้ถูกต้องเสียก่อน หากใช้ได้ ก็เป็นการพร้อมแล้วในการใช้งาน Vagrant

การใช้งาน Vagrant คู่กับการพัฒนาเว็บบน Framework Laravel

ในการใช้งาน Vagrant นั้น จำเป็นต้องมี VM Image ตั้งต้น (ตาม Linux ต่างๆ) ที่ Build มาแล้ว เช่นเดียวกับการลง VirtualBox เองนั่นล่ะ เพียงแต่ Vagrant จะมี Script ในการจัดการ DIR Path และซอฟต์แวร์ต่างๆ ให้ ในเคสนี้จะยกตัวอย่างการใช้ Vagrant เพื่อนำไปพัฒนาเว็บบน Laravel ละกันครับ ซึ่งทาง Laravel ก็ได้สร้าง Homestead เอาไว้สำหรับพัฒนาอยู่แล้ว (http://laravel.com/docs/4.2/homestead)

สำหรับ Environment ต่างๆ ที่มีมาให้ จะมีดังต่อไปนี้

  • Ubuntu 14.04
  • PHP 5.6
  • HHVM
  • Nginx
  • MySQL
  • Postgres
  • Node (With Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension

ก็ถือว่ามีตัวหลักๆ ที่จะใช้ในการพัฒนาครบทั้งหมด เราอาจจะไม่ต้องใส่ใจเรื่อง OS สำหรับการ Dev กับเครื่อง Production มากนัก เน้น Focus ที่สามารถพัฒนาโค้ดได้ก็พอ

จากนั้นเปิด CMD แล้วไปที่ Dir ที่ต้องการวางตัวระบบเอาไว้ แล้วสั่ง

vagrant box add laravel/homestead

เราจะได้ไฟล์คร่าวๆ ในโฟลเดอร์ Homestead ดังนี้

2557-11-18 14_36_44-Homestead

 

หลังจากได้ไฟล์ดังกล่าวมาแล้ว ให้เปิดไฟล์ Homestead.yaml เพื่อแก้ไข

2557-11-18 14_38_54-_ Homestead.yaml - Notepad2

จะมีรายละเอียดที่ต้องแก้ดังนี้

ตั้งค่าไอพี ซึ่งจะเป็นระบบ NAT กับไอพีของเรา ค่า Default คือ 192.168.10.10 มีการตั้งค่า Ram และ CPU ก็ใส่ไปตามพอใข

เนื่องจาก Vagrant จะมีการ Authorized ผ่าน Pubkey ดังนั้น จึงต้องมีการกำหนด Path ที่จะเรียกใช้งาน PubKey และ PrivateKey

จุดสำคัญจะอยู่ที่ในเรื่องของการ Map Folder ของ Code เรา ซึ่งเป็นประโยชน์ในการใช้ Vagrant คือ เราสามารถวางโค้ด ไว้บน Dir ของเครื่องที่เราใช้งานอยู่ได้เลย ไม่จำเป็นต้องนำโค้ดไปวางไว้บนเซิร์ฟเวอร์ VM ที่สร้างเอาไว้ จากตัวอย่างจะเห็นว่า ผมเก็บโค้ดงานไว้ที่ I:/Project1 ก็เลือก Map ไปที่ /home/vagrant/project บนเครื่องเซิร์ฟเวอร์ที่สร้างไว้ จากนั้นเซ็ต Site เพื่อให้ Map กับโฟลเดอร์ ผมตั้งชื่อไซต์ว่า projectname.app

หลังจากตั้งค่าในส่วนนี้แล้ว เซฟไฟล์ จากนั้นสร้าง คำสั่ง vagrant up ที่ Dir นั้น ตัว Vagrant จะไปโหลดดาวน์ OS Image มาให้ ซึ่งใช้เวลาซักพัก ก็รอโหลดจนเสร็จ ตัว Vagrant ก็จะทำการ Start VM และเซ็ตค่าต่างๆ ให้ตามที่เราตั้งค่าเอาไว้ โดยที่เราไม่ต้องไปเปิดโปรแกรม VirtualBox ใดๆ เลย

หลังจากเปิดขึ้นมาได้แล้วนั้น เราสามารถเข้าเว็บโปรเจคของเราได้ผ่านโดเมน projectname.app ได้เลย แต่ถ้าไม่ได้ ให้เข้าไปแก้ไฟล์ C:/windows/System32/drivers/etc/hosts  โดยใส่ค่าเพิ่มเข้าไปเป็น

projectname           192.168.10.10

ถ้าเป็นบน OSX ก็แก้ /etc/hosts

หลังจากนั้น น่าจะเข้าเว็บของเราได้แล้ว

ในการเซ็ต Project เพิ่ม กรณีเราต้องการ Dev หลายงาน ก็สามารถเพิ่มเข้าไปได้โดยการแก้ Homestead.yaml

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: I:\bb-pubkey.pub

keys:
    - I:\bb-privatekey.ppk

folders:
    - map: I:\Project1
      to: /home/vagrant/project
    - map: I:\Project2
      to: /home/vagrant/project2

sites:
    - map: projectname.app
      to: /home/vagrant/project/public
    - map: projectname2.app
      to: /home/vagrant/project2/public

variables:
    - key: APP_ENV
      value: local

แล้วก็ไปเพิ่มที่ hosts ไฟล์อีกเช่นเคย หลังจากเพิ่มแล้ว ให้สั่ง vagrant provision ที่ CMD ด้วย เพื่อให้ vagrant เข้าไปแก้ config nginx ใหม่เพื่อสร้าง site config เพิ่มเข้ามา

สิ่งอื่นๆ ที่ควรรู้

คำสั่งระเบิด ถ้าต้องการทำลาย Homestead เดิมทิ้ง –> vagrant destroy

คำสั่งปิดเครื่อง –> vagrant halt

การเข้าใช้งาน MySQL –>  User : homestead / Password : secret  —————-> เข้าด้วยคำสั่ง mysql -uhomestead -p เอา จากนั้นก็ไปสร้าง database ซะ

การ ssh เข้าไปใน CM –> ssh 192.168.10.10:2222

ข้อดีของการใช้ Vagrant และ Homestead

  1. ง่ายต่อ Develope เพราะไม่ต้องสนใจเรื่องของ Evironment ของระบบ และไม่ต้องมีความรู้ในการลงซอฟต์แวร์บน OS Linux
  2. ง่ายต่อการใช้ Editor บนเครื่องตัวเองในการแก้ไขงาน ไม่ว่าจะใช้ Sublime หรือตัวอื่นๆ เพราะสามารถ Browse File บนเครื่องได้เลยทันที เมื่อแก้ไขและเซฟงาน เราก็สามารถเทสบนเซิร์ฟเวอร์ตัวเองได้เลยทันที  ทำให้มีความรวดเร็วในการเทสงาน ไม่ต้องอัพไฟล์โค้ดที่แก้ขึ้นไปบนเซิร์ฟเวอร์อีกรอบ
  3. เพิ่ม Site Project ได้ง่าย ไม่ต้องไปแก้ config nginx, apache เอง แค่ใส่ config 1-2 บรรทัดก็จบแล้ว

ข้อจำกัดในการใช้งาน

เนื่องจาก Homestead ที่ยกตัวอย่างมา เป็น Homestead ที่เหมาะต่อการพัฒนาเว็บไซต์ที่ใช้งานซอฟต์แวร์พื้นฐาน เพราะมีมาให้แค่นั้น ในกรณีที่ต้องการซอฟต์แวร์อื่นๆ เช่น ffmpeg หรือ nginx ที่ Build Module อื่นๆ เข้าไป อาจจะต้องมีการสร้าง Script Vagrant เพิ่มเติมเข้ามา (เป็นภาษา Ruby) หรือในกรณีที่เราต้องการ OS Linux Distro อื่นๆ นั้น เราก็ต้องรันคำสั่งอื่น เช่นไป git มาเอง

สำหรับเว็บไซต์ของ vagrant ที่ให้คนไป register Box ของตัวเองนั้นจะอยู่ที่ https://vagrantcloud.com/discover/featured สามารถไปหา Box ที่ถูกใจมาได้เหมือนกัน

เช่นถ้าเราต้องการ Base VM CentOS 6.5 เราก็อาจจะเลือกใช้ของ Chef (แต่อันนี้ก็จะไม่มี Tool ต่างๆ มาให้นะ)

2557-11-18 14_59_10-chef_centos-6.5โดยส่วนใหญ่เค้าจะเอา Script มาแก้ใหม่อีกที ถ้าอยาก Base บน Homestead Laravel แล้วเปลี่ยน Distro ก็เอาอันนี้มาแก้เอานะ https://github.com/laravel/homestead หรือ http://www.vagrantbox.es/

หวังว่า Entry นี้จะมีประโยชน์อยู่บ้างนะ…. บางจุดอาจจะอธิบายไม่เคลียร์ ถ้ามีอะไรสงสัย ก็ถามทิ้งเอาไว้ได้นะครับ

 

0 Total Views 0 Views Today