For a recent project I needed to run Node-RED on windows and it became apparent that being able to run it as a service would be very useful.
After a little poking around I found a npm module called node-windows.
You install node-windows with as follows:
npm install -g node-windows
followed by:
npm link node-windows
in the root directory of your project. This is a 2 stage process as node-windows works better when installed globally.
Now the npm module in installed you configure the Windows service by writing a short nodejs app. This windows-service.js should work for Node-Red
var Service = require('node-windows').Service; var svc = new Service({ name:'Node-Red', description: 'A visual tool for wiring the Internet of Things', script: require('path').join(__dirname,'red.js') }); svc.on('install',function(){ svc.start(); }); svc.on('uninstall',function(){ console.log('Uninstall complete.'); console.log('The service exists: ',svc.exists); }); if (process.argv.length == 3) { if ( process.argv[2] == 'install') { svc.install(); } else if ( process.argv[2] == 'uninstall' ) { svc.uninstall(); } }
Run the following to install the service:
node windows-service.js install
and to remove the service:
node windows-service.js uninstall
There is also a OSx version of node-windows called node-mac, the same script with a small change should work on both:
if (process.platform === 'win32') { var Service = require('node-windows').Service; } else if (process.platform === 'darwin') { var Service = require('node-mac').Service; } else { console.log('Not Windows or OSx'); process.exit(1); } var svc = new Service({ name:'Node-Red', description: 'A visual tool for wiring the Internet of Things', script: require('path').join(__dirname,'red.js') }); svc.on('install',function(){ svc.start(); }); svc.on('uninstall',function(){ console.log('Uninstall complete.'); console.log('The service exists: ',svc.exists); }); if (process.argv.length == 3) { if ( process.argv[2] == 'install') { svc.install(); } else if ( process.argv[2] == 'uninstall' ) { svc.uninstall(); } }
I have submitted a pull request to include this in the base Node-RED install.
EDIT:
I’ve added node-linux to the pull request as well to generate /etc/init.d SystemV start scripts.