From 9974b2326ff25c60e63ecd7e06c9e240305d5318 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Mon, 30 Jun 2025 01:33:12 -0600 Subject: [PATCH] refactor: streamline volume backup command generation - Consolidated Docker command construction for volume backups into a base command to reduce redundancy. - Enhanced service type handling for application and compose, ensuring proper scaling and stopping of services during backup. - Improved readability and maintainability of the backup command logic by using template literals and consistent formatting. --- .../server/src/utils/volume-backups/utils.ts | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/server/src/utils/volume-backups/utils.ts b/packages/server/src/utils/volume-backups/utils.ts index 375d3139a..ed276cd0e 100644 --- a/packages/server/src/utils/volume-backups/utils.ts +++ b/packages/server/src/utils/volume-backups/utils.ts @@ -1,6 +1,5 @@ import type { findVolumeBackupById } from "@dokploy/server/services/volume-backups"; -import { getComposeContainer } from "../docker/utils"; -import { findComposeById, paths, paths } from "../.."; +import { findComposeById } from "../.."; export const createVolumeBackup = async ( volumeBackup: Awaited>, @@ -18,45 +17,49 @@ const backupVolume = async ( ) => { const { serviceType, volumeName, turnOff } = volumeBackup; - if (turnOff) { - return `docker run --rm \ + const baseCommand = ` + docker run --rm \ -v ${volumeName}:/volume_data \ -v $(pwd):/backup \ ubuntu \ - bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar ."`; + bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar ." + `; + + if (turnOff) { + return baseCommand; } if (serviceType === "application") { return ` docker service scale ${volumeBackup.application?.appName}=0 - docker run --rm \ - -v ${volumeName}:/volume_data \ - -v $(pwd):/backup \ - ubuntu \ - bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar . - docker service scale ${volumeBackup.application?.appName}=1 - "`; + ${baseCommand} + docker service scale ${volumeBackup.application?.appName}=1 + `; } if (serviceType === "compose") { const compose = await findComposeById( volumeBackup.compose?.composeId || "", ); - const { COMPOSE_PATH } = paths(!!compose.serverId); let stopCommand = ""; + let startCommand = ""; if (compose.composeType === "stack") { - stopCommand = `docker service scale ${compose.appName}_${volumeBackup.serviceName}=0`; + stopCommand = ` + ACTUAL_REPLICAS=$(docker service inspect ${compose.appName}_${volumeBackup.serviceName} --format "{{.Spec.Mode.Replicated.Replicas}}") + docker service scale ${compose.appName}_${volumeBackup.serviceName}=0`; + startCommand = `docker service scale ${compose.appName}_${volumeBackup.serviceName}=$ACTUAL_REPLICAS`; } else { - stopCommand = `docker compose down --remove-orphans`; + stopCommand = ` + ID=$(docker ps -q --filter "label=com.docker.compose.project=${compose.appName}" --filter "label=com.docker.compose.service=${volumeBackup.serviceName}") + docker stop $ID`; + startCommand = ` + ID=$(docker ps -q --filter "label=com.docker.compose.project=${compose.appName}" --filter "label=com.docker.compose.service=${volumeBackup.serviceName}") + docker start $ID`; } return ` - - docker run --rm \ - -v ${volumeName}:/volume_data \ - -v $(pwd):/backup \ - ubuntu \ - bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar ."`; + ${stopCommand} + ${baseCommand} + ${startCommand} + `; } - - return ``; };