ใช้ Laravel Homestead เป็น Dev Environment

หลังๆ มานี้เทคโนโลยีการทำเว็บมันพัฒนากันเร็วมากครับ  เมื่อก่อนเรามีแค่ PHP, ASP.NET, และ Java เป็นหลักในการทำเว็บ  แต่ทุกวันนี้มีให้เลือกมากขึ้นเพียบ  ทั้ง Ruby, Python, Go, หรือ Node.js

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

ด้วยเหตุนี้มันเลยมีเทคโนโลยีหลายๆ ตัวเข้ามาช่วยกันพื้นที่สำหรับการพัฒนาออกจากคอมปกติ  ซึ่งมักจะใช้ Virtual Machine กันเป็นหลัก  เช่น Docker หรือ Vagrant

อะไรคือ Vagrant

Vagrant (ที่จะลองเล่นกันวันนี้แหละ) นั้นใช้ Virtual Machine ในการจำลองเครื่องขึ้นมาอีกเครื่องหนึ่งในคอมของเรา  และใช้เครื่องจำลองนี้ในการสร้างพื้นที่สำหรับเขียนโค๊ดขึ้นมา  ซึ่งการที่เรามีพื้นที่เฉพาะอย่างนี้  ทำให้เราสามารถกำหนดสภาพแวดล้อมต่างๆ ได้อย่างอิสระ  โดยไม่ต้องนั่งลงนั่งลบโปรแกรมให้ยุ่งยาก  กล่าวคือเราสามารถเขียน Node.js, Ruby, PHP 5.6, PHP 7, HHVM หรือใช้ Apache และ Nginx ทั้งหมดนี้ได้บนคอมของเรา  โดยที่มันไม่ตีกันจนอะไรสักอย่างพังไปนั่นเอง

ปกติเวลาเราจะใช้ Vagrant เราต้องมี Vagrant Box ก่อน  ซึ่ง Vagrant Box เนี่ยมันเป็นอิมเมจของ Virtual Machine ครับ (ถ้านึกไม่ออก  ให้นึกว่ามันเป็นไฟล์ ISO ไฟล์นึงก็ได้) ซึ่งเวลาเราเอามาใช้  มันจะรันอิมเมจพวกนี้ขึ้นมาก่อน (ซึ่งมีให้เลือกเยอะมาก  ทั้ง PHP, Node.js, Docker, Ruby, ฯลฯ) และทำงานร่วมกับไฟล์คอนฟิกเล็กๆของ Vagrant เช่นกำหนดพอร์ต  หรือกำหนดโฟลเดอร์เก็บไฟล์ต่างๆ

เรื่องเดียวที่น่าปวดหัวสำหรับมือใหม่คือ Vagrant มันรันผ่าน Command Line ครับ ฮ่าๆๆๆ (เอาน่า  ไม่ได้ยาก  ลองอ่านดู)

ติดตั้ง Vagrant

Vagrant ติดตั้งง่ายมากครับ  ไปโหลด  แล้วลง

Download Vagrant

ตัวติดตั้งมันจะมี VirtualBox มาด้วย  แต่ถ้าเกิดเหตุอาเพศ  ลงแล้วไม่มี VirtualBox มาให้ (ตอนผมลงใน OSX El Capitan ทีแรก  มันก็ลง VirtualBox ไม่ได้) ก็แก้ง่ายๆด้วยการไปโหลด VirtualBox มาลงซะ

Download VirtualBox

ตั้งตั้งเสร็จ  เปิด Terminal หรือ Command Prompt แล้วพิมพ์คำสั่ง

vagrant -v

ถ้ามันขึ้นแสดงเวอร์ชันขึ้นมา  เป็นอันใช้ได้

รู้จักกับ Homestead

เมื่อก่อนเราเขียน PHP กันยังไง? ลง Stack สักตัว  เช่น XAMPP ใช่ไหม? Homestead มันก็ทำหน้าที่เหมือนพวก XAMPP นี่แหละ แค่ว่ามันเป็น Vagrant Box เวลาลงแล้วมันไม่เลอะเทอะในเครื่อง  และปัญหาพวกพอร์ตชน  รัน MySQL ไม่ได้  นี่หมดไปในพริบตา

ตัว Homestead เนี่ย  เป็นของ Laravel ครับ (เป็น PHP Framework ยอดนิยมตัวหนึ่ง) เขาเจอปัญหาว่านักพัฒนาชอบมีปัญหากับการพัฒนา  เช่นเวอร์ชันซอฟต์แวร์ต่างๆไม่ค่อยตรงกัน  บางคนทำบนวินโดวส์ก็เจอเรื่องไม่ยอมดู Permission เขาเลยสร้าง Homestead มาเพื่อเป็นมาตรฐานกลางนั่นเอง

