macOS Ventura 13.0 Setup: Homebrew + Apache + PHP + MariaDB
This document helps keep your macOS development environment up and running with the latest Homebrew, Apache, PHP, and MariaDB.
Before we start, if you haven’t already installed XCode Command Line Tools on your system, let’s do that.
$ xcode-select --install
Homebrew Installation
Homebrew is an excellent package manager for macOS. Homebrew installs the stuff you need that Apple (or your Linux system) didn’t; let’s install it.
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Homebrew can self-diagnose and check your system for potential problems. Let’s see if everything is working the way it should.
$ brew doctor
If the installation is successful, the output will be:
Your system is ready to brew.
Otherwise, please follow the instructions to fix any potential issues.
Apache Installation
macOS 13.0 Ventura comes with Apache 2.4 pre-installed. However, we don’t want Apple to control our web server so let’s stop it and prevent it from starting on boot.
$ sudo apachectl stop
$ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
Type the following command into your terminal to create a new folder in your user’s root directory.
$ mkdir ~/Sites
💡 Tip: macOS automatically adds the compass icon to your folder.
Now, let’s brew and configure our new Apache version. We will update it to run on standard ports (80/443) shortly.
$ brew install httpd
Check the installation path.
$ which apachectl
/usr/local/bin/apachectl
Set Apache to start now and restart at login.
$ sudo brew services start httpd
💡 Tip: You can monitor the Apache error log in a new Terminal tab/window to see if anything is invalid or causing a problem.
$ tail -f /usr/local/var/log/httpd/error_log
💡 Tip: Remember useful Apache ‘brew services’ commands.
$ brew services stop httpd
$ brew services start httpd
$ brew services restart httpd
PHP Installation
Install the latest PHP version.
$ brew install php
The php.ini file can be found in: /usr/local/etc/php/8.x/php.ini
.
Apache PHP Setup
Now that we have PHP successfully installed, we still need to tell Apache to use it. Please edit the Apache httpd.conf
file.
vi /usr/local/etc/httpd/httpd.conf
Find Listen 8080 and change the port to 80:
Listen 80
Uncomment the following lines.
LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
LoadModule userdir_module lib/httpd/modules/mod_userdir.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Add the following entry at the end of the LoadModules section.
LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so
Update User and Group where your_username is the name of your User in macOS and Group will be “staff.”
User your_username
Group staff
Servername is disabled by default; set it to localhost:
#ServerName www.example.com:8080
ServerName localhost
Let’s modify httpd.conf a bit more. Change DocumentRoot; it makes up the basic document tree, which will be visible from the web.
DocumentRoot "/Users/your_username/Sites"
<Directory "/Users/your_username/Sites">
AllowOverride All
Check that directive DirectoryIndex includes index.php
.
DirectoryIndex index.php index.html
And we need to add the FilesMatch
directive so that Apache will now process PHP files.
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Uncomment the following to enable user home directories, virtual hosts, and secure (SSL/TLS) connections.
Include /usr/local/etc/httpd/extra/httpd-userdir.conf
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
Include /usr/local/etc/httpd/extra/httpd-ssl.conf
Restart apache.
$ brew services restart httpd
Run a configuration file syntax test to verify/validate the configuration. It reports “Syntax Ok” or detailed information about the particular syntax error. This is equivalent to sudo apachectl -t
.
$ sudo apachectl configtest
If it says “Syntax OK,” open a browser using http://127.0.0.1. You should see a message saying, “It works!”
Then type php -v
in the terminal. It should report something like the following.
PHP 8.1.9 (cli) (built: Aug 4 2022 15:12:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.9, Copyright (c) Zend Technologies
with Zend OPcache v8.1.9, Copyright (c), by Zend Technologies
MariaDB Installation
Install MariaDB using Homebrew.
$ brew install mariadb
Let’s have MariaDB start automatically on boot.
$ brew services start mariadb
You will see something like the following.
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)
Improve the security of the installation and change the database’s root password.
$ sudo /usr/local/bin/mysql_secure_installation
You will be prompted with:
Enter current password for root (enter for none):
Press return here.
Change the root password, and continue with the prompts.
Change the root password? [Y/n]
When you get to the following prompt, enter Y to reload privileges.
Reload privilege tables now?
When finished, restart the MariaDB server.
$ brew services restart mariadb
You can now try logging into MariaDB.
mysql -u root -p
If successful, you should see the following.
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.5.8-MariaDB HomebrewCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>
SSL/Virtual Hosts
The OpenSSL software library is a prerequisite to generate a certificate. Check if OpenSSL is available by running the following command in the local environment.
$ which openssl
/usr/bin/openssl
We need to install OpenSSL if the which
command does not return a path.
$ brew install openssl
Change default 8443 ports to 443 in the SSL configuration file.
$ vi /usr/local/etc/httpd/extra/httpd-ssl.conf
Replace all lines that say ‘8443’ with ‘443’.
ServerName www.example.com:443<VirtualHost _default_:443>
After the file has been saved, follow the prompts to generate a key and a self-signed certificate.
$ cd /usr/local/etc/httpd
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Open up /usr/local/etc/httpd/extra/httpd-vhosts.conf
and add your own SSL-based virtual host entries.
$ vi /usr/local/etc/httpd/extra/httpd-vhosts.conf<VirtualHost *:80>
ServerName yourprojectdomain.com
DocumentRoot "/Users/your_username/Sites/yourprojectname"
ErrorLog "/usr/local/var/log/httpd/yourprojectname-error_log"
CustomLog "/usr/local/var/log/httpd/yourprojectname-access_log" common
</VirtualHost><VirtualHost *:443>
DocumentRoot "/Users/your_username/Sites/yourprojectname"
ServerName yourprojectdomain.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/httpd/server.crt"
SSLCertificateKeyFile "/usr/local/etc/httpd/server.key"
</VirtualHost>
Finally, in the Terminal window, restart Apache.
$ brew services restart httpd
License
Copyright © 2022 Karl Hill.
Provided under the MIT license.
Whether you use these instructions or have learned something from them, please consider supporting me with a star ⭐ and a follow 🔥.