Recently I’ve been doing some hacking for Chamilo LMS, a Free Software E-Learning system. For various reasons I had to do this on OSX, which meant setting up a web development environment.
This lead me to MAMP, an OSX bundle with Apache + MySQL + PHP. However MAMP had many weird quirks that forced me to maintain a local set of patches just to get things working.
I finally had the time to look into a saner option, take some notes in the process, and write a blog post.
A popular alternative was using OSX’s installed Apache with a newer PHP version from Homebrew. This sounded dangerous because you can’t just
apt-get install --reinstall apache if you break something.
I preferred a pure Homebrew installation also because:
- No need for root. Everything is user–writable in
- Vanilla versions for everything, and easy to keep up–to–date with upstream.
- Easy to destroy and replicate.
- Usable, non–root, PEAR.
- You would brew most of this for a hybrid setup anyway.
I couldn’t find a simple and straightforward resource for this specific setup, so I present you with my tutorial/recipe to get Apache + MySQL + PHP, via Homebrew, running on OSX.
#1- A healthy Homebrew install
First of all you need to install Homebrew. Head over to Homebrew’s homepage for instructions. Even if you already have it, I recommend a health check and an update+upgrade:
$ brew doctor
$ brew update && brew upgrade
Pay attention to whatever that says and follow the instructions if there’s any.
You also want to add Homebrew binary paths to your
$PATH, even if the directories don’t exist yet. Add this to
.bash_profile or whatever your shell uses:
#2- Brewing Apache (httpd)
If you are going to use Homebrew’s Apache (recommended) then you have to brew Apache before PHP. You can do so with:
$ brew tap homebrew/apache
$ brew install httpd24
When that’s done burning your lap, you can start configuring Apache. I chose to keep
httpd.conf as pristine as possible and do everything in a VirtualHost.
Now make sure that httpd.conf contains this two important lines, and they are not commented out:
LoadModule php7_module /usr/local/Cellar/php70/7.0.10_1/libexec/apache2/libphp7.so
And then make sure httpd-vhosts.conf contains something useful: example gist in GitHub.
#3- PHP and all its additional recipes
The PHP recipes are maintained in a different tap too, but don’t worry, this is not a duct–taped chaos, it’s properly maintained:
$ brew tap homebrew/php
$ brew install php70 --with-homebrew-apxs
$ brew install php70-intl
Note: You might need to create a
/usr/local/Cellar/apr/1.5.2 symlink to
/usr/local/Cellar/apr/1.5.2_1, because at the time of writing this there’s a bug breaking apr, which PHP requires to build.
Also note that you don’t need php70-intl, but I suggest you brew for internationalization’s sake.
After the installation there are two quick things to do. First, timezone configuration:
date.timezone = America/Lima (or whatever works for you)
Note: If you ever get any PEAR permissions error or warning, see the info for the php recipe:
$ brew info php70
#4- Setting up boring MySQL
Now let’s brew MySQL:
$ brew install mysql
With that done, go ahead and secure the installation defaults:
$ mysql.server start
Remember: You shouldn’t use
sudo, so be careful with your muscle memory!
#5- Brownie points: PHPMyAdmin
In my virtual hosts configuration I included some lines for PHPMyAdmin. That’s because I’m old school and I love PHPMyAdmin. You can follow into my wrinkled foot steps with:
$ brew install phpmyadmin
You can check everything is fine by creating an
index.php with a call to
phpinfo() inside your configured root from
Make sure OSX’s Apache is not running and start (or restart) the servers:
$ apachectl start/stop/graceful(restart)
$ mysql.server start/stop/restart
Enjoy your success. Maybe do a victory dance:
This might seem like a lot of work, but it’s fairly quick with this cheat sheet. It’s also very safe and easy to keep updated with
brew update && upgrade.
A final note: All the suggestions and instructions that are printed after installing each package can be read again with
brew info <recipe>. No need to write them down.
Last updated on 2016-08-22: Apache 2.4.18, PHP 7.0.10, MySQL 5.7.14 and OSX 10.11.6.