mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-25 00:55:30 +02:00
Implement metadata handling for database and compose backups. Update backup schemas to include metadata fields for various database types. Enhance backup creation and update processes to accommodate new metadata requirements. Modify UI components to support metadata input for different database types during backup operations.
This commit is contained in:
4
packages/server/src/utils/docker/backup.ts
Normal file
4
packages/server/src/utils/docker/backup.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export const createBackupLabels = (backupId: string) => {
|
||||
const labels = [`dokploy.backup.id=${backupId}`];
|
||||
return labels;
|
||||
};
|
||||
@@ -38,6 +38,8 @@ import type {
|
||||
PropertiesNetworks,
|
||||
} from "./types";
|
||||
import { encodeBase64 } from "./utils";
|
||||
import type { Backup } from "@dokploy/server/services/backup";
|
||||
import { createBackupLabels } from "./backup";
|
||||
|
||||
export const cloneCompose = async (compose: Compose) => {
|
||||
if (compose.sourceType === "github") {
|
||||
@@ -132,13 +134,13 @@ export const readComposeFile = async (compose: Compose) => {
|
||||
};
|
||||
|
||||
export const writeDomainsToCompose = async (
|
||||
compose: Compose,
|
||||
domains: Domain[],
|
||||
compose: Compose & { domains: Domain[]; backups: Backup[] },
|
||||
) => {
|
||||
if (!domains.length) {
|
||||
const { domains, backups } = compose;
|
||||
if (!domains.length && !backups.length) {
|
||||
return;
|
||||
}
|
||||
const composeConverted = await addDomainToCompose(compose, domains);
|
||||
const composeConverted = await addDomainToCompose(compose);
|
||||
|
||||
const path = getComposePath(compose);
|
||||
const composeString = dump(composeConverted, { lineWidth: 1000 });
|
||||
@@ -150,7 +152,7 @@ export const writeDomainsToCompose = async (
|
||||
};
|
||||
|
||||
export const writeDomainsToComposeRemote = async (
|
||||
compose: Compose,
|
||||
compose: Compose & { domains: Domain[]; backups: Backup[] },
|
||||
domains: Domain[],
|
||||
logPath: string,
|
||||
) => {
|
||||
@@ -159,7 +161,7 @@ export const writeDomainsToComposeRemote = async (
|
||||
}
|
||||
|
||||
try {
|
||||
const composeConverted = await addDomainToCompose(compose, domains);
|
||||
const composeConverted = await addDomainToCompose(compose);
|
||||
const path = getComposePath(compose);
|
||||
|
||||
if (!composeConverted) {
|
||||
@@ -180,22 +182,20 @@ exit 1;
|
||||
`;
|
||||
}
|
||||
};
|
||||
// (node:59875) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGTERM listeners added to [process]. Use emitter.setMaxListeners() to increase limit
|
||||
export const addDomainToCompose = async (
|
||||
compose: Compose,
|
||||
domains: Domain[],
|
||||
compose: Compose & { domains: Domain[]; backups: Backup[] },
|
||||
) => {
|
||||
const { appName } = compose;
|
||||
const { appName, domains, backups } = compose;
|
||||
|
||||
let result: ComposeSpecification | null;
|
||||
|
||||
if (compose.serverId) {
|
||||
result = await loadDockerComposeRemote(compose); // aca hay que ir al servidor e ir a traer el compose file al servidor
|
||||
result = await loadDockerComposeRemote(compose);
|
||||
} else {
|
||||
result = await loadDockerCompose(compose);
|
||||
}
|
||||
|
||||
if (!result || domains.length === 0) {
|
||||
if (!result || (domains.length === 0 && backups.length === 0)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -264,6 +264,37 @@ export const addDomainToCompose = async (
|
||||
}
|
||||
}
|
||||
|
||||
for (const backup of backups) {
|
||||
const { backupId, serviceName, enabled } = backup;
|
||||
|
||||
if (!enabled) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!serviceName) {
|
||||
throw new Error(
|
||||
"Service name not found, please check the backups to use a valid service name",
|
||||
);
|
||||
}
|
||||
|
||||
if (!result?.services?.[serviceName]) {
|
||||
throw new Error(`The service ${serviceName} not found in the compose`);
|
||||
}
|
||||
|
||||
const backupLabels = createBackupLabels(backupId);
|
||||
|
||||
if (!result.services[serviceName].labels) {
|
||||
result.services[serviceName].labels = [];
|
||||
}
|
||||
|
||||
result.services[serviceName].labels = [
|
||||
...(Array.isArray(result.services[serviceName].labels)
|
||||
? result.services[serviceName].labels
|
||||
: []),
|
||||
...backupLabels,
|
||||
];
|
||||
}
|
||||
|
||||
// Add dokploy-network to the root of the compose file
|
||||
if (!compose.isolatedDeployment) {
|
||||
result.networks = addDokployNetworkToRoot(result.networks);
|
||||
|
||||
Reference in New Issue
Block a user