From a912b2f23d83f0b6b023868f6c7928fca1a2fbcf Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 7 Jul 2019 10:49:34 +0200 Subject: [PATCH] choose port dynamically from range based on environment --- package-lock.json | 30 ++++++++++++++++++++++++++++++ package.json | 6 +++--- src/services/env.js | 5 +++++ src/services/port.js | 24 +++++++++++++++++++++--- 4 files changed, 59 insertions(+), 6 deletions(-) create mode 100644 src/services/env.js diff --git a/package-lock.json b/package-lock.json index cfb0f5f0c..aa8a65d59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1033,6 +1033,14 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } + }, "async-each-series": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", @@ -7177,6 +7185,14 @@ } } }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, "is-obj": { "version": "1.0.1", "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", @@ -7758,6 +7774,11 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" + }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -10429,6 +10450,15 @@ } } }, + "portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "requires": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", diff --git a/package.json b/package.json index 5cab3dbf6..ac590a2af 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "url": "https://github.com/zadam/trilium.git" }, "scripts": { - "start": "node ./src/www", - "start-electron": "electron . --disable-gpu", + "start-server": "TRILIUM_ENV=dev node ./src/www", + "start-electron": "TRILIUM_ENV=dev electron . --disable-gpu", "build-backend-docs": "jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/entities/*.js src/services/backend_script_api.js", "build-frontend-docs": "jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/javascripts/entities/*.js src/public/javascripts/services/frontend_script_api.js", "build-docs": "npm run build-backend-docs && npm run build-frontend-docs", @@ -40,7 +40,6 @@ "express-session": "1.16.2", "file-type": "12.0.1", "fs-extra": "8.1.0", - "get-port": "5.0.0", "helmet": "3.18.0", "html": "1.0.0", "html2plaintext": "2.1.2", @@ -57,6 +56,7 @@ "node-abi": "2.9.0", "open": "6.4.0", "pngjs": "3.4.0", + "portscanner": "^2.2.0", "rand-token": "0.4.0", "rcedit": "2.0.0", "rimraf": "2.6.3", diff --git a/src/services/env.js b/src/services/env.js new file mode 100644 index 000000000..22fa4cbee --- /dev/null +++ b/src/services/env.js @@ -0,0 +1,5 @@ +module.exports = { + isDev: function () { + return process.env.TRILIUM_ENV && process.env.TRILIUM_ENV === 'dev'; + } +}; \ No newline at end of file diff --git a/src/services/port.js b/src/services/port.js index fa6f7fda9..d6504c2f2 100644 --- a/src/services/port.js +++ b/src/services/port.js @@ -1,10 +1,28 @@ -const getPort = require('get-port'); const config = require('./config'); const utils = require('./utils'); +const env = require('./env'); +const portscanner = require('portscanner'); + +let environmentPort; + +if (process.env.TRILIUM_PORT) { + environmentPort = parseInt(process.env.TRILIUM_PORT); +} if (utils.isElectron()) { - module.exports = 53010;//getPort(); + module.exports = new Promise((resolve, reject) => { + const startingPort = environmentPort || (env.isDev() ? 37740 : 37840); + + portscanner.findAPortNotInUse(startingPort, startingPort + 10, '127.0.0.1', function(error, port) { + if (error) { + reject(error); + } + else { + resolve(port); + } + }) + }); } else { - module.exports = Promise.resolve(config['Network']['port'] || '3000'); + module.exports = Promise.resolve(environmentPort || config['Network']['port'] || '3000'); } \ No newline at end of file