Running Node.js App with Supervisord on Homestead
Earlier I covered how to continuously run Node.js app with Forever. In this article I will explain how to run Node.js app with Supervisord. Since Homestead already has Supervisord installed, we will use it. First, let’s create a simple node application. Edit after.sh script in Homestead installation to contain the following code:
#!/bin/sh cd /var/www sudo mkdir node-web-server sudo chown vagrant:vagrant node-web-server sudo chmod 770 node-web-server sudo chmod g+s node-web-server cd node-web-server npm init -y npm install express --save cat > server.js << EOF1 var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('Hello Express!'); }); app.listen(3000, function(){ console.log('Server is listening on port 3000'); }); EOF1 |
Next, let’s create a proxy nginx path to port 3000 in Homestead.yaml file.
- map: node-app.dev
to: 3000
type: proxy |
Don’t forget to add node-app.dev record to your hosts file.
Now lets reload our homestead vm instance with vagrant reload –provision
After the instance is up and running let’s create and /etc/supervisor/conf.d/nodeserver.conf with the following content.
[program:nodeserver] command=/usr/bin/node /var/www/node-web-server/server.js directory=/var/www/node-web-server autostart=true autorestart=true startretries=3 user=vagrant |
From command line run
sudo supervisorctl reread
sudo supervisorctl update
to update Supervisord. When all set and done you should be able to go to node-app.dev and see you application. If the you restart the server, or node process gets stopped or killed, Supervisord will restart it back.