คำแนะนำนี้มีไว้เพื่อตั้งค่า Apache, PHP และ MySQL ที่ใช้งานได้บน MacOS ด้วย Homebrew เพื่อช่วยในการพัฒนาเว็บไซต์ในเครื่อง มีโซลูชันอื่น ๆ ที่มีให้เลือก เช่น MAMP ซึ่งคล้ายกับ WAMP บน Windows คำแนะนำนี้มีจุดประสงค์เพื่อตั้งค่าทุกอย่างด้วยตนเองและทำความเข้าใจว่าแต่ละส่วนทำงานอย่างไรและทำงานร่วมกันเป็นโซลูชันทั้งหมดได้อย่างไร
1. ทำให้ Apache ทำงาน
โดยปกติบน MacOS จะมี Apache ติดตั้งมาให้แล้วและสามารถใช้งานได้ หากต้องการค้นหา Apache สามารถลองรันคำสั่งด้านล่างได้
brew services restart httpd
สามารถพบผลลัพธ์ด้านล่าง
Stopping `httpd`... (might take a while)
==> Successfully stopped `httpd` (label: homebrew.mxcl.httpd)
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
หากต้องการยืนยันว่ากำลังทำงาน สามารถออกคำสั่งด้านล่าง
ps -ef | grep httpd
ควรเห็นผลลัพธ์ที่คล้ายกันด้านล่าง
501 13800 1 0 11:43PM ?? 0:01.71 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13805 13800 0 11:43PM ?? 0:00.02 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13806 13800 0 11:43PM ?? 0:00.01 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13807 13800 0 11:43PM ?? 0:00.01 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13808 13800 0 11:43PM ?? 0:00.02 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13809 13800 0 11:43PM ?? 0:00.01 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13818 13800 0 11:43PM ?? 0:00.05 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13820 13800 0 11:43PM ?? 0:00.12 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 13821 13800 0 11:43PM ?? 0:00.01 /opt/homebrew/opt/httpd/bin/httpd -D FOREGROUND
501 26586 11613 0 9:52AM ttys018 0:00.01 grep httpd
หาก httpd กำลังทำงาน คุณควรเห็นกระบวนการสองสามอย่างกำลังแสดงอยู่
ต่อไปเราจะต้องค้นหาว่าไฟล์กำหนดค่าอยู่ที่ใด เพื่อที่เราจะสามารถทำการเปลี่ยนแปลงเพื่อใช้ PHP ได้ในภายหลัง รันคำสั่งด้านล่าง
httpd -V | grep SERVER_CONFIG_FILE
ผลลัพธ์ควรบอกตำแหน่ง
pike6@MacBook-Pro www % httpd -V | grep SERVER_CONFIG_FILE
-D SERVER_CONFIG_FILE="/opt/homebrew/etc/httpd/httpd.conf"
ในกรณีนี้คือที่ /opt/homebrew/etc/httpd/httpd.conf
2. ติดตั้ง PHP
ในคำแนะนำนี้ เราจะใช้ PHP 8.3 หากต้องการติดตั้ง PHP สามารถรันคำสั่งด้านล่าง
brew install [email protected]
นี่จะติดตั้ง PHP 8.3 บนเครื่องของคุณ เมื่อติดตั้งแล้ว สามารถรันคำสั่งด้านล่างเพื่อเพิ่มคำสั่ง php ไปยัง PATH
echo 'export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/[email protected]/sbin:$PATH"' >> ~/.zshrc
จากนั้นรันคำสั่ง source เพื่อให้การเปลี่ยนแปลงมีผล
source ~/.zshrc
ตรวจสอบว่า php version เป็น 8.3
php --version
ผลลัพธ์
PHP 8.3.17 (cli) (built: Feb 11 2025 22:03:03) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.17, Copyright (c) Zend Technologies
with Zend OPcache v8.3.17, Copyright (c), by Zend Technologies
3. ติดตั้ง MySQL
คำสั่งในการติดตั้ง MySQL ค่อนข้างตรงไปตรงมา
brew install mysql
เมื่อติดตั้งแล้ว สามารถรันคำสั่งด้านล่างเพื่อเริ่มบริการ mysql
brew services start mysql
หากต้องการเข้าถึงฐานข้อมูล ให้ออกคำสั่งด้านล่าง
mysql -u root -p
เมื่อระบบแจ้งให้ใส่รหัสผ่าน ให้กด ENTER คุณควรจะสามารถเข้าสู่ mysql shell ได้
หากคุณต้องการรักษาความปลอดภัยในการเข้าถึง mysql ของคุณ สามารถติดตั้งด้านล่างเพื่อตั้งรหัสผ่าน root (ขั้นตอนที่แนะนำ แต่ไม่จำเป็นสำหรับสภาพแวดล้อม lcoal)
mysql_secure_installation
4. อัปเดตการกำหนดค่า Apache
หากเราต้องการทำให้ Apache, PHP และ MySQL ทำงานร่วมกัน เราจำเป็นต้องทำการเปลี่ยนแปลงการกำหนดค่า http ในขั้นตอนที่ 1 จำเป็นต้องมีการเปลี่ยนแปลงด้านล่างใน /opt/homebrew/etc/httpd/httpd.conf
- เพิ่มบรรทัดด้านล่างเพื่อเปิดใช้งาน php module
LoadModule php_module /opt/homebrew/opt/[email protected]/lib/httpd/modules/libphp.so - อัปเดต DocumentRoot และ Directory เป็นไดเรกทอรี root ของเว็บไซต์ของคุณ
DocumentRoot "/Users/pike6/work/project/website/www" <Directory "/Users/pike6/work/project/website/www"> AllowOverride All Require all granted </Directory
- (ไม่บังคับ) หากคุณต้องการตั้งค่าเว็บไซต์มากกว่าหนึ่งเว็บไซต์บนเครื่องของคุณ คุณอาจต้องเปิดใช้งาน virtual hosts สามารถทำได้โดยยกเลิกการใส่ความคิดเห็น
Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf - จากนั้นแก้ไข
/opt/homebrew/etc/httpd/extra/httpd-vhosts.confเพิ่มรายการบางอย่างเช่นด้านล่างขึ้นอยู่กับความต้องการของคุณ
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/Users/pike6/work/project/website/www" ServerName website1.localhost ErrorLog "/opt/homebrew/var/log/httpd/www-error.log" CustomLog "/opt/homebrew/var/log/httpd/www-access.log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/Users/pike6/work/project/website/website2" ServerName website2.localhost ErrorLog "/opt/homebrew/var/log/httpd/website2-error.log" CustomLog "/opt/homebrew/var/log/httpd/website2-access.log" common </VirtualHost> - แก้ไข /etc/hosts เพิ่มการแมปที่อยู่ด้านล่างเพื่อให้ ServerName ใหม่ด้านบนสามารถแมปกับ 127.0.0.1 ได้
127.0.0.1 website1.localhost 127.0.0.1 website2.localhost - ใน
/opt/homebrew/etc/httpd/httpd.confเพิ่มด้านล่างสำหรับทุกเว็บไซต์ใหม่
<Directory "/Users/pike6/work/project/website/website1"> AllowOverride All Require all granted </Directory> <Directory "/Users/pike6/work/project/website/website2"> AllowOverride All Require all granted </Directory>
- (ไม่บังคับ) หากคุณต้องการตั้งค่าเว็บไซต์มากกว่าหนึ่งเว็บไซต์บนเครื่องของคุณ คุณอาจต้องเปิดใช้งาน virtual hosts สามารถทำได้โดยยกเลิกการใส่ความคิดเห็น
- ขึ้นอยู่กับความต้องการของคุณ คุณอาจต้องยกเลิกการใส่ความคิดเห็นด้านล่างเนื่องจากคุณอาจมีเอ็นจิน rewrite บางตัวเปิดใช้งานใน
.htaccessของคุณ
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
ตอนนี้ด้วยขั้นตอนข้างต้น ให้รีสตาร์ทบริการ httpd และเข้าถึงไซต์ของคุณด้วย website1.locahost ควรใช้งานได้
โบนัส 1
หากคุณต้องการ phpMyAdmin ด้วย สามารถรันด้านล่าง
brew install phpmyadmin
หลังการติดตั้ง ให้เพิ่มด้านล่างใน httpd conf /opt/homebrew/etc/httpd/httpd.conf
Alias /phpmyadmin /opt/homebrew/share/phpmyadmin
<Directory /opt/homebrew/share/phpmyadmin/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
<IfModule mod_authz_core.c>
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
</Directory>
รีสตาร์ทบริการ httpd
brew services restart httpd
โบนัส 2
หากคุณไม่พบว่าไซต์ของคุณทำงานหลังจากเริ่มบริการ httpd คุณสามารถตรวจสอบก่อนว่าบริการเริ่มต้นและรับฟังที่พอร์ตที่คุณระบุหรือไม่
lsof -i :80
หากพอร์ตไม่ได้ฟัง แสดงว่าบริการไม่ได้เริ่มต้นสำเร็จ คุณสามารถตรวจสอบว่ามีการให้สิทธิ์ผู้ใช้ที่ถูกต้องหรือความเป็นเจ้าของ httpd หรือไม่ ตัวอย่างเช่น คุณสามารถตรวจสอบเจ้าของ /opt/homebrew/opt/httpd/bin/httpd หากไม่ใช่ชื่อผู้ใช้ของคุณ คุณอาจไม่สามารถเริ่มต้นได้โดยใช้เพียง brew คุณอาจต้องใช้ sudo brew หรือคุณสามารถเปลี่ยนเจ้าของเป็นชื่อผู้ใช้ของคุณได้หากคุณเป็นเจ้าของเครื่องเท่านั้น
Thanks for this description. Please let me add:
On my computer, Apache was not installed initially. I needed to `brew install httpd`. Same for `brew install phpmyadmin`.
And the freshly installed httpd.conf missed some settings:
SetHandler application/x-httpd-php
</FilesMatch>
And optionally