ใน Homestead นี่มาพร้อมกับซอฟต์แวร์ต่างๆ ต่อไปนี้

  • เว็บเซิร์ฟเวอร์ใช้ Nginx
  • มี PHP5.6, PHP7, และ HHVM พร้อม Composer
  • มี git มาด้วย
  • ฐานข้อมูล RDBMS จะมี MySQL, PostgreSQL, และ SQLite มาให้
  • มีฐานข้อมูล NoSQL มาให้ด้วย  ใช้ Redis
  • มี Node.js มาให้ด้วย
  • มี Beanstalkd มาด้วย (ไว้จัดการ Work queue เหมือนเขียน Todo แล้วมันจะทำตามที่ละข้อ)
  • มี Memcached มาด้วย (ไว้ทำ Caching)

อะไรนะ? เยอะ? เอาน่า คิดซะว่าเป็น Nginx, PHP5.6, MySQL แล้วอย่างอื่นก็ลืมๆ มันไปก็ได้  ไม่ได้ลงอะไรให้รกเครื่องสักหน่อย

ติดตั้ง Homestead

อย่างที่บอกแหละ Vagrant มันต้องพิมพ์คำสั่งผ่าน Terminal ดังนั้น  เปิด Terminal (หรือ Command Prompt) ขึ้นมาครับ  บน OSX และ Linux ก็พิมพ์หา Terminal ส่วนบนวินโดวส์ก็กด Start แล้วพิมพ์ cmd แล้วจะเจอ Command Prompt กดเปิดขึ้นมาโลด

พิมพ์คำสั่งนี้ลงไป

vagrant box add laravel/homestead

คำสั่งนี้เป็นคำสั่งสำหรับเพิ่ม Vagrant Box ลงไปใน Vagrant ครับ (อิมเมจต้นแบบที่จะเอามารันอีกที) จากนั้นรอมันโหลดจนเสร็จ

จากนั้นก็ cd ไปไหนก็ได้  เอาที่สะดวก  เช่น Home Directory

บน OSX หรือ Linux พิมพ์

cd ~

บน Windows พิมพ์

cd %HOMEPATH%

แล้วมันจะมีโผล่ Home Directory  คือ

  • บน OSX – /Users/<username>
  • บน Linux – /home/<username>
  • บน Windows – C:\Users\<username>

จากนั้นเราก็ติดตั้ง Homestead ลงไป  โดยเราสามารถ clone ผ่าน git ได้ทันที

git clone https://github.com/laravel/homestead.git Homestead

หรือถ้าต้องการใช้ PHP7

git clone -b php-7 https://github.com/laravel/homestead.git Homestead

ส่วนถ้าใครใช้วินโดวส์  แน่นอนครับมันไม่มี git มาให้ (อีกแล้ว) คุณสามารถลงโปรแกรมพวก SourceTree, GitHub Desktop, หรือลง Git ตรงๆ เพื่อใช้โคลนโปรเจ็กท์นี้ลงเครื่อง

หรือไม่ก็ไปโหลดเอา https://github.com/laravel/homestead

โคลนเสร็จแล้วก็เปิดเข้าไปในไดเรคทอรี่ครับ

cd homestead

แล้วก็สั่ง init ซะ

บน OSX และ Linux

bash init.sh

บน Windows

homestead init

เมื่อเราสั่ง init แล้ว Homestead จะไปสร้างไฟล์คอนฟิกขึ้นมาไฟล์นึง  เก็บอยู่ในโฟลเดอร์ .homestead ใน Home Directory ของเรา  เดี๋ยวเราต้องไปแก้ไขไฟล์นี้อีกรอบ  แต่เดี๋ยวตอนนี้ไปดูเรื่อง SSH ก่อน

สร้าง SSH Key

*ขั้นตอนนี้เข้าใจว่าไม่ทำก็ได้  แต่ถ้าทำได้ก็ทำไปเถอะ*

ใครใช้ OSX หรือ Linux ก็พิมพ์คำสั่ง

ssh-keygen -t rsa -C "[email protected]"

แล้วมันจะถามว่าจะเซฟที่ไหน

ถ้าจะเปลี่ยนที่เซฟก็พิมพ์ไดเรคทอรี่ที่ต้องการลงไป  ถ้าไม่อยากเปลี่ยนก็กด enter ได้เลย  จากนั้นมันจะถาม Keyphase ซึ่งเป็นเหมือนรหัสผ่านไว้ถอดรหัสไฟล์นี้

กรอกรหัสที่ต้องการลงไป  อะไรก็ได้  จำง่ายๆ  ถ้าพิมพ์แล้วไม่มีอะไรขึ้นมาก็อย่าตกใจ  เป็นปกติของโปรแกรมบน Unix ที่เวลาพิมพ์รหัสผ่านแล้วจะไม่แสดงครับ

ส่วนใครใช้วินโดวส์  ถ้าคุณลง Git ไว้แล้ว  คุณสามารถพิมพ์สั่ง

git bash

แล้วค่อยสั่ง ssh-keygen ได้ครับ  หรือไม่ก็ไปโหลด PuTTY แล้วใช้ PuTTYgen เพื่อสร้าง SSH Key ก็ได้เช่นกัน

