mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-15 20:25:23 +02:00
Move server.listen() before the initialization block so the HTTP server is already responding when Docker healthchecks begin. Previously, slow operations like SMTP timeouts in sendDokployRestartNotifications() could block the server from listening, causing healthcheck failures and container restarts. Closes #4049
81 lines
2.7 KiB
TypeScript
81 lines
2.7 KiB
TypeScript
import http from "node:http";
|
|
import {
|
|
createDefaultMiddlewares,
|
|
createDefaultServerTraefikConfig,
|
|
createDefaultTraefikConfig,
|
|
IS_CLOUD,
|
|
initCancelDeployments,
|
|
initCronJobs,
|
|
initEnterpriseBackupCronJobs,
|
|
initializeNetwork,
|
|
initSchedules,
|
|
initVolumeBackupsCronJobs,
|
|
sendDokployRestartNotifications,
|
|
setupDirectories,
|
|
} from "@dokploy/server";
|
|
import { config } from "dotenv";
|
|
import next from "next";
|
|
import packageInfo from "../package.json";
|
|
import { setupDockerContainerLogsWebSocketServer } from "./wss/docker-container-logs";
|
|
import { setupDockerContainerTerminalWebSocketServer } from "./wss/docker-container-terminal";
|
|
import { setupDockerStatsMonitoringSocketServer } from "./wss/docker-stats";
|
|
import { setupDrawerLogsWebSocketServer } from "./wss/drawer-logs";
|
|
import { setupDeploymentLogsWebSocketServer } from "./wss/listen-deployment";
|
|
import { setupTerminalWebSocketServer } from "./wss/terminal";
|
|
|
|
config({ path: ".env" });
|
|
const PORT = Number.parseInt(process.env.PORT || "3000", 10);
|
|
const HOST = process.env.HOST || "0.0.0.0";
|
|
const dev = process.env.NODE_ENV !== "production";
|
|
|
|
// Initialize critical directories and Traefik config BEFORE Next.js starts
|
|
// This prevents race conditions with the install script
|
|
if (process.env.NODE_ENV === "production" && !IS_CLOUD) {
|
|
setupDirectories();
|
|
createDefaultTraefikConfig();
|
|
createDefaultServerTraefikConfig();
|
|
console.log("✅ initialization complete");
|
|
}
|
|
|
|
const app = next({ dev, turbopack: process.env.TURBOPACK === "1" });
|
|
const handle = app.getRequestHandler();
|
|
void app.prepare().then(async () => {
|
|
try {
|
|
console.log("Running DokployVersion: ", packageInfo.version);
|
|
const server = http.createServer((req, res) => {
|
|
handle(req, res);
|
|
});
|
|
|
|
// WEBSOCKET
|
|
setupDrawerLogsWebSocketServer(server);
|
|
setupDeploymentLogsWebSocketServer(server);
|
|
setupDockerContainerLogsWebSocketServer(server);
|
|
setupDockerContainerTerminalWebSocketServer(server);
|
|
setupTerminalWebSocketServer(server);
|
|
if (!IS_CLOUD) {
|
|
setupDockerStatsMonitoringSocketServer(server);
|
|
}
|
|
|
|
server.listen(PORT, HOST);
|
|
console.log(`Server Started on: http://${HOST}:${PORT}`);
|
|
if (process.env.NODE_ENV === "production" && !IS_CLOUD) {
|
|
createDefaultMiddlewares();
|
|
await initializeNetwork();
|
|
await initCronJobs();
|
|
await initSchedules();
|
|
await initCancelDeployments();
|
|
await initVolumeBackupsCronJobs();
|
|
await sendDokployRestartNotifications();
|
|
}
|
|
await initEnterpriseBackupCronJobs();
|
|
|
|
if (!IS_CLOUD) {
|
|
console.log("Starting Deployment Worker");
|
|
const { deploymentWorker } = await import("./queues/deployments-queue");
|
|
await deploymentWorker.run();
|
|
}
|
|
} catch (e) {
|
|
console.error("Main Server Error", e);
|
|
}
|
|
});
|