Supervisor+PHP+Nginx 25 Aug 2013

While reinstalling my Mac today I realised how easy it was to get PHP and Nginx working with Supervisor. However, if you asked me this the first time i setup my Mac, I probably would have screamed at you for not helping me.

Supervisor allows you to manage any process with ease, and through a simple web ui. You can manage anything from PHP itself, to long running scripts. We use it on to manage the upload workers which are written in PHP, its very powerful to use, once you know.

I figured I’d write a blog post to explain how simple it is, and act as a copy and paste reference for me in the future.

I am going to assume you have the following installing:

  • Homebrew
  • PHP (with “–with-fpm” option)
  • Nginx

First we need to install Supervisord, to do this we need to install “pip”. You can do this by running the following commands:

easy_install pip

This will then allow you to run:

sudo pip install supervisor

We can now create our supervisord.conf file, which will tell Supervisor how and what to run. I created mine in /usr/local/etc/supervisord.conf. Note that you can create it in a few different locations and Supervisord will automatically pick it up, have a look at their docs for this.

The following is my supervisord.conf file, which includes configs to run the web interface:

port =

; Deamon
logfile = /var/log/supervisord.log
logfile_maxbytes = 50MB
logfile_backups = 5
loglevel = info
pidfile = /tmp/
nodaemon = false
minfds = 1024
minprocs = 200
user = root
directory = /tmp
strip_ansi = true

; RPC Interface
supervisor.rpcinterface_factory  =  supervisor.rpcinterface:make_main_rpcinterface

serverurl =

files = /usr/local/etc/supervisor.d/*.conf

If you notice on the last line, we are including files from /usr/local/etc/supervisor.d. This means we can place config files for PHP, Nginx etc in this folder to keep it cleaner, however you can place all the configs in the above file if you so with.

First off, we will create the config file for php-fpm in /usr/local/etc/supervisor.d/php.conf:

command = /usr/local/sbin/php-fpm
user = root
autostart = true

The above will run php on startup as root.

Next we will add the Nginx config file in its respective file:

command = /usr/local/bin/nginx
user = root
autostart = true

This will also run nginx on startup as root. You will also want to add the following to your main nginx config file:

daemon off;

This will stop nginx from daemonizing it’s self, and is needed for nginx to run smoothly.

Run the following command to tell Supervisor to look for config file changes. Please note that you will need to run this every time you make a change to the config files.

supervisorctl update

That should be it all setup ready for you to get these processes running. Simply type the following to test this out:

supervisorctl start php;
supervisorctl start nginx;

PHP and Nginx should now be running, to check this simply run. You should see “RUNNING”:

supervisorctl status php

To get Supervisord to start when your Mac starts, you will want to use launchctl. Simply put the following inside /Library/LaunchDaemons/com.agendaless.supervisord.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

And run:

launchctl load /Library/LaunchDaemons/com.agendaless.supervisord.plist

At this stage, Supervisord should be running and ready to use, however I do normally have to restart my Mac for things to work properly. This could have been due to launchctl having not been used before this.

To check that it is running, simply go to in your browser, or use the following command:

supervisorctl status

If all works well, you should see the following in your browser:

If you have any questions, or suggestions please let me know in the comments below, or tweet me