As our production environment is moving from Apache to Nginx, it makes more sense for our development environments to closely mirror that environment. It's going to be a bit of a journey to get there, so let's get started.
(Most of the following assumes you already have Xcode installed on your system. If not, go grab it from [[http://developer.apple.com/]] or the Mac App Store, though the latter costs $4.99.)
Step 1: Install Homebrew
If you're system is not new and you already have a
/usr/local, your permissions may get in the way. Correct that by running:
[[ ! -d /usr/local ]] && sudo mkdir /usr/local sudo chown -R $USER /usr/local
ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
If you did have an existing
/usr/local, you can see if there are any problems from what you already have in there by running:
Step 2: Install RVM
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Then add the following to your ~/.bash_profile:
'[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Step 3: Install Ruby Enterprise Edition and Passenger
. $HOME/.rvm/scripts/rvm rvm install --force ree rvm use ree gem install passenger
Step 4: Install Nginx
rvm use ree brew install nginx --with-passenger
Install the start-up plist:
if [ ! -e ~/Library/LaunchAgents ]; then mkdir ~/Library/LaunchAgents fi cp /usr/local/Cellar/nginx/`ls -1 /usr/local/Cellar/nginx| tail -n 1`/org.nginx.nginx.plist ~/Library/LaunchAgents
Step 5: Install MongoDB
If you previously had MongoDB installed you will need to unload mongodb and remove the launch daemon. Correct that by running:
sudo launchctl unload /Library/LaunchDaemons/org.mongodb.mongod.plist sudo rm -r /Library/LaunchDaemons/org.mongodb.mongod.plist
brew install mongodb
Read the Caveats presented after installation about installing or upgrading the launch daemon.
Check that MongoDB is running:
Step 6: Install MySQL
brew install mysql
Note the instructions for copying the .plist file if you want to have MySQL automatically start when you log in.
Step 7: Install PHP (optionally, but recommended) and spawn-fcgi
brew create http://ca2.php.net/distributions/php-5.2.17.tar.gz
When an editor is opened up with the "formula", replace it with the contents of [[https://gist.github.com/raw/945421/607ab7931525ba9447c0348c328439a584d97ac7/php.rb]].
If libpng is somehow broken (like Jamie's)
brew install https://raw.github.com/mxcl/homebrew/fa2f6383296fde9c9eb9182b25c1f7ac91a93364/Library/Formula/libpng.rb
Next, Install PHP
brew install php --with-mysql
Then install spawn-fcgi:
brew install spawn-fcgi
Download a launchctl plist file to ensure this PHP server is running:
cd ~/Library/LaunchAgents curl https://raw.github.com/gist/945447/724201ab0d5e2834eafae0444aa9c2e5ee977f3e > net.lighttpd.spawn-fcgi.plist launchctl load -w ~/Library/LaunchAgents/net.lighttpd.spawn-fcgi.plist
Let's now replace the stock config with what we've got in this repo:
cd /usr/local/etc mv nginx nginx.orig # you might want to fork this repo so you can make your own changes... # if so, go here: [[https://github.com/coverall/nginx/fork]] git clone email@example.com:coverall/nginx.git # all configs are going to point to /usr/local/sites, so let's link this # up to your home... cd /usr/local ln -s ~/Sites sites
Now start it up with launchctl:
launchctl load -w ~/Library/LaunchAgents/org.nginx.nginx.plist
Nginx runs under your own user, so it can't use a privileged port. Instead it runs on port 8080. You may want to have it run on port 80, and if so you can add a simple firewall script to forward the port. (This is totally optional.)
cd /Library/LaunchDaemons sudo curl -O https://raw.github.com/gist/945906/d817356fb5db195c7c4c46fd39f5f5cac6db6e8f/com.coverallcrew.firewall.plist sudo launchctl load -w com.coverallcrew.firewall.plist
If you want an easy way to restart nginx, add the following to your ~/.bash_profile file:
alias restart-nginx="kill \`cat /usr/local/var/run/nginx.pid\`"
If you look in
/usr/local/etc/nginx/upstreams, you will see all of the "upstreams", or "proxies" we have defined. Note that the attendease API is set to run on port 4000, and so to start that up on that port, run:
cd /usr/local/sites/attendease rails s -p 4000