macOS Mojave Setup: Homebrew + Apache + PHP + MariaDB
13.08.2019# macOS Mojave Setup: Homebrew + Apache + PHP + MariaDB This document provides help on getting your macOS development environment up and running with the latest versions of Homebrew, Apache, PHP, etc. ![Homebrew Logo](https://upload.wikimedia.org/wikipedia/commons/3/34/Homebrew_logo.png) ## Homebrew Installation [Homebrew](https://brew.sh/) is an excellent package manager for macOS; let's install it. $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" ### Add the Homebrew taps we need. $ brew tap homebrew/core ### Homebrew can self-diagnose and check your system for potential problems. Let's see if everything is working the way it should. $ brew doctor <blockquote>If successful it should display "Your system is ready to brew."</blockquote> ## Apache Installation macOS comes with [Apache](https://httpd.apache.org/) pre-installed. We don't want Apple in control of 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: $ mkdir ~/Sites <blockquote>macOS automatically adds the compass icon to your folder.</blockquote> Now, let's brew and configure our new Apache version and change it to run on standard ports (80/443). $ 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 You can watch the Apache error log in a new Terminal tab/window during a restart to see if anything is invalid or causing a problem: $ tail -f /usr/local/var/log/httpd/error_log Remember useful commands. $ sudo apachectl start $ sudo apachectl stop $ sudo apachectl -k restart $ sudo apachectl configtest ## PHP Installation Install the latest [PHP](http://php.net/) version. $ brew install php The php.ini file can be found in: <code>/usr/local/etc/php/7.x/php.ini</code>. ## Apache PHP Setup You have successfully installed PHP, but you need to tell Apache to use it. Edit the httpd.conf file. vi /usr/local/etc/httpd/httpd.conf Find **Listen 8080** and change it to port 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 php7_module /usr/local/opt/php/lib/httpd/modules/libphp7.so Update user and group. User username Group staff Servername is disabled by default, set it to **localhost**: #ServerName www.example.com:8080 ServerName localhost Modify httpd.conf a bit more. Change DocumentRoot; it makes up the basic document tree, which will be visible from the web. DocumentRoot "/Users/username/Sites" <Directory "/Users/username/Sites"> AllowOverride All Check that directive DirectoryIndex includes <code>index.php</code>. 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 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. $ sudo apachectl -k restart 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 <code>apachectl -t</code>. $ sudo apachectl configtest <blockquote>If it says "Syntax OK" open browser using http://127.0.0.1. You should see a message saying, “It works!”</blockquote> <code>php -v</code> should report something like... <pre>PHP 7.3.7 (cli) (built: Jul 5 2019 12:44:05) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.7, Copyright (c) 1999-2018, by Zend Technologies </pre> ## SSL/Virtual Hosts 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> Save the file plus generate a key and certificate. $ cd /usr/local/etc/httpd $ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt Open up <code>/usr/local/etc/httpd/extra/httpd-vhosts.conf</code> and add your own SSL based virtual hosts. $ vi /usr/local/etc/httpd/extra/httpd-vhosts.conf Create your virtual host entries. vi /usr/local/etc/httpd/extra/httpd-vhosts.conf <VirtualHost *:80> ServerName yourprojectdomain.com DocumentRoot "/Users/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/username/Sites/yourprojectname" ServerName yourprojectdomain.com SSLEngine on SSLCertificateFile "/usr/local/etc/httpd/server.crt" SSLCertificateKeyFile "/usr/local/etc/httpd/server.key" </VirtualHost> In Terminal, restart Apache. $ sudo apachectl restart ## MariaDB Installation Install [MariaDB](https://mariadb.org/) with Homebrew. $ brew install mariadb Have MariaDB start on boot. $ brew services start mariadb Finally, let's improve the security of your installation and add a password. $ mysql_secure_installation Restart the MariaDB server. $ brew services restart mariadb After MariaDB Server is started, you can log in: mysql -u root