mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-07-08 07:25:22 +02:00
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:
62
packages/server/src/utils/volume-backups/utils.ts
Normal file
62
packages/server/src/utils/volume-backups/utils.ts
Normal 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 ``;
|
||||
};
|
||||
Reference in New Issue
Block a user