mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-18 13:45:23 +02:00
- Added `apiRestoreBackup` schema to define input requirements for restore operations. - Refactored restore utilities for PostgreSQL, MySQL, MariaDB, and MongoDB to utilize a unified command generation approach, enhancing maintainability. - Improved logging during restore processes to provide clearer feedback on command execution and success/failure states. - Streamlined the handling of database credentials and backup file paths across different database types, ensuring consistency and reducing redundancy.
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import type { Destination } from "@dokploy/server/services/destination";
|
|
import type { Postgres } from "@dokploy/server/services/postgres";
|
|
import { getS3Credentials } from "../backups/utils";
|
|
import { execAsync, execAsyncRemote } from "../process/execAsync";
|
|
import { getRestoreCommand } from "./utils";
|
|
import type { apiRestoreBackup } from "@dokploy/server/db/schema";
|
|
import type { z } from "zod";
|
|
|
|
export const restorePostgresBackup = async (
|
|
postgres: Postgres,
|
|
destination: Destination,
|
|
backupInput: z.infer<typeof apiRestoreBackup>,
|
|
emit: (log: string) => void,
|
|
) => {
|
|
try {
|
|
const { appName, databaseUser, serverId } = postgres;
|
|
|
|
const rcloneFlags = getS3Credentials(destination);
|
|
const bucketPath = `:s3:${destination.bucket}`;
|
|
|
|
const backupPath = `${bucketPath}/${backupInput.backupFile}`;
|
|
|
|
const rcloneCommand = `rclone cat ${rcloneFlags.join(" ")} "${backupPath}" | gunzip`;
|
|
|
|
emit("Starting restore...");
|
|
emit(`Backup path: ${backupPath}`);
|
|
|
|
const command = getRestoreCommand({
|
|
appName,
|
|
credentials: {
|
|
database: backupInput.databaseName,
|
|
databaseUser,
|
|
},
|
|
type: "postgres",
|
|
rcloneCommand,
|
|
restoreType: "database",
|
|
});
|
|
|
|
emit(`Executing command: ${command}`);
|
|
|
|
if (serverId) {
|
|
await execAsyncRemote(serverId, command);
|
|
} else {
|
|
await execAsync(command);
|
|
}
|
|
|
|
emit("Restore completed successfully!");
|
|
} catch (error) {
|
|
emit(
|
|
`Error: ${
|
|
error instanceof Error
|
|
? error.message
|
|
: "Error restoring postgres backup"
|
|
}`,
|
|
);
|
|
throw error;
|
|
}
|
|
};
|