Hướng dẫn · 18/09/2026

Hướng dẫn cài đặt PHP, MySQL và Apache trên macOS bằng Homebrew

Homebrew giúp tách môi trường lập trình khỏi các thành phần hệ thống đi kèm macOS và làm cho việc nâng cấp, gỡ bỏ dễ kiểm soát hơn. Bài viết này dựng một bộ PHP, MySQL và Apache phục vụ phát triển local, áp dụng được cho cả máy Apple Silicon và Intel.

Hướng dẫn cài đặt PHP, MySQL và Apache trên macOS bằng Homebrew

Homebrew giúp tách môi trường lập trình khỏi các thành phần hệ thống đi kèm macOS và làm cho việc nâng cấp, gỡ bỏ dễ kiểm soát hơn. Bài viết này dựng một bộ PHP, MySQL và Apache phục vụ phát triển local, áp dụng được cho cả máy Apple Silicon và Intel.

Chuẩn bị Homebrew và Command Line Tools

xcode-select --install
brew --version
brew update

Nếu chưa có Homebrew, cài theo lệnh chính thức tại brew.sh. Không hardcode đường dẫn /opt/homebrew hoặc /usr/local; dùng brew --prefix để cấu hình hoạt động trên cả hai kiến trúc.

Cài PHP, MySQL và Apache

brew install php mysql httpd
php -v
mysql --version
$(brew --prefix httpd)/bin/httpd -v

Homebrew cài Apache dưới tên formula httpd. Cấu hình mặc định dùng cổng 8080 để không cần quyền quản trị. Document root mặc định nằm tại $(brew --prefix)/var/www.

Khởi động dịch vụ

brew services start php
brew services start mysql
brew services start httpd
brew services list

Mở http://localhost:8080 để kiểm tra Apache. Nếu chỉ muốn chạy trong phiên terminal hiện tại, có thể dùng lệnh trực tiếp thay cho brew services.

Khởi tạo và bảo vệ MySQL local

mysql_secure_installation
mysql -u root -p

Trong dự án thật, nên tạo database và tài khoản riêng thay vì để ứng dụng dùng root:

CREATE DATABASE demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'demo'@'localhost' IDENTIFIED BY 'local_password';
GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'localhost';
FLUSH PRIVILEGES;

Kết nối PHP với Apache

Mở file $(brew --prefix)/etc/httpd/httpd.conf. Đường dẫn module PHP thay đổi theo phiên bản và kiến trúc, vì vậy hãy tìm chính xác bằng:

brew --prefix php
find "$(brew --prefix php)" -name 'libphp.so'

Nếu formula PHP hiện tại cung cấp module Apache, thêm dòng LoadModule theo đường dẫn vừa tìm được, rồi cấu hình xử lý tệp PHP:

<IfModule php_module>
    DirectoryIndex index.php index.html
    AddType application/x-httpd-php .php
</IfModule>

Một số phiên bản Homebrew có thể ưu tiên PHP-FPM thay vì libphp. Khi không tìm thấy module, dùng PHP-FPM và cấu hình proxy_fcgi; không lấy đường dẫn từ một bài cũ rồi dán nguyên vào máy.

Tạo Virtual Host cho dự án

<VirtualHost *:8080>
    ServerName demo.test
    DocumentRoot "/Users/yourname/Sites/demo/public"
    <Directory "/Users/yourname/Sites/demo/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Bật file virtual hosts trong httpd.conf, sau đó thêm 127.0.0.1 demo.test vào /etc/hosts. Kiểm tra cấu hình trước khi restart:

$(brew --prefix httpd)/bin/httpd -t
brew services restart httpd

Kiểm tra PHP và extension MySQL

php -m | grep -E 'mysqli|pdo_mysql'
php --ini
echo '<?php phpinfo();' > "$(brew --prefix)/var/www/info.php"

Truy cập trang kiểm tra rồi xóa info.php ngay sau đó vì trang này tiết lộ nhiều thông tin cấu hình.

Lỗi thường gặp

  • Cổng 8080 bị chiếm: dùng lsof -nP -iTCP:8080 -sTCP:LISTEN hoặc đổi Listen.
  • Apache tải tệp PHP thay vì chạy: kiểm tra module/FPM, AddType và log Apache.
  • Lệnh PHP trỏ sai bản: kiểm tra which php, PATH và chạy brew link --overwrite php khi thật sự cần.
  • MySQL không khởi động: xem brew services list và log trong thư mục data của formula.

Checklist hoàn tất

  1. Apache trả về trang local trên đúng cổng.
  2. php -v và trang web dùng cùng phiên bản PHP.
  3. Ứng dụng kết nối bằng tài khoản MySQL riêng.
  4. Virtual Host trỏ đúng thư mục public.
  5. Không đưa mật khẩu thật hoặc phpinfo() vào repository.

Nguồn tham khảo

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.