From e63eed57ddaa77bd71eb6a94104c621e0df1ff4e Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 10 Mar 2025 01:49:00 -0600 Subject: [PATCH 1/3] refactor: remove throw --- packages/server/src/utils/backups/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/server/src/utils/backups/index.ts b/packages/server/src/utils/backups/index.ts index b0ebdae2..4b194efc 100644 --- a/packages/server/src/utils/backups/index.ts +++ b/packages/server/src/utils/backups/index.ts @@ -212,6 +212,5 @@ export const keepLatestNBackups = async ( } } catch (error) { console.error(error); - throw error; } }; From fce22ec1d00c1449b997bc25f57cabd8a15b865e Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 10 Mar 2025 01:54:25 -0600 Subject: [PATCH 2/3] fix(traefik): increase migration wait time for service removal Adjust sleep/timeout duration in Traefik migration scripts to ensure proper service removal and container initialization --- packages/server/src/setup/server-setup.ts | 2 +- packages/server/src/setup/traefik-setup.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/src/setup/server-setup.ts b/packages/server/src/setup/server-setup.ts index e129dce1..677ce74a 100644 --- a/packages/server/src/setup/server-setup.ts +++ b/packages/server/src/setup/server-setup.ts @@ -546,7 +546,7 @@ export const createTraefikInstance = () => { if docker service inspect dokploy-traefik > /dev/null 2>&1; then echo "Migrating Traefik to Standalone..." docker service rm dokploy-traefik - sleep 7 + sleep 8 echo "Traefik migrated to Standalone ✅" fi diff --git a/packages/server/src/setup/traefik-setup.ts b/packages/server/src/setup/traefik-setup.ts index 7f2b707d..55806271 100644 --- a/packages/server/src/setup/traefik-setup.ts +++ b/packages/server/src/setup/traefik-setup.ts @@ -91,7 +91,7 @@ export const initializeTraefik = async ({ try { const service = docker.getService("dokploy-traefik"); await service?.remove({ force: true }); - await new Promise((resolve) => setTimeout(resolve, 5000)); + await new Promise((resolve) => setTimeout(resolve, 9000)); } catch (_) {} const container = docker.getContainer(containerName); From f159dc11ebcae8f7e617122d9af35086cef1536e Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 10 Mar 2025 02:23:17 -0600 Subject: [PATCH 3/3] fix(traefik): increase service removal wait time to 15 seconds Extend the timeout duration when removing Traefik service to ensure complete service removal and prevent potential initialization issues --- packages/server/src/setup/traefik-setup.ts | 47 ++++++++++++++++++---- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/packages/server/src/setup/traefik-setup.ts b/packages/server/src/setup/traefik-setup.ts index 55806271..fc6d04fc 100644 --- a/packages/server/src/setup/traefik-setup.ts +++ b/packages/server/src/setup/traefik-setup.ts @@ -91,9 +91,26 @@ export const initializeTraefik = async ({ try { const service = docker.getService("dokploy-traefik"); await service?.remove({ force: true }); - await new Promise((resolve) => setTimeout(resolve, 9000)); - } catch (_) {} + let attempts = 0; + const maxAttempts = 5; + while (attempts < maxAttempts) { + try { + await docker.listServices({ + filters: { name: ["dokploy-traefik"] }, + }); + console.log("Waiting for service cleanup..."); + await new Promise((resolve) => setTimeout(resolve, 5000)); + attempts++; + } catch (e) { + break; + } + } + } catch (err) { + console.log("No existing service to remove"); + } + + // Then try to remove any existing container const container = docker.getContainer(containerName); try { const inspect = await container.inspect(); @@ -103,15 +120,31 @@ export const initializeTraefik = async ({ } await container.remove({ force: true }); + await new Promise((resolve) => setTimeout(resolve, 5000)); } catch (error) { - console.log(error); + console.log("No existing container to remove"); } - await docker.createContainer(settings); - const newContainer = docker.getContainer(containerName); - await newContainer.start(); + // Create and start the new container + try { + await docker.createContainer(settings); + const newContainer = docker.getContainer(containerName); + await newContainer.start(); + console.log("Traefik container started successfully"); + } catch (error: any) { + if (error?.json?.message?.includes("port is already allocated")) { + console.log("Ports still in use, waiting longer for cleanup..."); + await new Promise((resolve) => setTimeout(resolve, 10000)); + // Try one more time + await docker.createContainer(settings); + const newContainer = docker.getContainer(containerName); + await newContainer.start(); + console.log("Traefik container started successfully after retry"); + } + } } catch (error) { - console.log(error); + console.error("Failed to initialize Traefik:", error); + throw error; } };