diff --git a/packages/server/src/utils/backups/compose.ts b/packages/server/src/utils/backups/compose.ts index 296498ff3..7a5ba5535 100644 --- a/packages/server/src/utils/backups/compose.ts +++ b/packages/server/src/utils/backups/compose.ts @@ -37,11 +37,10 @@ export const runComposeBackup = async ( try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); if (compose.serverId) { diff --git a/packages/server/src/utils/backups/libsql.ts b/packages/server/src/utils/backups/libsql.ts index 7f6c85f48..c4ece6ed6 100644 --- a/packages/server/src/utils/backups/libsql.ts +++ b/packages/server/src/utils/backups/libsql.ts @@ -36,12 +36,10 @@ export const runLibsqlBackup = async ( try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); if (libsql.serverId) { diff --git a/packages/server/src/utils/backups/mariadb.ts b/packages/server/src/utils/backups/mariadb.ts index 121910ee8..4a3f7dc26 100644 --- a/packages/server/src/utils/backups/mariadb.ts +++ b/packages/server/src/utils/backups/mariadb.ts @@ -35,11 +35,10 @@ export const runMariadbBackup = async ( try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); if (mariadb.serverId) { diff --git a/packages/server/src/utils/backups/mongo.ts b/packages/server/src/utils/backups/mongo.ts index 4b212d70c..6b80ccc86 100644 --- a/packages/server/src/utils/backups/mongo.ts +++ b/packages/server/src/utils/backups/mongo.ts @@ -32,11 +32,10 @@ export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); diff --git a/packages/server/src/utils/backups/mysql.ts b/packages/server/src/utils/backups/mysql.ts index 8d0e6188a..2ac9228be 100644 --- a/packages/server/src/utils/backups/mysql.ts +++ b/packages/server/src/utils/backups/mysql.ts @@ -33,12 +33,10 @@ export const runMySqlBackup = async (mysql: MySql, backup: BackupSchedule) => { try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); diff --git a/packages/server/src/utils/backups/postgres.ts b/packages/server/src/utils/backups/postgres.ts index e57682f39..de7ef5500 100644 --- a/packages/server/src/utils/backups/postgres.ts +++ b/packages/server/src/utils/backups/postgres.ts @@ -36,12 +36,10 @@ export const runPostgresBackup = async ( try { const rcloneFlags = getS3Credentials(destination); const rcloneDestination = `:s3:${destination.bucket}/${bucketDestination}`; - - const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; - const backupCommand = getBackupCommand( backup, - rcloneCommand, + rcloneFlags, + rcloneDestination, deployment.logPath, ); if (postgres.serverId) { diff --git a/packages/server/src/utils/backups/utils.ts b/packages/server/src/utils/backups/utils.ts index dba843956..4253a3876 100644 --- a/packages/server/src/utils/backups/utils.ts +++ b/packages/server/src/utils/backups/utils.ts @@ -259,11 +259,14 @@ export const generateBackupCommand = (backup: BackupSchedule) => { export const getBackupCommand = ( backup: BackupSchedule, - rcloneCommand: string, + rcloneFlags: string[], + rcloneDestination: string, logPath: string, ) => { const containerSearch = getContainerSearchCommand(backup); const backupCommand = generateBackupCommand(backup); + const rcloneCommand = `rclone rcat ${rcloneFlags.join(" ")} "${rcloneDestination}"`; + const rcloneDeleteCommand = `rclone deletefile ${rcloneFlags.join(" ")} "${rcloneDestination}"`; logger.info( { @@ -279,33 +282,24 @@ export const getBackupCommand = ( set -eo pipefail; echo "[$(date)] Starting backup process..." >> ${logPath}; echo "[$(date)] Executing backup command..." >> ${logPath}; - CONTAINER_ID=$(${containerSearch}) + CONTAINER_ID=$(${containerSearch}); if [ -z "$CONTAINER_ID" ]; then echo "[$(date)] ❌ Error: Container not found" >> ${logPath}; exit 1; - fi + fi; echo "[$(date)] Container Up: $CONTAINER_ID" >> ${logPath}; + echo "[$(date)] Starting backup and upload to S3..." >> ${logPath}; - # Run the backup command and capture the exit status - BACKUP_OUTPUT=$(${backupCommand} 2>&1 >/dev/null) || { + UPLOAD_OUTPUT=$({ ${backupCommand} | ${rcloneCommand}; } 2>&1 >/dev/null) || { echo "[$(date)] ❌ Error: Backup failed" >> ${logPath}; - echo "Error: $BACKUP_OUTPUT" >> ${logPath}; - exit 1; - } - - echo "[$(date)] ✅ backup completed successfully" >> ${logPath}; - echo "[$(date)] Starting upload to S3..." >> ${logPath}; - - # Run the upload command and capture the exit status - UPLOAD_OUTPUT=$(${backupCommand} | ${rcloneCommand} 2>&1 >/dev/null) || { - echo "[$(date)] ❌ Error: Upload to S3 failed" >> ${logPath}; echo "Error: $UPLOAD_OUTPUT" >> ${logPath}; + ${rcloneDeleteCommand} >/dev/null 2>&1 || true; exit 1; - } + }; - echo "[$(date)] ✅ Upload to S3 completed successfully" >> ${logPath}; + echo "[$(date)] ✅ Backup uploaded to S3 successfully" >> ${logPath}; echo "Backup done ✅" >> ${logPath}; `; };