Apache, MySQL & PHP on macOS High Sierra
06 Dec 2017Apple macOS 10.13 ships with both a recent version of Apache (2.4.x), as well as PHP (7.1.x), so you’ll just have to install MySQL and go through a few steps to get everything up and running.
Apache
First, you have to create a web root in your user account:
mkdir ~/Sites
Then add a configuration for your user:
sudo tee /etc/apache2/users/$USER.conf <<EOF
<Directory "$HOME/Sites/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EOF
Now we have to make sure that our user config above actually gets loaded:
sudo tee -a /etc/apache2/other/$USER-settings.conf <<EOF
Include /private/etc/apache2/users/*.conf
EOF
If you want to use vhosts, you’ll also have to make sure that the vhosts config gets loaded:
sudo tee -a /etc/apache2/other/$USER-settings.conf <<EOF
Include /private/etc/apache2/extra/httpd-vhosts.conf
EOF
After that, configure vhosts as necessary in /etc/apache2/extra/httpd-vhosts.conf
(don’t forget to remove the examples in there).
It seems that mod_rewrite no longer gets loaded by default, so we’ll also add that to our config:
sudo tee -a /etc/apache2/other/$USER-settings.conf <<EOF
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
EOF
PHP
PHP doesn’t get loaded by default. So we’ll also add it to our config:
sudo tee -a /etc/apache2/other/$USER-settings.conf <<EOF
LoadModule php7_module libexec/apache2/libphp7.so
EOF
You should also configure a few settings in /etc/php.ini
:
sudo tee -a /etc/php.ini <<EOF
date.timezone = "`sudo systemsetup -gettimezone | awk '{print $3}'`"
display_errors = on
error_reporting = -1
EOF
To activate these settings you have to restart Apache:
sudo apachectl restart
MySQL
MySQL is not shipped with macOS, so we’ll have to install that manually. Instead of going for an installer package, we’ll use Homebrew. Once Homebrew is installed, installing MySQL is as simple as:
brew install mysql
If you want to start MySQL automatically, run:
brew services start mysql
Any comments? Ping me on Twitter. 👉🏻 Get my newsletter for occasional updates. ✌🏻