diff --git a/apps/dokploy/server/server.ts b/apps/dokploy/server/server.ts index 5fe048c92..1d4c6e48b 100644 --- a/apps/dokploy/server/server.ts +++ b/apps/dokploy/server/server.ts @@ -56,17 +56,18 @@ void app.prepare().then(async () => { setupDockerStatsMonitoringSocketServer(server); } - server.listen(PORT, HOST); - console.log(`Server Started on: http://${HOST}:${PORT}`); if (process.env.NODE_ENV === "production" && !IS_CLOUD) { + await initCancelDeployments(); createDefaultMiddlewares(); await initializeNetwork(); await initCronJobs(); await initSchedules(); - await initCancelDeployments(); await initVolumeBackupsCronJobs(); await sendDokployRestartNotifications(); } + + server.listen(PORT, HOST); + console.log(`Server Started on: http://${HOST}:${PORT}`); await initEnterpriseBackupCronJobs(); if (!IS_CLOUD) { diff --git a/packages/server/src/services/deployment.ts b/packages/server/src/services/deployment.ts index 163b5ad3e..ef9d0ebab 100644 --- a/packages/server/src/services/deployment.ts +++ b/packages/server/src/services/deployment.ts @@ -134,10 +134,28 @@ export const resolveQueuedDeployment = async < return createNew(); } try { - const deployment = await findDeploymentById(deploymentId); - await updateDeploymentStatus(deployment.deploymentId, "running"); + const claimed = await db + .update(deployments) + .set({ + status: "running", + startedAt: new Date().toISOString(), + }) + .where( + and( + eq(deployments.deploymentId, deploymentId), + eq(deployments.status, "queued"), + ), + ) + .returning(); + + if (claimed.length === 0) { + console.log(`Deployment ${deploymentId} is no longer queued, skipping`); + await resetStatus().catch(console.error); + return null; + } + await setRunning(); - return deployment as unknown as T; + return claimed[0] as unknown as T; } catch (error) { console.error(`Deployment ${deploymentId} lookup failed, skipping`, error); await updateDeploymentStatus(deploymentId, "error").catch(console.error);