Setup Apache and PHP on macOS
This is how to quickly get a local web development server up and running on your macOS Catalina. Since Apache and PHP are already preinstalled, you only need to run a few commands in the Terminal and edit a couple of config files. This will enable you to have multiple websites running on your machine using any virtual domain names you like.
I have listed all the changes as Terminal commands so you can easily add them to a script if you like.
Note: all these commands require admin level access and will have to be invoked with sudo.
Local domain name
First we pick which domain name we'd like to make a website for. You can make up anything, even existing ones, but this would prevent you from visiting them online, so better choose something homemade:
grep -qxF '127.0.0.1 dev.mydomain.com' /etc/hosts || echo '127.0.0.1 dev.mydomain.com' | sudo tee -a /etc/hosts
The line above appends
127.0.0.1 dev.mydomain.com to the
/etc/hosts file if it doesn't already exist. Now this domain name will point to your local machine!
We are using the utility
tee to make things play nice with
sudo. The grep flags are:
-xmatch the whole line
-Fpattern is a plain string
Apache and PHP
Everything you need should already be installed with macOS Catalina, we just need to enable PHP and the virtual hosts in the Apache config:
sudo sed -i '' 's,#\(Include.*httpd-vhosts.conf\),\1,' /etc/apache2/httpd.conf sudo sed -i '' 's,#\(LoadModule rewrite_module.*\),\1,' /etc/apache2/httpd.conf sudo sed -i '' 's,#\(LoadModule php7_module.*\),\1,' /etc/apache2/httpd.conf
Now your config file
/etc/apache2/httpd.conf should look something like this:
We configure Apache to serve our virtual hosts in the file
/etc/apache2/extra/httpd-vhosts.conf. It should already have some examples and you can edit/add your own:
<VirtualHost *:80> ServerName dev.mydomain.com ServerAdmin [email protected] DocumentRoot "/Users/me/mydomain/public" ErrorLog "/Users/me/mydomain/error.log" CustomLog "/Users/me/mydomain/access.log" common <Directory "/Users/me/mydomain/public"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Require all granted </Directory> </VirtualHost>
This will serve dev.mydomain.com on port 80 (default) from the folder
<Directory> instruction configures folder permissions necessary in the latest macOS versions.
In case you want to script this, you can replace the config with a symlink to your own config:
# make a backup of the file to "httpd-vhosts.conf.bak" sudo cp /etc/apache2/extra/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf.bak # create a symlink to your own version of the file (e.g. from Dropbox) sudo ln -sf ~/myconfigs/httpd-vhosts.conf /etc/apache2/extra/httpd-vhosts.conf
You should substitute the correct paths to your website and config of course.
After you have completed these configuration steps, you just need to (re)start Apache for the changes to take effect:
sudo apachectl restart
You can add as many local virtual websites as you'd like, and you could put all these instructions in a setup script if you find yourself switching computers often.