I’ve been a long time MAMP user, but I recently upgraded my laptop and decided to do a fresh install of everything, and a ground up re-configuration of all my dev environments (a fair bit of mucking about with PHP, Ruby, Java, Python and trying Go).
After a short while researching it became clear the best tool for the job would be Homebrew – it gives you much more control of the environment than MAMP, without the Macports heartache.
In this post I’ll run through using Homebrew on OSX Mountain Lion for a Mysql+PHP CGI setup – I’ll document adding a webserver to this stack in a later post, my immediate need is for a PHP CGI environment.
Setup Homebrew
Before you do any of this, go grab Xcode from the App Store. Hope you’re not on a 3G internet connection, it’s a 1.6GB install! Go grab a coffee while you wait. After that’s installed you’re also going to need to go to Xcode > Preferences and install the command-line tools, another 100+ MB install.
The Homebrew install from their own site is just:
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" |
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
Setup PHP
Homebrew uses the tap
command to import more sources for install scripts. See what they did there? I use the homebrew-php project, seems awesome – loads of support, docs and info on the project page, all going to plan you’ll just need these two commands below.
brew tap josegonzalez/homebrew-php
brew tap homebrew/dupes |
brew tap josegonzalez/homebrew-php
brew tap homebrew/dupes
You can review all the options with the brew options php54
command, if you want mysql and CGI, use the command below that I used.
brew install --with-mysql --with-cgi php54 |
brew install --with-mysql --with-cgi php54
It’ll run through a bunch of downloading/compiling steps but the end result should be that you get the following test output:
/usr/local/bin/php-cgi --version
PHP 5.4.12 (cgi-fcgi) (built: Mar 19 2013 14:39:37)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies |
/usr/local/bin/php-cgi --version
PHP 5.4.12 (cgi-fcgi) (built: Mar 19 2013 14:39:37)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Setup MySQL
It’s super easy, watch.
Then just follow the instructions that get blurted out during the Homebrew install of mysql.
Slight catch is, if your OSX is anything like mine you’ll need to run this first:
mkdir -p /usr/local/var/mysql |
mkdir -p /usr/local/var/mysql
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp |
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
I also got this warning:
WARNING: Found existing config file /usr/local/opt/mysql/my.cnf on the system.
which you can safely fix with:
#backup existing
mv /usr/local/opt/mysql/my.cnf /usr/local/opt/mysql/my.cnf.old
#move new
mv /usr/local/opt/mysql/my-new.cnf /usr/local/opt/mysql/my.cnf |
#backup existing
mv /usr/local/opt/mysql/my.cnf /usr/local/opt/mysql/my.cnf.old
#move new
mv /usr/local/opt/mysql/my-new.cnf /usr/local/opt/mysql/my.cnf
There’s also a lot of good advice for securing your mysql install blurted out during the install process, ignore it at your peril. Test your handiwork by checking you can access the mysql commandline prompt:
mysql -uroot
# or, with the password you set. You set one, right?
mysql -uroot -p |
mysql -uroot
# or, with the password you set. You set one, right?
mysql -uroot -p
Other Notes
I noticed that the Homebrew installed PHP didn’t seem to support $_ENV
in scripts, instead the $_SERVER
array seems to be used – the Macports PHP with CGI support did seem to work with $_ENV
. It might be a subtle version difference, I’m actually not sure, and decided not to spend time trying to figure it out. Just update scripts that depend on $_ENV, to use $_SERVER. If someone knows what’s behind this, please share.
So, that should be it, PHP with CGI support and MySQL installed and ready to rock. If I missed anything let me know.