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 throng from 'throng'
import morgan from 'morgan'
import express from 'express'
import devErrorHandler from 'errorhandler'
import WebpackDevServer from 'webpack-dev-server'
import { createRequestHandler } from 'npm-http-server'
import { staticAssets, assetsCompiler, createDevCompiler } from './AssetsUtils'
import webpackConfig from '../../webpack.config'
import { sendHomePage } from './MainController'
import { logStats } from './StatsUtils'
@ -23,7 +27,7 @@ export const createRouter = (config = {}) => {
const errorHandler = (err, req, res, next) => {
res.status(500).send('<p>Internal Server Error</p>')
console.error(error.stack)
console.error(err.stack)
next(err)
}
@ -56,9 +60,9 @@ export const createDevServer = (config) => {
// https://webpack.github.io/docs/node.js-api.html#stats-tojson
assets: true,
colors: true,
version: false,
hash: false,
timings: false,
version: true,
hash: true,
timings: true,
chunks: false
},
@ -79,3 +83,47 @@ export const createDevServer = (config) => {
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",
"rimraf": "^2.5.2",
"style-loader": "^0.13.1",
"throng": "^4.0.0",
"webpack": "^1.13.0",
"webpack-dev-server": "^1.14.1"
},