diff --git a/app.js b/app.js index f36d2d6..1d10c59 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,5 @@ +var pjson = require("./package.json"); + var config = require("./config/general"); var socket_config = require("./config/general"); @@ -22,6 +24,8 @@ var Cluster = function(cluster) { if (cluster.isMaster) { + log.info((pjson.name || "web cluster") + " > starting infrastructure..."); + for (var i = 0; i < numCPUs; i++) cluster.fork() @@ -41,7 +45,7 @@ var Cluster = function(cluster) { var server = new Server(function(server, app){ server.listen(app.get('port'), function(){ socket = new Socket(server); - log.info('Worker listening on port ' + app.get('port')); + log.info('worker listening on port ' + app.get('port')); }); }); } @@ -51,6 +55,9 @@ var Cluster = function(cluster) { function init() { + if(!config[config.state]) + throw new Error("No configuration state available"); + var state = config[config.state]; numCPUs = state.cluster? state.cluster.max || numCPUs : numCPUs; @@ -63,5 +70,5 @@ var Cluster = function(cluster) { var cluster = new Cluster(cluster); cluster.start(function(){ - log.info("Starting cluster with " + cluster.cpus + " forks.\n") + log.info("starting cluster with " + cluster.cpus + " forks.\n") }); \ No newline at end of file diff --git a/config/general.js b/config/general.js index 116d301..72a0b22 100644 --- a/config/general.js +++ b/config/general.js @@ -1,6 +1,6 @@ module.exports = { - - state: "development", + + state: "production", development: { diff --git a/package.json b/package.json index 430fc08..76156a9 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,8 @@ "private": true, "scripts": { "start": "node app.js", + "deploy": "node scripts/deploy.js", + "stop": "node scripts/stopall.js", "debug": "node-inspector --web-port=3333 & node --debug-brk app", "test": "nodeunit tests/*", "debug-test": "node-inspector --web-port=3333 & node --debug-brk `which nodeunit` tests/*", @@ -19,7 +21,8 @@ "mongojs": "~0.7.17", "async": "~0.2.9", "express-ejs-layouts": "~0.3.1", - "ejs": "~0.8.4" + "ejs": "~0.8.4", + "forever": "~0.10.8" }, "devDependencies": { "nodeunit": "~0.8.1" diff --git a/scripts/deploy.js b/scripts/deploy.js new file mode 100644 index 0000000..25d4c36 --- /dev/null +++ b/scripts/deploy.js @@ -0,0 +1,28 @@ +#!/bin/env node + +////////////////////////////////////////////// +// // +// Node Web Cluster - Deployment Routines // +// // +////////////////////////////////////////////// + +var forever = require("forever") +var path = require("path") +var log = require("winston") + +try { + + // fork and start + forever.startDaemon(path.resolve(__dirname, "../app.js"), { + logFile: path.resolve(__dirname, "../logs"), + logFile: path.resolve(__dirname, "../logs/pids"), + }); + + log.info("forever started successfully") +} +catch(e) { + + // ooops + log.error("ooops, forever could not be launched!"); + throw e; +} \ No newline at end of file diff --git a/scripts/stopall.js b/scripts/stopall.js new file mode 100644 index 0000000..69aa110 --- /dev/null +++ b/scripts/stopall.js @@ -0,0 +1,22 @@ +#!/bin/env node + +////////////////////////////////////////////// +// // +// Node Web Cluster - Deployment Routines // +// // +////////////////////////////////////////////// + +var forever = require("forever"); +var log = require("winston") + +try { + + log.info("stopping all forever forks") + forever.stopAll() +} +catch(e) { + + // ooops + log.error("ooops, forever could not be stopped!"); + throw e; +} \ No newline at end of file