บทความนี้ขอแนะนำการติดตั้ง Laravel Valet บนเครื่อง Mac เพื่อใช้ทดสอบเว็บไซต์ด้วยเว็บเซิร์ฟเวอร์, PHP, Database ที่รันบน macOS เลย โดยไม่จำเป็นต้องลงโปรแกรมประเภท Virtual Machine เช่น VirtualBox บนเครื่อง Mac เพื่อใช้รันลีนุกซ์เป็นเซิร์ฟเวอร์ทดสอบ ทำให้ประหยัดทรัพยากรเครื่องไม่ว่าจะเป็น CPU, Memory, Disk
Larael Valet ถูกพัฒนาโดยทีมงาน Laravel เพื่อใช้ทดสอบเว็บไซต์บนเครื่อง Mac ระหว่างการพัฒนาโปรแกรม นอกจากจะรองรับเว็บไซต์ที่พัฒนาด้วย Laravel แล้ว ยังรองรับ PHP Framework เช่น Symfony, CakePHP, Drupal หรือ Joomla, Magento, Wordpress และอื่นๆ อีกมากมาย
ลองมาดูขั้นตอนการติดตั้งและคอนฟิก Laravel Valet กัน
ใช้คำสั่ง brew install
ติดตั้งแพ็คเกจต่างๆ เพื่อรันเป็นเซอร์วิสที่จำเป็นในการรัน Laravel Valet
$ brew install dnsmasq
$ brew install mysql@5.7
$ brew install nginx
$ brew install php@7.2
หมายเหตุ ณ วันที่เขียนบทความ (ต้นเดือน มีนาคม 2563) หากระบุแพ็คเกจ php เฉยๆ โดยไม่ระบุเวอร์ชัน brew
จะทำการติดตั้งเวอร์ชัน 7.4 ซึ่งเท่าที่ทดสอบ จะมี warning กับบางแพ็คเกจ ที่ใช้ในการรัน Laravel ดังนั้นในที่นี้ขอระบุติดตั้ง PHP เป็นแค่เวอร์ชัน 7.2
เนื่องจากใน macOS ก็มี php
ถูกติดตั้งมาด้วย อยู่ในพาธ /usr/bin/
$ /usr/bin/php -v
PHP 7.3.11 (cli) (built: Dec 13 2019 19:21:21) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
ดังนั้นเพื่อป้องกันความสับสน แนะนำให้แก้ไขพาธในการรันคำสั่ง php
ให้ไปรันจากแพ็คเกจที่ติดตั้งด้วยคำสั่ง brew
วิธีการที่แนะนำคือสร้างลิงก์ไว้ใน /usr/local/bin/
$ cd /usr/local/bin/
$ ln -s ../Cellar/php\@7.2/7.2.27/bin/php php
$ php -v
PHP 7.2.27 (cli) (built: Jan 24 2020 03:47:26) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.9.0, Copyright (c) 2002-2019, by Derick Rethans
with Zend OPcache v7.2.27, Copyright (c) 1999-2018, by Zend Technologies
หลังการติดตั้ง สามารถใช้คำสั่ง brew servies list
เพื่อตรวจสอบสถานะการรันแต่ละเซอร์วิส
$ brew services list
Name Status User Plist
dnsmasq started root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
mysql@5.7 started supasin /Users/supasin/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist
nginx started root /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
php@7.2 started supasin /Users/supasin/Library/LaunchAgents/homebrew.mxcl.php@7.2.plist
คอลัมน์ Status
ต้องแสดงสถานะ started
แสดงว่าเซอร์วิสถูกรันปกติ แต่ถ้าเซอร์วิสไหนมีปัญหา ลองใช้คำสั่ง brew services restart
เพื่อทดลองรีสตาร์ตเซอร์วิสนั้นๆ เช่น
$ brew services restart php@7.2
Stopping `php@7.2`... (might take a while)
==> Successfully stopped `php@7.2` (label: homebrew.mxcl.php@7.2)
==> Successfully started `php@7.2` (label: homebrew.mxcl.php@7.2)
ใช้คำสั่ง composer
เพื่อติดตั้ง Laravel Valet โดยระบุออปชัน global
เพื่อติดตั้งไว้เป็นแพ็คเกจส่วนกลาง ดีฟอลต์จะถูกเก็บไว้ในโฟลเดอร์ ~/.composer
$ composer global require laravel/valet
หลังติดตั้งแพ็คเกจเสร็จเรียบร้อย จะมีลิงก์ไฟล์ถูกสร้างไว้ในพาธ ~/.composer/vendor/bin/
$ ls -l ~/.composer/vendor/bin/valet
lrwxr-xr-x 1 supasin staff 22 Mar 7 15:43 /Users/supasin/.composer/vendor/bin/valet -> ../laravel/valet/valet
เพื่อความสะดวกในการเรียกใช้งาน แนะนำให้สร้างลิงก์ไฟล์ไว้ใน /usr/local/bin/
$ ln -s ~/.composer/vendor/bin/valet valet
ถ้าติดตั้งถูกต้อง ลองรันคำสั่ง valet
จะแสดงข้อความวิธีการใช้งาน
$ valet
Password:
Laravel Valet 2.8.1
Usage:
command [options] [arguments]
...
หมายเหตุ เวลารันคำสั่ง valet
ครั้งแรก จะขึ้นให้ใส่ Password:
เพราะว่า valet
จำเป็นต้องใช้สิทธิ์ root เพื่อคอนฟิก หรือรีสตาร์ตเซอร์วิสที่รันด้วย root เช่น nginx
หรือ dnsmasq
รันคำสั่ง mkdir
เพื่อสร้างโฟลเดอร์สำหรับทดสอบเว็บไซต์ ตัวอย่างเช่น ~/Sites
$ mkdir ~/Sites
ใช้คำสั่ง cd
เข้าไปในโฟลเดอร์ที่สร้าง แล้วรันคำสั่ง valet park
เพื่อระบุว่า โฟลเดอร์ที่อยู่ปัจจุบันนี้ จะใช้เก็บไฟล์เว็บไซต์ต่างๆ
$ cd ~/Sites
$ valet park
This directory has been added to Valet's paths.
สร้างโฟลเดอร์ไว้ในโฟลเดอร์ ~/Sites
เพื่อเก็บไฟล์ของเว็บไซต์เพื่อใช้ทดสอบ เช่น ในที่นี้จะสร้างโฟลเดอร์ hello-valet
$ cd ~/Sites/
$ mkdir hello-valet
$ cd hello-valet/
สร้างไฟล์ index.php ไว้ในโฟลเดอร์นี้
<?php
// ~/Sites/hello-valet/index.php
echo '<h1>Hello Laravel Valet</h1>';
phpinfo();
ทดลองเปิดด้วย browser บนเครืื่อง Mac โดยระบุที่อยู่เว็บไซต์ เป็นชื่อโฟลเดอร์ที่สร้างไว้ใน ~/Sites
ตามด้วยโดเมน .test
เช่นในที่นี้ ต้องระบุที่อยู่เว็บไซต์คือ http://hello-valet.test
ตัวอย่างการเปิดหน้าเว็บไซต์ทดสอบ
สังเกตเส้นประสีแดง แสดงว่า PHP ถูกรันจาก Darwin
ซึ่งเป็นระบบปฏิบัติการของ macOS
โดยดีฟอลต์จากการติดตั้งและคอนฟิก Laravel Valet จะไปแก้ไขคอนฟิกของเซอร์วิส dnsmasq
ให้แปลงชื่อเว็บไซต์ที่ลงด้วยโดเมน .test
ให้เป็นเรียกจากเว็บเซิร์ฟเวอร์ที่รันบนเครื่องตัวเอง (127.0.0.1)
ลองทดสอบโดยใช้คำสั่ง ping
$ ping hello-valet.test
PING hello-valet.test (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.026 ms
^C
ทำให้เราสามารถใช้เครื่อง Mac ทดสอบได้หลายเว็บไซต์ในเครื่องเราได้ โดยสร้างชื่อโฟลเดอร์ต่างๆ ไว้ใน ~/Sites
แล้วก็ทดสอบโดยใช้ชื่อเว็บไซต์ตรงกับชื่อโฟลเดอร์ ตามด้วย .test
เช่น สร้างโฟลเดอร์ hello-laravel
สำหรับทดสอบเว็บที่พัฒนาด้วย Laravel อีกเว็บไซต์
$ cd ~/Sites
$ composer create-project --prefer-dist laravel/laravel hello-laravel
$ ls -l
drwxr-xr-x 26 supasin staff 832 Mar 7 16:17 hello-laravel
drwxr-xr-x 3 supasin staff 96 Mar 7 16:01 hello-valet
ใช้ browser โดยระบุที่อยู่เว็บไซต์ http://hello-laravel.test