Add clustering via $WEB_CONCURRENCY env var

This commit is contained in:
Michael Jackson
2016-06-12 23:04:27 -07:00
parent 326d9ae8e1
commit 0b2906979d
5 changed files with 55 additions and 38 deletions

View File

@ -1 +1 @@
web: node lib/server/start.js web: node lib/server

View File

@ -1 +1 @@
web: NODE_ENV=development node -r ./modules/register.js modules/server/start.js web: NODE_ENV=development node -r ./modules/register.js modules/server

View File

@ -1,10 +1,14 @@
/*eslint-disable no-console*/
import path from 'path'
import cors from 'cors' import cors from 'cors'
import throng from 'throng'
import morgan from 'morgan' import morgan from 'morgan'
import express from 'express' import express from 'express'
import devErrorHandler from 'errorhandler' import devErrorHandler from 'errorhandler'
import WebpackDevServer from 'webpack-dev-server' import WebpackDevServer from 'webpack-dev-server'
import { createRequestHandler } from 'npm-http-server' import { createRequestHandler } from 'npm-http-server'
import { staticAssets, assetsCompiler, createDevCompiler } from './AssetsUtils' import { staticAssets, assetsCompiler, createDevCompiler } from './AssetsUtils'
import webpackConfig from '../../webpack.config'
import { sendHomePage } from './MainController' import { sendHomePage } from './MainController'
import { logStats } from './StatsUtils' import { logStats } from './StatsUtils'
@ -23,7 +27,7 @@ export const createRouter = (config = {}) => {
const errorHandler = (err, req, res, next) => { const errorHandler = (err, req, res, next) => {
res.status(500).send('<p>Internal Server Error</p>') res.status(500).send('<p>Internal Server Error</p>')
console.error(error.stack) console.error(err.stack)
next(err) next(err)
} }
@ -56,9 +60,9 @@ export const createDevServer = (config) => {
// https://webpack.github.io/docs/node.js-api.html#stats-tojson // https://webpack.github.io/docs/node.js-api.html#stats-tojson
assets: true, assets: true,
colors: true, colors: true,
version: false, version: true,
hash: false, hash: true,
timings: false, timings: true,
chunks: false chunks: false
}, },
@ -79,3 +83,47 @@ export const createDevServer = (config) => {
return server return server
} }
const port = process.env.PORT || 5000
const statsFile = path.resolve(__dirname, '../../stats.json')
const publicDir = path.resolve(__dirname, '../../public')
const registryURL = process.env.REGISTRY_URL || 'https://registry.npmjs.org'
const bowerBundle = process.env.BOWER_BUNDLE || '/bower.zip'
const redirectTTL = process.env.REDIRECT_TTL || 500
const autoIndex = !process.env.DISABLE_INDEX
const redisURL = process.env.REDIS_URL
const DefaultServerConfig = {
id: 1,
port,
webpackConfig,
statsFile,
publicDir,
registryURL,
bowerBundle,
redirectTTL,
autoIndex,
redisURL
}
export const startServer = (serverConfig) => {
const config = {
...DefaultServerConfig,
...serverConfig
}
const server = process.env.NODE_ENV === 'production'
? createServer(config)
: createDevServer(config)
server.listen(config.port, () => {
console.log('Server #%s listening on port %s, Ctrl+C to stop', config.id, config.port)
})
}
if (require.main === module)
throng({
start: (id) => startServer({ id }),
workers: process.env.WEB_CONCURRENCY || 1,
lifetime: Infinity
})

View File

@ -1,32 +0,0 @@
import path from 'path'
import { createServer, createDevServer } from './index'
const port = process.env.PORT || 5000
const webpackConfig = require('../../webpack.config')
const statsFile = path.resolve(__dirname, '../../stats.json')
const publicDir = path.resolve(__dirname, '../../public')
const registryURL = process.env.REGISTRY_URL || 'https://registry.npmjs.org'
const bowerBundle = process.env.BOWER_BUNDLE || '/bower.zip'
const redirectTTL = process.env.REDIRECT_TTL || 500
const autoIndex = !process.env.DISABLE_INDEX
const redisURL = process.env.REDIS_URL
const serverConfig = {
port,
webpackConfig,
statsFile,
publicDir,
registryURL,
bowerBundle,
redirectTTL,
autoIndex,
redisURL
}
const server = process.env.NODE_ENV === 'production'
? createServer(serverConfig)
: createDevServer(serverConfig)
server.listen(port, () => {
console.log('Server started on port %s, Ctrl+C to quit', port)
})

View File

@ -41,6 +41,7 @@
"redis": "^2.6.0-1", "redis": "^2.6.0-1",
"rimraf": "^2.5.2", "rimraf": "^2.5.2",
"style-loader": "^0.13.1", "style-loader": "^0.13.1",
"throng": "^4.0.0",
"webpack": "^1.13.0", "webpack": "^1.13.0",
"webpack-dev-server": "^1.14.1" "webpack-dev-server": "^1.14.1"
}, },