I hate using PHP. There was a time I loved it and looked forward to the release of PHP 5. These days I I use it only when I really have to, for example being asked to update or troubleshoot an old code base. Normally I would just create a virtual machine with linux on it, but this time I thought I would use homebrew to instal a local stack on my Maverick development machine. So here goes:
If you have not used or heard of homebrew before, then Homebrew is a package manager very similar to gentoo's package management system. It will download and compile and install any open souirce software you need.
The command line developer tools can be downloaded from Apple's developer website at https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-
Once the command line tools have been installed, installing Homebrew is as simple as:
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)" ... ==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/. /usr/local/bin ==> Downloading and Installing Homebrew... ==> Installation successful! You should run `brew doctor' *before* you install anything.
brew search php
This will give you a long list of available brews for php 5.2, 5.3, 5.4 packages. We need 5.4 and specifically from a certain brew
brew tap josegonzales/php brew tap homebrew/dupes
We can list the options for installing php54 with the following command.
brew options php54
We shall build it with the following command
brew install php54 --with-fpm --with-imap --without-apache --with-debug
This will take some time. Go make some coffee, play with your kids if you have any or whatever.. After a long wait we can verify the php and php-fpm version we have installed using the following commands:
php -v php-fpm
If you want that php-fpm is automatically started do:
cp /usr/local/Cellar/php54/5.4.15/homebrew-php.josegonzalez.php54.plist ~/Library/LaunchAgents/
Otherwise you can use the following to start and stop
launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist
launchctl unload -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php54.plist
brew install nginx
Copy the start/stop script. If you plan to use them. On my development machine, I do not use them since I prefer to use my own start stop scripts and also use custom configurations which will become clear further down in the Configurations Section. You can just skip this part if you wish.
cp /usr/local/Cellar/nginx/1.4.1/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
OK we now have the required software in place. We only now need to configure. For my projects and websites I like to have the following structure. At the minimum below is what I have:
$PROJECT_HOME/bin # The bin directory shall contain our start/stop scripts $PROJECT_HOME/etc # The etc directory shall contain the nginx and php-fpm configuration $PROJECT_HOME/htdocs # This is where the website home is. $PROJECT_HOME/logs # This is where we keep the logs