File tree Expand file tree Collapse file tree
packages/server/src/utils Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,7 +8,12 @@ import { findEnvironmentById } from "@dokploy/server/services/environment";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runComposeBackup = async (
1419 compose : Compose ,
@@ -19,7 +24,7 @@ export const runComposeBackup = async (
1924 const project = await findProjectById ( environment . projectId ) ;
2025 const { prefix, databaseType, serviceName } = backup ;
2126 const destination = backup . destination ;
22- const backupFileName = `${ new Date ( ) . toISOString ( ) } .${ databaseType === "mongo" ? "bson" : "sql" } .gz` ;
27+ const backupFileName = `${ getBackupTimestamp ( ) } .${ databaseType === "mongo" ? "bson" : "sql" } .gz` ;
2328 const s3AppName = serviceName ? `${ appName } _${ serviceName } ` : appName ;
2429 const bucketDestination = `${ s3AppName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
2530 const deployment = await createDeploymentBackup ( {
Original file line number Diff line number Diff line change @@ -8,7 +8,12 @@ import type { Libsql } from "@dokploy/server/services/libsql";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runLibsqlBackup = async (
1419 libsql : Libsql ,
@@ -25,7 +30,7 @@ export const runLibsqlBackup = async (
2530 } ) ;
2631 const { prefix } = backup ;
2732 const destination = backup . destination ;
28- const backupFileName = `${ new Date ( ) . toISOString ( ) } .sql.gz` ;
33+ const backupFileName = `${ getBackupTimestamp ( ) } .sql.gz` ;
2934 const bucketDestination = `${ appName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
3035 try {
3136 const rcloneFlags = getS3Credentials ( destination ) ;
Original file line number Diff line number Diff line change @@ -8,7 +8,12 @@ import type { Mariadb } from "@dokploy/server/services/mariadb";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runMariadbBackup = async (
1419 mariadb : Mariadb ,
@@ -19,7 +24,7 @@ export const runMariadbBackup = async (
1924 const project = await findProjectById ( environment . projectId ) ;
2025 const { prefix } = backup ;
2126 const destination = backup . destination ;
22- const backupFileName = `${ new Date ( ) . toISOString ( ) } .sql.gz` ;
27+ const backupFileName = `${ getBackupTimestamp ( ) } .sql.gz` ;
2328 const bucketDestination = `${ appName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
2429 const deployment = await createDeploymentBackup ( {
2530 backupId : backup . backupId ,
Original file line number Diff line number Diff line change @@ -8,15 +8,20 @@ import type { Mongo } from "@dokploy/server/services/mongo";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runMongoBackup = async ( mongo : Mongo , backup : BackupSchedule ) => {
1419 const { environmentId, name, appName } = mongo ;
1520 const environment = await findEnvironmentById ( environmentId ) ;
1621 const project = await findProjectById ( environment . projectId ) ;
1722 const { prefix } = backup ;
1823 const destination = backup . destination ;
19- const backupFileName = `${ new Date ( ) . toISOString ( ) } .bson.gz` ;
24+ const backupFileName = `${ getBackupTimestamp ( ) } .bson.gz` ;
2025 const bucketDestination = `${ appName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
2126 const deployment = await createDeploymentBackup ( {
2227 backupId : backup . backupId ,
Original file line number Diff line number Diff line change @@ -8,15 +8,20 @@ import type { MySql } from "@dokploy/server/services/mysql";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runMySqlBackup = async ( mysql : MySql , backup : BackupSchedule ) => {
1419 const { environmentId, name, appName } = mysql ;
1520 const environment = await findEnvironmentById ( environmentId ) ;
1621 const project = await findProjectById ( environment . projectId ) ;
1722 const { prefix } = backup ;
1823 const destination = backup . destination ;
19- const backupFileName = `${ new Date ( ) . toISOString ( ) } .sql.gz` ;
24+ const backupFileName = `${ getBackupTimestamp ( ) } .sql.gz` ;
2025 const bucketDestination = `${ appName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
2126 const deployment = await createDeploymentBackup ( {
2227 backupId : backup . backupId ,
Original file line number Diff line number Diff line change @@ -8,7 +8,12 @@ import type { Postgres } from "@dokploy/server/services/postgres";
88import { findProjectById } from "@dokploy/server/services/project" ;
99import { sendDatabaseBackupNotifications } from "../notifications/database-backup" ;
1010import { execAsync , execAsyncRemote } from "../process/execAsync" ;
11- import { getBackupCommand , getS3Credentials , normalizeS3Path } from "./utils" ;
11+ import {
12+ getBackupCommand ,
13+ getBackupTimestamp ,
14+ getS3Credentials ,
15+ normalizeS3Path ,
16+ } from "./utils" ;
1217
1318export const runPostgresBackup = async (
1419 postgres : Postgres ,
@@ -25,7 +30,7 @@ export const runPostgresBackup = async (
2530 } ) ;
2631 const { prefix } = backup ;
2732 const destination = backup . destination ;
28- const backupFileName = `${ new Date ( ) . toISOString ( ) } .sql.gz` ;
33+ const backupFileName = `${ getBackupTimestamp ( ) } .sql.gz` ;
2934 const bucketDestination = `${ appName } /${ normalizeS3Path ( prefix ) } ${ backupFileName } ` ;
3035 try {
3136 const rcloneFlags = getS3Credentials ( destination ) ;
Original file line number Diff line number Diff line change @@ -56,6 +56,9 @@ export const removeScheduleBackup = (backupId: string) => {
5656 currentJob ?. cancel ( ) ;
5757} ;
5858
59+ export const getBackupTimestamp = ( ) =>
60+ new Date ( ) . toISOString ( ) . replace ( / [: .] / g, "-" ) ;
61+
5962export const normalizeS3Path = ( prefix : string ) => {
6063 // Trim whitespace and remove leading/trailing slashes
6164 const normalizedPrefix = prefix . trim ( ) . replace ( / ^ \/ + | \/ + $ / g, "" ) ;
Original file line number Diff line number Diff line change @@ -11,7 +11,7 @@ import {
1111import { findDestinationById } from "@dokploy/server/services/destination" ;
1212import { sendDokployBackupNotifications } from "../notifications/dokploy-backup" ;
1313import { execAsync } from "../process/execAsync" ;
14- import { getS3Credentials , normalizeS3Path } from "./utils" ;
14+ import { getBackupTimestamp , getS3Credentials , normalizeS3Path } from "./utils" ;
1515
1616function formatBytes ( bytes ?: number ) {
1717 if ( bytes === undefined ) return "Unknown size" ;
@@ -37,7 +37,7 @@ export const runWebServerBackup = async (backup: BackupSchedule) => {
3737 try {
3838 const destination = await findDestinationById ( backup . destinationId ) ;
3939 const rcloneFlags = getS3Credentials ( destination ) ;
40- const timestamp = new Date ( ) . toISOString ( ) . replace ( / [: . ] / g , "-" ) ;
40+ const timestamp = getBackupTimestamp ( ) ;
4141 const { BASE_PATH } = paths ( ) ;
4242 const tempDir = await mkdtemp ( join ( tmpdir ( ) , "dokploy-backup-" ) ) ;
4343 const backupFileName = `webserver-backup-${ timestamp } .zip` ;
Original file line number Diff line number Diff line change @@ -2,7 +2,11 @@ import path from "node:path";
22import { paths } from "@dokploy/server/constants" ;
33import { findComposeById } from "@dokploy/server/services/compose" ;
44import type { findVolumeBackupById } from "@dokploy/server/services/volume-backups" ;
5- import { getS3Credentials , normalizeS3Path } from "../backups/utils" ;
5+ import {
6+ getBackupTimestamp ,
7+ getS3Credentials ,
8+ normalizeS3Path ,
9+ } from "../backups/utils" ;
610
711export const getVolumeServiceAppName = (
812 volumeBackup : Awaited < ReturnType < typeof findVolumeBackupById > > ,
@@ -32,7 +36,7 @@ export const backupVolume = async (
3236 const { VOLUME_BACKUPS_PATH , VOLUME_BACKUP_LOCK_PATH } = paths ( ! ! serverId ) ;
3337 const destination = volumeBackup . destination ;
3438 const s3AppName = getVolumeServiceAppName ( volumeBackup ) ;
35- const backupFileName = `${ volumeName } -${ new Date ( ) . toISOString ( ) } .tar` ;
39+ const backupFileName = `${ volumeName } -${ getBackupTimestamp ( ) } .tar` ;
3640 const bucketDestination = `${ s3AppName } /${ normalizeS3Path ( prefix || "" ) } ${ backupFileName } ` ;
3741 const rcloneFlags = getS3Credentials ( volumeBackup . destination ) ;
3842 const rcloneDestination = `:s3:${ destination . bucket } /${ bucketDestination } ` ;
You can’t perform that action at this time.
0 commit comments