feat: Web concurrency (#2347)
* feat: Fork multiple processes * Remove boxen * comment * chore: Add support for Heroku DATABASE_CONNECTION_POOL_URL closes #2306
This commit is contained in:
parent
c9bd3bbf45
commit
8ee018a759
|
@ -94,6 +94,10 @@ FORCE_HTTPS=true
|
||||||
# the maintainers
|
# the maintainers
|
||||||
ENABLE_UPDATES=true
|
ENABLE_UPDATES=true
|
||||||
|
|
||||||
|
# How many processes should be spawned. As a reasonable rule divide your servers
|
||||||
|
# available memory by 512 for a rough estimate
|
||||||
|
WEB_CONCURRENCY=1
|
||||||
|
|
||||||
# Override the maxium size of document imports, could be required if you have
|
# Override the maxium size of document imports, could be required if you have
|
||||||
# especially large Word documents with embedded imagery
|
# especially large Word documents with embedded imagery
|
||||||
MAXIMUM_IMPORT_SIZE=5120000
|
MAXIMUM_IMPORT_SIZE=5120000
|
||||||
|
|
|
@ -58,7 +58,6 @@
|
||||||
"babel-plugin-styled-components": "^1.11.1",
|
"babel-plugin-styled-components": "^1.11.1",
|
||||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||||
"boundless-arrow-key-navigation": "^1.0.4",
|
"boundless-arrow-key-navigation": "^1.0.4",
|
||||||
"boxen": "^5.0.1",
|
|
||||||
"bull": "^3.5.2",
|
"bull": "^3.5.2",
|
||||||
"cancan": "3.1.0",
|
"cancan": "3.1.0",
|
||||||
"chalk": "^4.1.0",
|
"chalk": "^4.1.0",
|
||||||
|
@ -160,6 +159,7 @@
|
||||||
"styled-components": "^5.2.3",
|
"styled-components": "^5.2.3",
|
||||||
"styled-components-breakpoint": "^2.1.1",
|
"styled-components-breakpoint": "^2.1.1",
|
||||||
"styled-normalize": "^8.0.4",
|
"styled-normalize": "^8.0.4",
|
||||||
|
"throng": "^5.0.0",
|
||||||
"tiny-cookie": "^2.3.1",
|
"tiny-cookie": "^2.3.1",
|
||||||
"tmp": "^0.2.1",
|
"tmp": "^0.2.1",
|
||||||
"turndown": "^7.1.1",
|
"turndown": "^7.1.1",
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
require("dotenv").config({ silent: true });
|
require("dotenv").config({ silent: true });
|
||||||
|
|
||||||
const errors = [];
|
const errors = [];
|
||||||
const boxen = require("boxen");
|
|
||||||
const chalk = require("chalk");
|
const chalk = require("chalk");
|
||||||
|
const throng = require("throng");
|
||||||
|
|
||||||
// If the DataDog agent is installed and the DD_API_KEY environment variable is
|
// If the DataDog agent is installed and the DD_API_KEY environment variable is
|
||||||
// in the environment then we can safely attempt to start the DD tracer
|
// in the environment then we can safely attempt to start the DD tracer
|
||||||
|
@ -66,7 +66,7 @@ if (!process.env.URL) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process.env.DATABASE_URL) {
|
if (!process.env.DATABASE_URL && !process.env.DATABASE_CONNECTION_POOL_URL) {
|
||||||
errors.push(
|
errors.push(
|
||||||
`The ${chalk.bold(
|
`The ${chalk.bold(
|
||||||
"DATABASE_URL"
|
"DATABASE_URL"
|
||||||
|
@ -95,11 +95,10 @@ if (errors.length) {
|
||||||
|
|
||||||
if (process.env.NODE_ENV === "production") {
|
if (process.env.NODE_ENV === "production") {
|
||||||
console.log(
|
console.log(
|
||||||
boxen(
|
chalk.green(
|
||||||
`
|
`
|
||||||
Is your team enjoying Outline? Consider supporting future development by sponsoring the project:\n\nhttps://github.com/sponsors/outline
|
Is your team enjoying Outline? Consider supporting future development by sponsoring the project:\n\nhttps://github.com/sponsors/outline
|
||||||
`,
|
`
|
||||||
{ padding: 1, margin: 1, borderStyle: "double", borderColor: "green" }
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else if (process.env.NODE_ENV === "development") {
|
} else if (process.env.NODE_ENV === "development") {
|
||||||
|
@ -112,4 +111,11 @@ Is your team enjoying Outline? Consider supporting future development by sponsor
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
require("./main");
|
const { start } = require("./main");
|
||||||
|
|
||||||
|
throng({
|
||||||
|
worker: start,
|
||||||
|
|
||||||
|
// The number of workers to run, defaults to the number of CPUs available
|
||||||
|
count: process.env.WEB_CONCURRENCY || undefined,
|
||||||
|
});
|
||||||
|
|
|
@ -234,10 +234,12 @@ server.on("listening", () => {
|
||||||
console.log(`\n> Listening on http://localhost:${address.port}\n`);
|
console.log(`\n> Listening on http://localhost:${address.port}\n`);
|
||||||
});
|
});
|
||||||
|
|
||||||
(async () => {
|
export async function start(id: string) {
|
||||||
|
console.log(`Started worker ${id}`);
|
||||||
|
|
||||||
await checkMigrations();
|
await checkMigrations();
|
||||||
server.listen(process.env.PORT || "3000");
|
server.listen(process.env.PORT || "3000");
|
||||||
})();
|
}
|
||||||
|
|
||||||
export const socketio = io;
|
export const socketio = io;
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,9 @@ export const encryptedFields = () =>
|
||||||
export const DataTypes = Sequelize;
|
export const DataTypes = Sequelize;
|
||||||
export const Op = Sequelize.Op;
|
export const Op = Sequelize.Op;
|
||||||
|
|
||||||
export const sequelize = new Sequelize(process.env.DATABASE_URL, {
|
export const sequelize = new Sequelize(
|
||||||
|
process.env.DATABASE_URL || process.env.DATABASE_CONNECTION_POOL_URL,
|
||||||
|
{
|
||||||
logging: debug("sql"),
|
logging: debug("sql"),
|
||||||
typeValidation: true,
|
typeValidation: true,
|
||||||
dialectOptions: {
|
dialectOptions: {
|
||||||
|
@ -24,4 +26,5 @@ export const sequelize = new Sequelize(process.env.DATABASE_URL, {
|
||||||
}
|
}
|
||||||
: false,
|
: false,
|
||||||
},
|
},
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
58
yarn.lock
58
yarn.lock
|
@ -2490,13 +2490,6 @@ ansi-align@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width "^2.0.0"
|
string-width "^2.0.0"
|
||||||
|
|
||||||
ansi-align@^3.0.0:
|
|
||||||
version "3.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
|
|
||||||
integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
|
|
||||||
dependencies:
|
|
||||||
string-width "^3.0.0"
|
|
||||||
|
|
||||||
ansi-colors@^4.1.1:
|
ansi-colors@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
||||||
|
@ -3253,20 +3246,6 @@ boxen@^1.2.1:
|
||||||
term-size "^1.2.0"
|
term-size "^1.2.0"
|
||||||
widest-line "^2.0.0"
|
widest-line "^2.0.0"
|
||||||
|
|
||||||
boxen@^5.0.1:
|
|
||||||
version "5.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b"
|
|
||||||
integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==
|
|
||||||
dependencies:
|
|
||||||
ansi-align "^3.0.0"
|
|
||||||
camelcase "^6.2.0"
|
|
||||||
chalk "^4.1.0"
|
|
||||||
cli-boxes "^2.2.1"
|
|
||||||
string-width "^4.2.0"
|
|
||||||
type-fest "^0.20.2"
|
|
||||||
widest-line "^3.1.0"
|
|
||||||
wrap-ansi "^7.0.0"
|
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
@ -3627,7 +3606,7 @@ camelcase@^5.0.0, camelcase@^5.3.1:
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||||
|
|
||||||
camelcase@^6.0.0, camelcase@^6.2.0:
|
camelcase@^6.0.0:
|
||||||
version "6.2.0"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
|
||||||
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
|
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
|
||||||
|
@ -3858,11 +3837,6 @@ cli-boxes@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
||||||
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
|
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
|
||||||
|
|
||||||
cli-boxes@^2.2.1:
|
|
||||||
version "2.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
|
|
||||||
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
|
|
||||||
|
|
||||||
cli-color@^1.4.0:
|
cli-color@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
|
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
|
||||||
|
@ -12525,7 +12499,7 @@ string-width@^3.0.0, string-width@^3.1.0:
|
||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^2.0.0"
|
||||||
strip-ansi "^5.1.0"
|
strip-ansi "^5.1.0"
|
||||||
|
|
||||||
string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
|
string-width@^4.1.0, string-width@^4.2.0:
|
||||||
version "4.2.2"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
|
||||||
integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
|
integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
|
||||||
|
@ -12896,6 +12870,13 @@ throat@^5.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
|
resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
|
||||||
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
|
integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
|
||||||
|
|
||||||
|
throng@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/throng/-/throng-5.0.0.tgz#f9550c0221e579073f68a00be33a593d094e4d29"
|
||||||
|
integrity sha512-nrq7+qQhn/DL8yW/wiwImTepfi6ynOCAe7moSwgoYN1F32yQMdBkuFII40oAkb3cDfaL6q5BIoFTDCHdMWQ8Pw==
|
||||||
|
dependencies:
|
||||||
|
lodash "^4.17.20"
|
||||||
|
|
||||||
through2-filter@^3.0.0:
|
through2-filter@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
|
resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254"
|
||||||
|
@ -13214,11 +13195,6 @@ type-fest@^0.16.0:
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
|
||||||
integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
|
integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
|
||||||
|
|
||||||
type-fest@^0.20.2:
|
|
||||||
version "0.20.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
|
|
||||||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
|
||||||
|
|
||||||
type-fest@^0.6.0:
|
type-fest@^0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
||||||
|
@ -14010,13 +13986,6 @@ widest-line@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width "^2.1.1"
|
string-width "^2.1.1"
|
||||||
|
|
||||||
widest-line@^3.1.0:
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
|
|
||||||
integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
|
|
||||||
dependencies:
|
|
||||||
string-width "^4.0.0"
|
|
||||||
|
|
||||||
windows-release@^3.1.0:
|
windows-release@^3.1.0:
|
||||||
version "3.3.3"
|
version "3.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
|
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
|
||||||
|
@ -14228,15 +14197,6 @@ wrap-ansi@^6.2.0:
|
||||||
string-width "^4.1.0"
|
string-width "^4.1.0"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrap-ansi@^7.0.0:
|
|
||||||
version "7.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
|
||||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
|
||||||
dependencies:
|
|
||||||
ansi-styles "^4.0.0"
|
|
||||||
string-width "^4.1.0"
|
|
||||||
strip-ansi "^6.0.0"
|
|
||||||
|
|
||||||
wrappy@1:
|
wrappy@1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
|
Reference in New Issue