มาสร้าง Development Environment ด้วย #VagrantBox กันเถอะ
ก่อนจะเริ่มต้นกัน ผมมีคำถามหนึ่งข้อ ให้ตอบในใจก่อนว่า คุณเคยมีปัญหากับสิ่งเหล่านี้กันหรือเปล่าครับ ?
- ไม่สามารถพัฒนาระบบที่มีความต่างกันของ OS พร้อมกันได้
- ไม่สามารถพัฒนาระบบที่มีความต่างกันของ Web Server พร้อมๆ กันได้
- ไม่สามารถอัพเดทเวอร์ชั่นของภาษาที่ใช้พัฒนาระบบได้ เพราะไม่แน่ใจว่าข้อมูลเก่าจะเสียหายหรือเปล่า ?
- ไม่สามารถพัฒนาระบบที่ต้องการใช้งาน extension หรือ service ที่ต่างกันได้
- มีปัญหาในการทดสอบระบบ ในขั้นตอนการพัฒนาสามารถทำงานได้ปกติ แต่กับ Production ที่ใช้งานจริง ผลลัพธ์ดันออกมาไม่เหมือนกันซะงั้น
ถ้าไม่มีปัญหา กดปิดบทความนี้ แยกย้ายกันแล้วเอาเวลาไปทำอย่างอื่นดีกว่าครับ !! แต่ถ้าใช่ เหมือนจะมีปัญหาอยู่บ้าง ไม่มากก็น้อย เราจะมาแก้ปัญหาเหล่านั้นกันครับ
Part เตรียมความพร้อม
- vagrant พระเอกของเราถ้าไม่ตัวนี้เนี่ย ฟาว์ล เลยครับ
- virtualbox โปรแกรมสำหรับเอาไว้ run virtual machine
Part เอาล่ะนะ
- เริ่มจากการสร้าง folder สำหรับใช้งาน Vagrant Box ขึ้นมา
Mac:~ Anonymous$ mkdir ubuntu-php7
แนะนำว่าชื่อของ folder ควรจะสื่อความหมายถึง Environment ที่เรากำลังจะสร้างขึ้นมานะครับ
ตามด้วยคำสั่งที่เข้าไปใช้งาน folder ที่ได้สร้างเอาไว้เมื่อกี้
Mac:~ Anonymous$ cd ubuntu-php7
2. สร้าง Vagrant Box กัน ด้วยคำสั่ง
Mac:ubuntu-php7 Anonymous$ vagrant init
ถ้านึกหน้าตาไม่ออก ผมมีตัวช่วย
Mac:ubuntu-php7 Anonymous$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
Mac:ubuntu-php7 Anonymous$ ls
Vagrantfile
หลังจากนั้นเราจะได้ Vagrantfile สำหรับเอาไว้ config Vagrant Box
3. config Vagrant Box เพื่อใช้งาน
Mac:ubuntu-php7 Anonymous$ sudo nano Vagrantfile
ค่าแรกที่เราจะ config กันก็คือ ค่าสำหรับบอกว่า Vagrant Box นี้เราจะใช้ Environment ไหน หรือ OS อะไร Architecture อะไรแบบไหน ในการทำงาน
//ตัวอย่างนี้ผมเลือกใช้ vagrant box ubuntu16.04
config.vm.box = “geerlingguy/ubuntu1604”
เราสามารถเลือก Environment ได้ตามต้องการ จาก HashiCorp’s Atlas box โดย เลือก Provider เป็น virtualbox ก่อนนะครับ
ต่อมาก็ config ip สำหรับเข้าใช้งาน Vagrant Box
config.vm.network “private_network”, ip: “10.0.0.10”
สุดท้ายก็ config folder สำหรับเก็บข้อมูล
config.vm.synced_folder "/users/path/folder(1)", "/var/www/html (2)", owner: "www-data", group: "www-data"(1) path ของข้อมูลที่ต้องการ sync มาที่ vagrant เข้าไปที่ folder ที่ต้องการ sync ใช้คำสั่ง pwd หลังจากนั้น copy มาวางไว้ได้เลยครับ(2) path ตอนเข้าใช้งานที่ vagrant
การที่ config ค่า folder แบบนี้ ก็เพื่อตอบโจทย์
- พวกที่ชอบเล่นอะไรแผลงๆ จน box พังบ้างล่ะ
- อยากลบ box ทิ้ง เพราะเปลืองพื้นที่บ้างล่ะ
- ชอบอัพเดท box ใหม่ๆ แต่ก็กลัวข้อมูลเก่ามีปัญหา
- ไม่อยาก clone ข้อมูลทุกครั้งเมื่อมีการสร้าง box ใหม่
เพราะว่า ถึง box เราจะพัง เราจะลบ box ทิ้งไป หรือจะทำอะไรก็แล้วแต่ ข้อมูลงานของเราจะไม่โดนผลกระทบเลย เพราะข้อมูลของเราอยู่ที่ path ที่เราได้ config และ Sync ไว้นั้นเอง
4. ปลุก Vagrant Box ที่เรา config ไว้ให้พร้อมใช้งาน
Mac:ubuntu-php7 Anonymous$ vagrant up
ในขั้นตอนนี้ จะใช้เวลานนานหรือไม่ ก็อยู่ที่ความไว Internet ของแต่ล่ะคนนะครับ
5. สุดท้ายพิมพ์คำสั่งเพื่อ เข้าใช้งาน Vagrant Box
Mac:ubuntu-php7 Anonymous$ vagrant ssh
กรณีเข้าจาก directory อื่นๆ สามารถเข้าใช้งาน private ip ที่เรา config ไว้
Mac:~ Anonymous$ ssh vagrant@10.0.0.10
จบแล้วครับ การสร้าง Development Environment สั้นๆ ง่ายๆ เสียเวลาน้อยกว่าเดินไปชงมาม่ามากินซะอีก