Enhance backup functionality: add support for 'web-server' database type in backup components, update related schemas, and implement new backup procedures. Introduce userId reference in backups schema and adjust UI components to accommodate the new type.

This commit is contained in:
Mauricio Siu
2025-03-29 17:53:57 -06:00
parent 930a03de60
commit 50c8503cf9
14 changed files with 10851 additions and 58 deletions

View File

@@ -19,6 +19,7 @@ import {
findPostgresByBackupId,
findPostgresById,
findServerById,
paths,
removeBackupById,
removeScheduleBackup,
runMariadbBackup,
@@ -85,9 +86,13 @@ export const backupRouter = createTRPCRouter({
}
}
} catch (error) {
console.error(error);
throw new TRPCError({
code: "BAD_REQUEST",
message: "Error creating the Backup",
message:
error instanceof Error
? error.message
: "Error creating the Backup",
cause: error,
});
}
@@ -227,6 +232,35 @@ export const backupRouter = createTRPCRouter({
});
}
}),
manualBackupWebServer: protectedProcedure
.input(apiFindOneBackup)
.mutation(async ({ input }) => {
try {
const backup = await findBackupById(input.backupId);
const destination = await findDestinationById(backup.destinationId);
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
const { BASE_PATH } = paths();
const tempDir = `${BASE_PATH}`;
try {
const postgresCommand = `docker exec $(docker ps --filter "name=dokploy-postgres" -q) pg_dump -v -Fc -U dokploy -d dokploy > ${tempDir}/${timestamp}.sql`;
console.log("Executing backup command:", postgresCommand);
await execAsync(postgresCommand);
return true;
} finally {
// Keep files for inspection
}
} catch (error) {
console.error("Backup error:", error);
throw new TRPCError({
code: "BAD_REQUEST",
message: "Error running manual Web Server backup",
cause: error,
});
}
}),
listBackupFiles: protectedProcedure
.input(
z.object({
@@ -301,7 +335,13 @@ export const backupRouter = createTRPCRouter({
.input(
z.object({
databaseId: z.string(),
databaseType: z.enum(["postgres", "mysql", "mariadb", "mongo"]),
databaseType: z.enum([
"postgres",
"mysql",
"mariadb",
"mongo",
"web-server",
]),
databaseName: z.string().min(1),
backupFile: z.string().min(1),
destinationId: z.string().min(1),