mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-16 04:35:24 +02:00
feat: implement volume restoration functionality
- Added a new restoreVolume function to facilitate the restoration of Docker volumes from backups. - Integrated service type handling for both application and compose, ensuring proper scaling and management of services during restoration. - Enhanced command generation for restoring volumes, improving clarity and maintainability of the logic.
This commit is contained in:
@@ -62,3 +62,48 @@ const backupVolume = async (
|
||||
`;
|
||||
}
|
||||
};
|
||||
|
||||
export const restoreVolume = async (
|
||||
volumeBackup: Awaited<ReturnType<typeof findVolumeBackupById>>,
|
||||
) => {
|
||||
const { serviceType, volumeName } = volumeBackup;
|
||||
|
||||
const baseCommand = `
|
||||
docker volume rm ${volumeName} --force
|
||||
docker run --rm \
|
||||
-v ${volumeName}:/volume_data \
|
||||
-v $(pwd):/backup \
|
||||
ubuntu \
|
||||
bash -c "cd /volume_data && tar xvf /backup/${volumeName}.tar ."
|
||||
`;
|
||||
|
||||
if (serviceType === "application") {
|
||||
return `
|
||||
docker service scale ${volumeBackup.application?.appName}=0
|
||||
${baseCommand}
|
||||
ACTUAL_REPLICAS=$(docker service inspect ${volumeBackup.application?.appName} --format "{{.Spec.Mode.Replicated.Replicas}}")
|
||||
docker service scale ${volumeBackup.application?.appName}=$ACTUAL_REPLICAS
|
||||
`;
|
||||
}
|
||||
|
||||
if (serviceType === "compose") {
|
||||
const compose = await findComposeById(
|
||||
volumeBackup.compose?.composeId || "",
|
||||
);
|
||||
|
||||
if (compose.composeType === "stack") {
|
||||
return `
|
||||
ACTUAL_REPLICAS=$(docker service inspect ${compose.appName}_${volumeBackup.serviceName} --format "{{.Spec.Mode.Replicated.Replicas}}")
|
||||
docker service scale ${compose.appName}_${volumeBackup.serviceName}=0
|
||||
${baseCommand}
|
||||
docker service scale ${compose.appName}_${volumeBackup.serviceName}=$ACTUAL_REPLICAS
|
||||
`;
|
||||
}
|
||||
return `
|
||||
ID=$(docker ps -q --filter "label=com.docker.compose.project=${compose.appName}" --filter "label=com.docker.compose.service=${volumeBackup.serviceName}")
|
||||
docker stop $ID
|
||||
${baseCommand}
|
||||
docker start $ID
|
||||
`;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user