From b7f63fdad438839a42263374492b00692873ad4c Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 9 Mar 2025 02:32:02 -0600 Subject: [PATCH] refactor(traefik): improve migration and removal of Traefik services - Update Traefik service detection and removal logic in server and traefik setup - Use Docker service and container inspection methods for more robust service management - Add graceful migration and removal of existing Traefik services - Simplify image pulling and service removal process --- packages/server/src/setup/server-setup.ts | 9 ++++++++- packages/server/src/setup/traefik-setup.ts | 20 +++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/server/src/setup/server-setup.ts b/packages/server/src/setup/server-setup.ts index 24cf76b9..e129dce1 100644 --- a/packages/server/src/setup/server-setup.ts +++ b/packages/server/src/setup/server-setup.ts @@ -543,7 +543,14 @@ export const installRClone = () => ` export const createTraefikInstance = () => { const command = ` # Check if dokpyloy-traefik exists - if docker ps -a --format '{{.Names}}' | grep -q '^dokploy-traefik$'; then + if docker service inspect dokploy-traefik > /dev/null 2>&1; then + echo "Migrating Traefik to Standalone..." + docker service rm dokploy-traefik + sleep 7 + echo "Traefik migrated to Standalone ✅" + fi + + if docker inspect dokploy-traefik > /dev/null 2>&1; then echo "Traefik already exists ✅" else # Create the dokploy-traefik container diff --git a/packages/server/src/setup/traefik-setup.ts b/packages/server/src/setup/traefik-setup.ts index c76a1f80..7f2b707d 100644 --- a/packages/server/src/setup/traefik-setup.ts +++ b/packages/server/src/setup/traefik-setup.ts @@ -3,11 +3,9 @@ import path from "node:path"; import type { ContainerCreateOptions } from "dockerode"; import { dump } from "js-yaml"; import { paths } from "../constants"; -import { pullImage, pullRemoteImage } from "../utils/docker/utils"; import { getRemoteDocker } from "../utils/servers/remote-docker"; import type { FileConfig } from "../utils/traefik/file-types"; import type { MainTraefikConfig } from "../utils/traefik/types"; -import { execAsync, execAsyncRemote } from "../utils/process/execAsync"; export const TRAEFIK_SSL_PORT = Number.parseInt(process.env.TRAEFIK_SSL_PORT!, 10) || 443; @@ -90,19 +88,11 @@ export const initializeTraefik = async ({ const docker = await getRemoteDocker(serverId); try { - if (serverId) { - await pullRemoteImage(imageName, serverId); - } else { - await pullImage(imageName); - } - - // remove dokploy-service if it exists - const command = "docker service rm dokploy-service > /dev/null 2>&1"; - if (serverId) { - await execAsyncRemote(command, serverId); - } else { - await execAsync(command); - } + try { + const service = docker.getService("dokploy-traefik"); + await service?.remove({ force: true }); + await new Promise((resolve) => setTimeout(resolve, 5000)); + } catch (_) {} const container = docker.getContainer(containerName); try {