Add clustering via $WEB_CONCURRENCY env var
This commit is contained in:
@ -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
|
||||||
|
@ -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
|
||||||
|
})
|
||||||
|
@ -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)
|
|
||||||
})
|
|
@ -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"
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user