Professional Documents
Culture Documents
I’ve been using this particular configuration, or one quite like it, for several
years, but when I picked up a new laptop recently, I decided to start from
scratch. There were a ton of settings, scripts, and programs installed on my
old machine that I no longer used, and I wanted them gone.
Feel free to use this guide on any Mac, but you may find that there are
differences on your machine if it’s not a fresh install of OS X. These are the
exact steps I used to get things running on my machine, and it’s been
tested on many machines.
MAMP is a package that will install MySQL, PHP, and Apache on your Mac
all with one download, and a quick install. It’s a great option and MAMP
Pro, the paid version, will provide most of the features you need to run
multiple web sites on your machine. I don’t use it because most of what it
offers is already a part of OS X, and I prefer to customize my environment
beyond what MAMP provides out of the box. If I’m already going to be
playing around with the config files, I may as well go the distance. The
main benefit of MAMP is that it leaves all your default system settings
alone, sandboxing your development environment. I don’t get any benefit
out of that. It also allows you to easily turn on and off services. I don’t ever
turn them off, so that’s not any help to me either.
Housekeeping
Everything we’ll be installing here is free, and you can certainly go a long
way without having to pay a cent for any of your software. However, don’t
be afraid to pay actual money for great apps. If you’ve bought a Mac, you
already understand that spending money on a well designed product
usually saves you time in the long run. Software works the same way.
Below are some of the programs I use regularly.
Xcode
First, you need to have Xcode (Apple’s development bundle) installed for a
few of these tools to work. You can get by without it if you try really hard,
but if you’re a developer, you’re probably going to need to have it at some
point. It’s massive, so start downloading it now. Grab it from the App
Store, and then grab a coffee or play with your kid or dog.
For OS X 10.9 (Mavericks) and up, the developer command line tools
can be installed by running the following command within terminal.
This will trigger a software update dialog box. Click install and wait for it to
complete. If this does not work, download the installation package from
Apple. You will need an Apple developer account to do this.
Once Xcode is installed, start it up. The tools we need will not work unless
the app has run once, and you’ve accepted the licence agreement. You don’t
need to do anything with the app. Just start it up (It can take a while to run
the first time, even on a fast machine) click agree, and shut it down.
Homebrew
It can take a while for the install, but that one command is all you need for
Homebrew. Really.
MySQL
With the default apache settings, you can add as many sites as you like in
subfolders of the web root. You can have sites like this:
http://home.dev/client1
http://home.dev/client2
http://home.dev/client3
However, that creates a problem. When you have each site in a folder, it’s
more difficult to manage the settings for each site. Each one must then
have a different absolute root. The solution is to create a subdomain for
each site, and use URLs like these:
We’re now done with dnsmasq, and if all goes well, you’ll never need to
think about it again. Now, to get Apache going.
Apache has a default location for storing website files, but I prefer to create
my own web root that is independent of Apache. You can place your files
anywhere you wish, but I prejust put them in a directory called /www on
my main hard drive. Put yours wherever you wish. In that folder, I have a
few subfolders. /www/home is a main website that I use to list all my
local sites (I’ll show you how to make that site dynamic later on).
/www/sites is the folder in which I place each of my other sites. Each of
those site folders has a webroot (/www/sites/client1/wwwroot), and
an assets folder (/www/sites/client1/assets), where I keep source files
or other documents related to the site.
Apache
Step one is easy. It’s actually almost done. Mountain Lion (10.8) was the
first version of OS X without Apache in the “sharing” section of the
preferences pane. No big deal though, since you just need to start it up
once using the terminal. Open up the Terminal app, and enter the
following command. You’ll be asked for your administrator password.
You should also try http://home.dev, which should work since dnsmasq is
pointing all *.dev domains to the local IP. You can
try http://ANYTHING.dev as well.
Apache will serve up sites as is, but there are a few quick changes we need
to make to the configuration files before we are ready to go. Using your
favorite text editor, open up /private/etc/apache2/httpd.conf
If you’re going to be using PHP, you need to tell Apache to use the PHP
module to handle .php files. On line 169 (line 117 before 10.10 (Yosemite)
but could be different on your system), you need to uncomment this line
(remove the “#”)
becomes
becomes
and on line 509 (line 500 in Yosemite and El Capitan, and line 477 before
Yosemite), in order to allow us to add multiple websites to Apache:
<Directory "/www">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Virtualhost *:80>
VirtualDocumentRoot "/www/home/wwwroot"
ServerName home.dev
UseCanonicalName Off
</Virtualhost>
<Virtualhost *:80>
VirtualDocumentRoot "/www/sites/%1/wwwroot"
ServerName sites.dev
ServerAlias *.dev
UseCanonicalName Off
</Virtualhost>
<Virtualhost *:80>
VirtualDocumentRoot "/www/sites/%-7+/wwwroot"
ServerName xip
ServerAlias *.xip.io
UseCanonicalName Off
</Virtualhost>
Then run the following to force Apache to load your new config files:
This configuration allows you to use the URL http://client1.dev on your
local machine with your site files stored in
/www/sites/client1/wwwroot. It also allows you to use the service
xip.io to use the URL http://client1.[LOCAL IP].xip.io to access your
sites from another machine (or device) on your local network. So, if your
machine’s local IP address (not your public IP address), is 192.168.1.10, the
URL for a site might be http://client1.192.168.1.10.xip.io. You can
find your local IP address in your network preferences.
Xip.io is offered for free by Basecamp and provides one of the simplest
services on the internet. They run a simple DNS server that redirects all
traffic to *.xip.io back to the IP address indicated by the subdomain.
Now you don’t need to update config files every time you add a new site.
Simply add the necessary folders to your “sites” directory, and the site will
work locally with its own subdomain.
Now that you have a bunch of local sites running on your machine, you can
bookmark them all, or you could do something fancy, and create your own
custom home page that lists all the sites currently available on your
machine.
If you’ve got the development chops to build this yourself, go right ahead.
All you need is some kind of script that can analyze your sites directory,
and a way to output it. I have a PHP script that I’ve used for years to do
this. Disclaimer: I do not use PHP very much, and my code is rough. If
you’re better at PHP than me, which is likely, and have suggestions for
improvement, by all means let me know, or submit a pull request.
The small site I use for my local home page is available on GitHub.
Suggestions?
Hopefully this has been of some use to you. If you have any comments of
better ways to do things, you can find me on twitter.
If you want to throw a little love (and money) my way by using one of these
affiliate links for three services I’ve found to be awesome, we both win.
DigitalOcean Hosting
ServerPilot
Backblaze
This is the right way to back up all your files. You need to sign up for
this right now. Stop reading and do it. $5 per month for as much stuff as
you can send them. Install it and forget about it. In addition to having the
ability to get all of your files back if you lose your computer, their mobile
apps allow you to access any file on your computer from anywhere. You
can restore single files, or if you lose your computer they will courier you
all your files on a drive. Get a free month when you use this link, then use
your referral link to sign up all of your friends. You’ll get backups for free
and your friends will thank you. You can’t lose.
Harvest
Invoicing clients and bugging them for money sucks, so let Harvest do it
for you! This link gets us each $10 off. If you have a Stripe or Paypal
account, Harvest lets your clients to pay with a credit card, and you can get
paid faster. They will also remind clients who have not paid, and you won’t
have to make an awkward phone call.