Simple OSX and MAMP development platform.

Categories: General

Like it or not, MAMP is an excellent tool for local development. If you work on multiple sites or projects at the same time across different frameworks and or CMS’s then MAMP will make your life simple. This MAMP development setup is what I have used for years while working on many freelance projects, personal projects, and obviously the day to day work projects.

In my opinion, things like Vagrant and Docker have their place but tend to overcomplicate and slow down local development. If you like Vagrant and Docker then keep at it. But consider being responsible for 40 different sites, all with various changes and updated. Good luck!

Some MAMP pros include all local sites being accessible at the same time, simple MySQL administration with PHP MyAdmin or Sequal Pro.

But some of the negatives can come once you have made changes to various config files and then go to update MAMP or add newer versions of PHP. Sometimes your configs will break, and MAMP is not set up like your Ubuntu VPS, things are not in the same locations. Most Unix commands won’t work ( Thanks, Apple ).

But as you become more and more familiar with MAMP it’s not all that bad. In fact, I think it’s the best option going.

Install MAMP 4:

Download:

Set up your document root.

Set the Web Server to Apache
Set the Document Root to ~/Sites Or where ever you keep your PHP projects.

Setup your VirtualHosts

Open and edit /Applications/MAMP/conf/apache/httpd.conf Search for DocumentRoot Change the path to /Users/yourusername/Sites

Look for # Virtual hosts and uncomment the line ( delete the # )

Create an entry in /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

<VirtualHost *:80>
    DocumentRoot "/Users/yourusername/Sites/mydomain.ca"
    ServerName mydomain.local
</VirtualHost>

Enable PHP 7

Install Memcached:

$ brew install memcached

Launch Memcached when the computer starts.

$ ln -sfv /usr/local/opt/memcached/*.plist ~/Library/LaunchAgents

Enable Memcached with PHP.

Open /Applications/MAMP/bin/php/php7.0.12/conf/php.ini

Look for ; Extensions and uncomment extension=memcached.so

Install Redis (Optional):

$ brew install redis

Launch Redis on computer starts.

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

Start Redis server via “launchctl”.

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Test if Redis server is running.

$ redis-cli ping

If it replies “PONG”, then it’s good to go!

Start Redis server using a configuration file.

$ redis-server /usr/local/etc/redis.conf

Stop Redis on autostart on computer start.

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Location of Redis configuration file.

/usr/local/etc/redis.conf

Uninstall Redis and its files.

$ brew uninstall redis
$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Get Redis package information.

$ brew info redis

Setup MAMP 4:

Configure PHP

Open /Applications/MAMP/bin/php/php7.0.12/conf/php.ini

Enable short tags
While WordPress coding standards won’t allow short tags to be enabled… Who really has time for that.

short_open_tag = On

Download the Reis extension:

Copy redis.so from the appropriate subdirectory of this repo to /Applications/MAMP/bin/php/php5.x.x/lib/php/extensions/no-debug-non-zts-200xxxxx (Change to your PHP version)

Look for ; Extensions and Enable Memcached and Redis extensions.

extension=redis.so
extension=memcached.so

Enable Xdebug at the bottom of the file by Deleting the ; . It should already be there but will be commented out.

[xdebug]
zend_extension="/Applications/MAMP/bin/php/php7.0.12/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so"

Configure your local DNS (Optional)

The Mac OS hosts file will not allow us to use wildcard subdomains, To get around this we can use a local DNS Proxy called DNSMasq.

brew install dnsmasq

The configuration is stored in dnsmasq.conf under /usr/local/etc/.

touch /usr/local/etc/dnsmasq.conf

Inside add the following line.

address=/.local/127.0.0.1

This will tell any request coming in at *.dev to use our local IP. 127.0.0.1.

Load DNSMasq at start

sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Start and Stop

sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq

We now need to configure our mac OS to use the new local DNS server.

To do this, Go to System Preferences and then Network. For DNS configuration add your local IP 127.0.0.1 first followed by your usual DNS IP addresses:

127.0.0.1
1.1.1.1
2.2.2.2

To confirm that this is working, ping a local .local site.

$ ping test.local
PING test.local (127.0.0.1): 56 data bytes

Every now and then I come back to this article to get things set up for myself or co-workers. Since writing this MAMP 5 has come out and there are some small updates. You can read more about them here


Adam Patterson

Adam Patterson

User Interface Designer & Developer with a background in UX. I have spent 5 years as a professionally certified bicycle mechanic and ride year-round.

I am a husband and father of two, I enjoy photography, music, movies, coffee, and good food.

You can find me on Twitter, Instagram, and YouTube!