Hướng dẫn này nhằm thiết lập một môi trường Apache, PHP và MySQL có thể hoạt động trên MacOS với Homebrew để hỗ trợ phát triển website cục bộ. Có những giải pháp khác như MAMP tương tự như WAMP trên Windows, hướng dẫn này phục vụ mục đích tự thiết lập mọi thứ và hiểu cách từng phần hoạt động và cách chúng phối hợp với nhau như một giải pháp hoàn chỉnh.
1. Làm cho Apache hoạt động
Thông thường trên MacOS, Apache đã được cài đặt sẵn và có thể sử dụng. Để tìm Apache, bạn có thể thử chạy lệnh bên dưới.
brew services restart httpd
Bạn có thể thấy kết quả như sau
Stopping `httpd`... (might take a while)
==> Successfully stopped `httpd` (label: homebrew.mxcl.httpd)
==> Successfully started `httpd` (label: homebrew.mxcl.httpd)
Để xác nhận nó đang chạy, bạn có thể thực hiện lệnh bên dưới
ps -ef | grep httpd
Bạn sẽ thấy kết quả tương tự như bên dưới
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
Nếu httpd đang chạy, bạn sẽ thấy một vài tiến trình đang hiển thị.
Tiếp theo, chúng ta cần tìm vị trí của cấu hình để sau này có thể thay đổi nó để sử dụng PHP. Chạy lệnh bên dưới.
httpd -V | grep SERVER_CONFIG_FILE
Kết quả đầu ra sẽ cho biết vị trí.
pike6@MacBook-Pro www % httpd -V | grep SERVER_CONFIG_FILE
-D SERVER_CONFIG_FILE="/opt/homebrew/etc/httpd/httpd.conf"
Trong trường hợp này, nó nằm ở /opt/homebrew/etc/httpd/httpd.conf
2. Cài đặt PHP
Trong hướng dẫn này, chúng ta sẽ sử dụng PHP 8.3, để cài đặt PHP, bạn có thể chạy lệnh bên dưới
brew install [email protected]
Lệnh này sẽ cài đặt PHP 8.3 trên máy của bạn, sau khi cài đặt xong, bạn có thể chạy lệnh bên dưới để thêm lệnh php
vào PATH.
echo 'export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/opt/homebrew/opt/[email protected]/sbin:$PATH"' >> ~/.zshrc
Tiếp theo, chạy lệnh source để thay đổi có hiệu lực.
source ~/.zshrc
Xác minh phiên bản php là 8.3
php --version
Kết quả
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. Cài đặt MySQL
Lệnh để cài đặt MySQL khá đơn giản,
brew install mysql
Sau khi cài đặt, bạn có thể chạy lệnh bên dưới để khởi động dịch vụ mysql.
brew services start mysql
Để truy cập vào cơ sở dữ liệu, hãy thực hiện lệnh bên dưới
mysql -u root -p
Khi được hỏi mật khẩu, chỉ cần gõ ENTER, bạn sẽ có thể đăng nhập vào mysql shell.
Nếu bạn muốn bảo mật quyền truy cập mysql của mình, bạn có thể cài đặt lệnh bên dưới để đặt mật khẩu root (bước được khuyến nghị nhưng không cần thiết cho môi trường cục bộ).
mysql_secure_installation
4. Cập nhật cấu hình Apache
Nếu chúng ta muốn Apache, PHP và MySQL hoạt động cùng nhau, chúng ta cần thực hiện các thay đổi đối với cấu hình http trong Bước 1. Các thay đổi bên dưới là cần thiết cho /opt/homebrew/etc/httpd/httpd.conf
.
- Thêm dòng bên dưới để bật module php
LoadModule php_module /opt/homebrew/opt/[email protected]/lib/httpd/modules/libphp.so
- Cập nhật DocumentRoot và Directory thành thư mục gốc của trang web của bạn
DocumentRoot "/Users/pike6/work/project/website/www" <Directory "/Users/pike6/work/project/website/www"> AllowOverride All Require all granted </Directory
- (Tùy chọn) Nếu bạn muốn thiết lập nhiều hơn một trang web trên máy cục bộ của mình, bạn có thể cần bật virtual hosts. Điều này có thể được thực hiện bằng cách bỏ ghi chú
Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
- Sau đó chỉnh sửa
/opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
, thêm một số mục như bên dưới tùy thuộc vào nhu cầu của bạn.
<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>
- Chỉnh sửa /etc/hosts, thêm ánh xạ địa chỉ bên dưới để ServerName mới ở trên có thể được ánh xạ tới 127.0.0.1
127.0.0.1 website1.localhost 127.0.0.1 website2.localhost
- Trong
/opt/homebrew/etc/httpd/httpd.conf
, thêm đoạn mã bên dưới cho mỗi trang web mới.
<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>
- (Tùy chọn) Nếu bạn muốn thiết lập nhiều hơn một trang web trên máy cục bộ của mình, bạn có thể cần bật virtual hosts. Điều này có thể được thực hiện bằng cách bỏ ghi chú
- Tùy thuộc vào nhu cầu của bạn, bạn có thể cần bỏ ghi chú bên dưới vì bạn có thể có một số rewrite engine được bật trong
.htaccess
của bạn.
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Bây giờ với các bước trên, hãy khởi động lại dịch vụ httpd và truy cập trang web của bạn bằng website1.locahost
. Nó sẽ hoạt động.
Bonus 1
Nếu bạn cũng muốn phpMyAdmin, bạn có thể chạy lệnh bên dưới
brew install phpmyadmin
Sau khi cài đặt, hãy thêm đoạn mã bên dưới vào 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>
Khởi động lại dịch vụ httpd
brew services restart httpd
Bonus 2
Nếu bạn không thấy trang web của mình hoạt động sau khi khởi động dịch vụ httpd, bạn có thể kiểm tra trước xem dịch vụ có khởi động và lắng nghe ở cổng bạn đã chỉ định hay không.
lsof -i :80
Nếu cổng không lắng nghe, điều đó có nghĩa là dịch vụ chưa được khởi động thành công. Bạn có thể kiểm tra xem quyền người dùng hoặc quyền sở hữu httpd có chính xác hay không. Ví dụ: bạn có thể kiểm tra chủ sở hữu của /opt/homebrew/opt/httpd/bin/httpd
, nếu đó không phải là tên người dùng của bạn, bạn có thể không thể khởi động nó chỉ bằng cách sử dụng brew
, bạn có thể cần sudo brew
. Hoặc bạn có thể thay đổi chủ sở hữu thành tên người dùng của bạn nếu chỉ bạn sở hữu máy.