feat: implement service-based volume selection for backups

- Added a new query to load mounts by service name, enhancing the volume backup form's functionality.
- Updated the form to allow users to select a service and corresponding volume from a dropdown, improving user experience.
- Retained the option for manual input of volume names, ensuring flexibility in volume selection.
- Refactored the component to streamline the handling of service and volume selections.
This commit is contained in:
Mauricio Siu
2025-06-30 01:25:50 -06:00
parent 819a310d48
commit c042c8c0c5
3 changed files with 292 additions and 162 deletions

View File

@@ -0,0 +1,62 @@
import type { findVolumeBackupById } from "@dokploy/server/services/volume-backups";
import { getComposeContainer } from "../docker/utils";
import { findComposeById, paths, paths } from "../..";
export const createVolumeBackup = async (
volumeBackup: Awaited<ReturnType<typeof findVolumeBackupById>>,
) => {
const serverId =
volumeBackup.application?.serverId || volumeBackup.compose?.serverId;
if (serverId) {
} else {
}
};
const backupVolume = async (
volumeBackup: Awaited<ReturnType<typeof findVolumeBackupById>>,
) => {
const { serviceType, volumeName, turnOff } = volumeBackup;
if (turnOff) {
return `docker run --rm \
-v ${volumeName}:/volume_data \
-v $(pwd):/backup \
ubuntu \
bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar ."`;
}
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
"`;
}
if (serviceType === "compose") {
const compose = await findComposeById(
volumeBackup.compose?.composeId || "",
);
const { COMPOSE_PATH } = paths(!!compose.serverId);
let stopCommand = "";
if (compose.composeType === "stack") {
stopCommand = `docker service scale ${compose.appName}_${volumeBackup.serviceName}=0`;
} else {
stopCommand = `docker compose down --remove-orphans`;
}
return `
docker run --rm \
-v ${volumeName}:/volume_data \
-v $(pwd):/backup \
ubuntu \
bash -c "cd /volume_data && tar cvf /backup/${volumeName}.tar ."`;
}
return ``;
};