summaryrefslogtreecommitdiff
path: root/packages/backend/src/boot
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2022-05-19 11:49:07 +0900
committerGitHub <noreply@github.com>2022-05-19 11:49:07 +0900
commitb6794b614b701ff1bfde98de5b4fa8735f5155b0 (patch)
tree76cc16077d50b16cc148facfe6f28f08cfaafb67 /packages/backend/src/boot
parentremove unneeded attrs (#8673) (diff)
downloadsharkey-b6794b614b701ff1bfde98de5b4fa8735f5155b0.tar.gz
sharkey-b6794b614b701ff1bfde98de5b4fa8735f5155b0.tar.bz2
sharkey-b6794b614b701ff1bfde98de5b4fa8735f5155b0.zip
enhance: Perform port diagnosis at startup only when Listen fails (#8698)
* Change port check * Comment: disableClustering * CHANGELOG * Smart message
Diffstat (limited to 'packages/backend/src/boot')
-rw-r--r--packages/backend/src/boot/master.ts36
1 files changed, 4 insertions, 32 deletions
diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts
index 09d20f9361..bf51960482 100644
--- a/packages/backend/src/boot/master.ts
+++ b/packages/backend/src/boot/master.ts
@@ -5,7 +5,6 @@ import * as os from 'node:os';
import cluster from 'node:cluster';
import chalk from 'chalk';
import chalkTemplate from 'chalk-template';
-import * as portscanner from 'portscanner';
import semver from 'semver';
import Logger from '@/services/logger.js';
@@ -48,11 +47,6 @@ function greet() {
bootLogger.info(`Misskey v${meta.version}`, null, true);
}
-function isRoot() {
- // maybe process.getuid will be undefined under not POSIX environment (e.g. Windows)
- return process.getuid != null && process.getuid() === 0;
-}
-
/**
* Init master process
*/
@@ -67,7 +61,6 @@ export async function masterMain() {
showNodejsVersion();
config = loadConfigBoot();
await connectDb();
- await validatePort(config);
} catch (e) {
bootLogger.error('Fatal error occurred during initialization', null, true);
process.exit(1);
@@ -97,8 +90,6 @@ function showEnvironment(): void {
logger.warn('The environment is not in production mode.');
logger.warn('DO NOT USE FOR PRODUCTION PURPOSE!', null, true);
}
-
- logger.info(`You ${isRoot() ? '' : 'do not '}have root privileges`);
}
function showNodejsVersion(): void {
@@ -152,29 +143,6 @@ async function connectDb(): Promise<void> {
}
}
-async function validatePort(config: Config): Promise<void> {
- const isWellKnownPort = (port: number) => port < 1024;
-
- async function isPortAvailable(port: number): Promise<boolean> {
- return await portscanner.checkPortStatus(port, '127.0.0.1') === 'closed';
- }
-
- if (config.port == null || Number.isNaN(config.port)) {
- bootLogger.error('The port is not configured. Please configure port.', null, true);
- process.exit(1);
- }
-
- if (process.platform === 'linux' && isWellKnownPort(config.port) && !isRoot()) {
- bootLogger.error('You need root privileges to listen on well-known port on Linux', null, true);
- process.exit(1);
- }
-
- if (!await isPortAvailable(config.port)) {
- bootLogger.error(`Port ${config.port} is already in use`, null, true);
- process.exit(1);
- }
-}
-
async function spawnWorkers(limit: number = 1) {
const workers = Math.min(limit, os.cpus().length);
bootLogger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`);
@@ -186,6 +154,10 @@ function spawnWorker(): Promise<void> {
return new Promise(res => {
const worker = cluster.fork();
worker.on('message', message => {
+ if (message === 'listenFailed') {
+ bootLogger.error(`The server Listen failed due to the previous error.`);
+ process.exit(1);
+ }
if (message !== 'ready') return;
res();
});