mirror of
https://github.com/andwati/dokploy.git
synced 2026-11-10 22:15:16 +00: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