ทีนี้เราก็ได้ SSH Key แล้ว

ตั้งค่า Homestead

เปิด File Manager ขึ้นมาครับ

OSX พิมพ์

open ~/.homestead

Linux (Ubuntu) พิมพ์

nautilus ~/.homestead

Windows พิมพ์

explorer %HOMEPATH%/.homestead

มันจะเปิดหน้าต่าง Finder/Explorer/Nautilus หรืออะไรก็ตามขึ้นมา  เราจะเจอไฟล์ที่ชื่อว่า Homestead.yaml ให้เปิดไฟล์นี้ขึ้นมาครับ  จะเจออะไรหน้าตาประมาณนี้

ตรง authorize: ให้แก้เป็นพาธของไฟล์ SSH Key ที่เราสร้างไว้

ต่อมาเป็นตรง Folders โดยเราสามารถแมพโฟลเดอร์บนคอมของเรา  กับบน Homestead ได้ครับ  โดยกำหนดไดเรคทอรี่บนเครื่องของเราใน map:

ในส่วนของ Site จะเป็นการกำหนด virtual domain ให้กับโปรเจ็กท์แต่ละอันครับ  นั่นคือเราสามารถมี http://homestead.app http://myproject.app http://customer.app หรืออะไรก็ตามได้บนเครื่องเดียว

ตรงนี้อาจจะงงนิดหน่อย  สมมุติว่าในโฟลเดอร์ ~/Code บนเครื่องผมเนี่ย  เป็นโฟลเดอร์หลักที่เก็บโปรเจ็กท์งาน  ในนี้มี 3 โปรเจ็กท์  เก็บแยกกันไว้  คือ

  1. ~/Code/MyWeb
  2. ~/Code/MyCompayWeb
  3. ~/Code/MyCustomerWeb

เมื่อผมแมพ ~/Code ลงไปใน /home/vagrant/Code แล้ว  ผมก็แมพ sites ต่อลงไปดังนี้

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: myweb.app
      to: /home/vagrant/Code/MyWeb
    - map: mycompany.app
      to: /home/vagrant/Code/MyCompanyWeb
    - map: mycustomer.app
      to: /home/vagrant/Code/MyCustomerWeb

ต่อมาก็ไปแก้ไฟล์ hosts เพื่อให้เรียกโดเมนพวกนี้ได้

บน Windows กด start พิมพ์ notepad คลิกขวาแล้วเลือก Run as Administrator จากนั้นกด File > Open เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts ขึ้นมา

บน OSX และ Linux พิมพ์

sudo nano /etc/hosts

เปิดขึ้นมาแล้วก็แมพโดเมนที่กำหนดไว้ลงไปที่ IP ที่อยู่ในไฟล์ Homestead.yaml เช่นจากภาพข้างบนนั้นคือ 192.168.10.10 ผมก็ใส่ลงไปตามนี้

แล้วก็เซฟไฟล์ให้เรียบร้อย  บน Windows ไปที่ File > Save ปกติ  ส่วน OSX และ Linux กด Ctrl+O (ปุ่ม control เลยนะ ไม่ใช่ปุ่ม command) กด enter แล้วกด Ctrl+X

หรือถ้างงกับการแก้อะไรพวกนี้  ในไฟล์ Homestead.yaml ก็กรอกไปแค่นี้พอ

folders:
    - map: ~/Code
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code

รัน Homestead

โอเค เซฟไฟล์อะไรให้เรียบร้อย  กลับไปที่ Terminal เปิดกลับไปที่โฟลเดอร์ Homestead ที่เราโคลนมา

บน OSX/Linux

cd ~/Homestead

หรือตามนี้สำหรับ Windows

cd %HOMEPATH%/Homestead

แล้วก็สั่งรัน Homestead ขึ้นมา

vagrant up

ลองเอาไฟล์ index.php ไปวางไว้ในโฟลเดอร์ที่แมพไว้  เปิดเบราเซอร์ไปตามโดเมนที่แมพไว้  หรือ http://192.168.10.10

เสร็จ!

TL;DR

  1. ลง VirtualBox และ Vagrant
  2. เพิ่ม vagrant box
    vagrant box add laravel/homestead
  3. โคลน Homestead
    git clone https://github.com/laravel/homestead.git Homestead
  4. สร้าง SSH Key
    ssh-keygen -t rsa -C "[email protected]"
  5. แก้ Homestead.yaml (ไม่ทำก็ได้)
    open ~/Homestead

    แล้วเปิด homestead.yaml แก้ authorize เป็นพาทในข้อ 4 และแมพพาทให้ folders และ sites

  6. แก้ hosts (ไม่ทำก็ได้)
    sudo nano /etc/hosts
  7. รัน
    cd ~/Homestead
    vagrant up

ยาวเนอะ

ส่งท้าย

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

Posted by Jirayu

WordPress Developer ที่พอมีประสบการณ์อยู่บ้าง วันไหนไม่ทำงานอยู่บ้านว่างๆ ก็นั่งเลี้ยงแมว

Comments