ติดตั้ง Laravel Valet เพื่อใช้ทดสอบเว็บไซต์บน Mac

บทความนี้ขอแนะนำการติดตั้ง 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

ใช้คำสั่ง 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

แก้ไขพาธของ PHP

เนื่องจากใน 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)

ติดตั้ง Laravel Valet

ใช้คำสั่ง 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

ตัวอย่างการเปิดหน้าเว็บไซต์ทดสอบ

Hello Valet

สังเกตเส้นประสีแดง แสดงว่า 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

Hello Laravel

ข้อมูลเพิ่มเติม