Guide to Setup Apache, PHP and MySQL on MacOS with Homebrew

English 简体中文 繁体中文 ภาษาไทย Tiếng Việt
Summary

Developers can establish a robust local web development environment on macOS by leveraging Homebrew to install Apache, PHP, and MySQL. The setup involves installing each component via `brew`, starting their respective services, and then configuring Apache's `httpd.conf` to load the PHP module and define document roots. For multi-site development, enabling and configuring virtual hosts in `httpd-vhosts.conf` along with updating `/etc/hosts` is essential. After these configurations, restarting Apache integrates the stack, with optional steps for phpMyAdmin and troubleshooting tips for service startup issues.

คำแนะนำนี้มีไว้เพื่อตั้งค่า 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>​
  • ขึ้นอยู่กับความต้องการของคุณ คุณอาจต้องยกเลิกการใส่ความคิดเห็นด้านล่างเนื่องจากคุณอาจมีเอ็นจิน 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 หรือคุณสามารถเปลี่ยนเจ้าของเป็นชื่อผู้ใช้ของคุณได้หากคุณเป็นเจ้าของเครื่องเท่านั้น

PHP APACHE MYSQL PHPMYADMIN GUIDE MACOS HTTPD MULTIPLE WEBSITES

  RELATED

  COMMENTS

2
Frank
Aug 27, 2025 at 9:00 am

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:

  • Listen 80
  • <FilesMatch .php$>
      SetHandler application/x-httpd-php
    </FilesMatch>

And optionally

  • DirectoryIndex index.php
  • AllowOverride AuthConfig Options=Indexes
Ke Pi
Sep 16, 2025 at 11:10 pm

Great addition. This would help those who need it. Thx a lot