344e602b26
- Updated .env.example to include optional production ports for API and dashboard. - Modified docker-compose files to utilize dynamic port configuration. - Introduced runtime-env.mjs for centralized port resolution and environment variable management. - Refactored run-next.mjs and run-standalone.mjs to leverage new runtime port handling. - Enhanced route.ts and apiBridgeServer.ts to utilize dynamic ports for improved API integration. - Updated OAuth configuration to reflect changes in port management.
44 lines
1.2 KiB
JavaScript
44 lines
1.2 KiB
JavaScript
import { spawn } from "node:child_process";
|
|
|
|
export function parsePort(value, fallback) {
|
|
const parsed = Number.parseInt(String(value), 10);
|
|
return Number.isFinite(parsed) && parsed > 0 && parsed <= 65535 ? parsed : fallback;
|
|
}
|
|
|
|
export function resolveRuntimePorts() {
|
|
const basePort = parsePort(process.env.PORT || "20128", 20128);
|
|
const apiPort = parsePort(process.env.API_PORT || String(basePort), basePort);
|
|
const dashboardPort = parsePort(process.env.DASHBOARD_PORT || String(basePort), basePort);
|
|
|
|
return { basePort, apiPort, dashboardPort };
|
|
}
|
|
|
|
export function withRuntimePortEnv(env, runtimePorts) {
|
|
const { basePort, apiPort, dashboardPort } = runtimePorts;
|
|
|
|
return {
|
|
...env,
|
|
OMNIROUTE_PORT: String(basePort),
|
|
PORT: String(dashboardPort),
|
|
DASHBOARD_PORT: String(dashboardPort),
|
|
API_PORT: String(apiPort),
|
|
};
|
|
}
|
|
|
|
export function spawnWithForwardedSignals(command, args, options = {}) {
|
|
const child = spawn(command, args, options);
|
|
|
|
child.on("exit", (code, signal) => {
|
|
if (signal) {
|
|
process.kill(process.pid, signal);
|
|
return;
|
|
}
|
|
process.exit(code ?? 0);
|
|
});
|
|
|
|
process.on("SIGINT", () => child.kill("SIGINT"));
|
|
process.on("SIGTERM", () => child.kill("SIGTERM"));
|
|
|
|
return child;
|
|
}
|