From 50c2feaeba6a8d2fdcac791c02ffbe9e1fe7eb55 Mon Sep 17 00:00:00 2001 From: rdbsolutions Date: Mon, 12 May 2025 19:01:28 +0100 Subject: [PATCH 1/2] and again --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1245986e..6ee8a017 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build": "NODE_ENV=production node_modules/next/dist/bin/next build", "start2": "NODE_ENV=production node ./server/server.js", "start3": "NODE_ENV=production node_modules/next/dist/bin/next start", - "start": "next start", + "start": "NODE_ENV=production next start", "lint": "next lint", "prisma:generate": "prisma generate" }, From f0059eb9492124636dc189caf944b788a126ebbb Mon Sep 17 00:00:00 2001 From: rdbsolutions Date: Mon, 12 May 2025 19:41:02 +0100 Subject: [PATCH 2/2] added ubservr --- package-lock.json | 7 ++++--- package.json | 4 ++-- server.js | 36 +++++++++++++++++++++--------------- yarn.lock | 4 +++- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index fd990607..f12a7df9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3931,7 +3931,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", + "version": "1.0.30001717", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz", + "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==", "funding": [ { "type": "opencollective", @@ -3945,8 +3947,7 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/canvas": { "version": "2.11.2", diff --git a/package.json b/package.json index 6ee8a017..9f5b7f85 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "debugdev": "NODE_OPTIONS='--inspect' next dev", "dev:app": "node ./server/server.js", "build": "NODE_ENV=production node_modules/next/dist/bin/next build", - "start2": "NODE_ENV=production node ./server/server.js", + "start2": "NODE_ENV=production node ./server.js", "start3": "NODE_ENV=production node_modules/next/dist/bin/next start", "start": "NODE_ENV=production next start", "lint": "next lint", @@ -105,4 +105,4 @@ "eslint-plugin-jsdoc": "^48.2.3", "prisma": "^5.0.0" } -} \ No newline at end of file +} diff --git a/server.js b/server.js index bcb8461a..bd36f333 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,7 @@ const appInsights = require("applicationinsights"); const initAppInsights = (instrumentationKey) => { if (!instrumentationKey) { + console.log("App Insights not configured."); return false; } @@ -13,6 +14,7 @@ const initAppInsights = (instrumentationKey) => { .setSendLiveMetrics(true) .start(); + console.log("App Insights enabled."); return true; }; @@ -24,6 +26,8 @@ const startServer = async (config) => { }; const app = next(serverOptions); + await app.prepare(); // prepare BEFORE starting the server + const handleNextRequests = app.getRequestHandler(); const srv = createServer((req, res) => { @@ -38,22 +42,28 @@ const startServer = async (config) => { }); await new Promise((resolve, reject) => { - // This code catches EADDRINUSE error if the port is already in use srv.on("error", reject); srv.on("listening", () => resolve()); srv.listen(config.port, config.hostname); }); - // It's up to caller to run `app.prepare()`, so it can notify that the server - // is listening before starting any intensive operations. + // Graceful shutdown handling + process.on("SIGTERM", () => { + console.log("Received SIGTERM, shutting down gracefully..."); + srv.close(() => { + console.log("Server closed."); + process.exit(0); + }); + }); + return app; }; +// App configuration const startTime = Date.now(); - const serverConfig = { - hostname: "localhost", - port: process.env.PORT || 3000, + hostname: "0.0.0.0", // Required for Azure App Service + port: parseInt(process.env.PORT, 10) || 3000, env: process.env.APP_ENV || process.env.NODE_ENV || "production", useAppInsights: initAppInsights( process.env.NEXT_PUBLIC_APPINSIGHTS_INSTRUMENTATIONKEY @@ -61,24 +71,20 @@ const serverConfig = { }; startServer(serverConfig) - .then(async (app) => { + .then(() => { console.log( - `started server on host ${serverConfig.hostname}, port ${serverConfig.port}, env ${serverConfig.env}` + `Server ready on http://${serverConfig.hostname}:${serverConfig.port} [${serverConfig.env}]` ); if (serverConfig.useAppInsights) { const duration = Date.now() - startTime; - appInsights.defaultClient.trackMetric({ - name: "server startup time", + name: "Server Startup Time", value: duration, }); } - - await app.prepare(); }) - .catch((error) => { - console.error(err); - + .catch((err) => { + console.error("Server failed to start:", err); process.exit(1); }); diff --git a/yarn.lock b/yarn.lock index c81d5bb8..ca119fbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1922,7 +1922,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646: - version "1.0.30001660" + version "1.0.30001717" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz" + integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== canvas@^2.11.2: version "2.11.2"