Add delete /tmp directory and update docs

This commit is contained in:
2024-08-11 09:39:44 +02:00
parent 33481d6842
commit 6ae35943fb
7 changed files with 53 additions and 9 deletions

View File

@@ -18,7 +18,7 @@ docker-build:
docker build -f docker/Dockerfile -t ${IMAGE_NAME}:latest . docker build -f docker/Dockerfile -t ${IMAGE_NAME}:latest .
docker-run: docker-build docker-run: docker-build
docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --prune --keep-last 2 docker run --rm --network web --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} backup --prune --keep-last 2
docker-restore: docker-build docker-restore: docker-build
docker run --rm --network web --user 1000:1000 --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} restore -f ${FILE_NAME} docker run --rm --network web --user 1000:1000 --name pg-bkup -v "./backup:/backup" -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" ${IMAGE_NAME} restore -f ${FILE_NAME}

View File

@@ -7,7 +7,7 @@ nav_order: 3
# Backup to SSH remote server # Backup to SSH remote server
As described for s3 backup section, to change the storage of you backup and use S3 as storage. You need to add `--storage ssh` or `--storage remote`. As described for s3 backup section, to change the storage of your backup and use SSH Remote server as storage. You need to add `--storage ssh` or `--storage remote`.
You need to add the full remote path by adding `--path /home/jkaninda/backups` flag or using `SSH_REMOTE_PATH` environment variable. You need to add the full remote path by adding `--path /home/jkaninda/backups` flag or using `SSH_REMOTE_PATH` environment variable.
{: .note } {: .note }

View File

@@ -11,7 +11,7 @@ The image supports encrypting backups using GPG out of the box. In case a `GPG_P
{: .warning } {: .warning }
To restore an encrypted backup, you need to provide the same GPG passphrase used during backup process. To restore an encrypted backup, you need to provide the same GPG passphrase used during backup process.
To decrypt manually, you need to install gpg To decrypt manually, you need to install `gnupg`
```shell ```shell
gpg --batch --passphrase "my-passphrase" \ gpg --batch --passphrase "my-passphrase" \

View File

@@ -45,6 +45,13 @@ To run a one time backup, bind your local volume to `/backup` in the container a
Alternatively, pass a `--env-file` in order to use a full config as described below. Alternatively, pass a `--env-file` in order to use a full config as described below.
```yaml
docker run --rm --network your_network_name \
--env-file your-env-file
-v $PWD/backup:/backup/ \
jkaninda/pg-bkup backup -d database_name
```
### Simple backup in docker compose file ### Simple backup in docker compose file
```yaml ```yaml

View File

@@ -214,6 +214,8 @@ func localBackup(backupFileName string, disableCompression bool, prune bool, bac
if prune { if prune {
deleteOldBackup(backupRetention) deleteOldBackup(backupRetention)
} }
//Delete temp
deleteTemp()
} }
func s3Backup(backupFileName string, disableCompression bool, prune bool, backupRetention int, encrypt bool) { func s3Backup(backupFileName string, disableCompression bool, prune bool, backupRetention int, encrypt bool) {
@@ -227,11 +229,12 @@ func s3Backup(backupFileName string, disableCompression bool, prune bool, backup
encryptBackup(backupFileName) encryptBackup(backupFileName)
finalFileName = fmt.Sprintf("%s.%s", backupFileName, "gpg") finalFileName = fmt.Sprintf("%s.%s", backupFileName, "gpg")
} }
utils.Info("Uploading backup file to S3 storage...") utils.Info("Uploading backup archive to remote storage S3 ... ")
utils.Info("Backup name is %s", finalFileName) utils.Info("Backup name is %s", finalFileName)
err := utils.UploadFileToS3(tmpPath, finalFileName, bucket, s3Path) err := utils.UploadFileToS3(tmpPath, finalFileName, bucket, s3Path)
if err != nil { if err != nil {
utils.Fatal("Error uploading file to S3: %s ", err) utils.Fatal("Error uploading backup archive to S3: %s ", err)
} }
@@ -248,7 +251,9 @@ func s3Backup(backupFileName string, disableCompression bool, prune bool, backup
utils.Fatal("Error deleting old backup from S3: %s ", err) utils.Fatal("Error deleting old backup from S3: %s ", err)
} }
} }
utils.Done("Database has been backed up and uploaded to s3 ") utils.Done("Uploading backup archive to remote storage S3 ... done ")
//Delete temp
deleteTemp()
} }
func sshBackup(backupFileName, remotePath string, disableCompression bool, prune bool, backupRetention int, encrypt bool) { func sshBackup(backupFileName, remotePath string, disableCompression bool, prune bool, backupRetention int, encrypt bool) {
utils.Info("Backup database to Remote server") utils.Info("Backup database to Remote server")
@@ -259,8 +264,8 @@ func sshBackup(backupFileName, remotePath string, disableCompression bool, prune
encryptBackup(backupFileName) encryptBackup(backupFileName)
finalFileName = fmt.Sprintf("%s.%s", backupFileName, "gpg") finalFileName = fmt.Sprintf("%s.%s", backupFileName, "gpg")
} }
utils.Info("Uploading backup file to remote server...") utils.Info("Uploading backup archive to remote storage ... ")
utils.Info("Backup name is %s", backupFileName) utils.Info("Backup name is %s", finalFileName)
err := CopyToRemote(finalFileName, remotePath) err := CopyToRemote(finalFileName, remotePath)
if err != nil { if err != nil {
utils.Fatal("Error uploading file to the remote server: %s ", err) utils.Fatal("Error uploading file to the remote server: %s ", err)
@@ -279,7 +284,9 @@ func sshBackup(backupFileName, remotePath string, disableCompression bool, prune
} }
utils.Done("Database has been backed up and uploaded to remote server ") utils.Done("Uploading backup archive to remote storage ... done ")
//Delete temp
deleteTemp()
} }
func encryptBackup(backupFileName string) { func encryptBackup(backupFileName string) {

View File

@@ -70,4 +70,27 @@ func deleteOldBackup(retentionDays int) {
utils.Fatal("Error:", err) utils.Fatal("Error:", err)
return return
} }
utils.Done("Deleting old backups...done")
}
func deleteTemp() {
utils.Info("Deleting %s ...", tmpPath)
err := filepath.Walk(tmpPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// Check if the current item is a file
if !info.IsDir() {
// Delete the file
err = os.Remove(path)
if err != nil {
return err
}
}
return nil
})
if err != nil {
utils.Error("Error deleting files: %v", err)
} else {
utils.Info("Deleting %s ... done", tmpPath)
}
} }

View File

@@ -98,6 +98,7 @@ func RestoreDatabase(file string) {
return return
} }
utils.TestDatabaseConnection() utils.TestDatabaseConnection()
utils.Info("Restoring database...")
extension := filepath.Ext(fmt.Sprintf("%s/%s", tmpPath, file)) extension := filepath.Ext(fmt.Sprintf("%s/%s", tmpPath, file))
// Restore from compressed file / .sql.gz // Restore from compressed file / .sql.gz
@@ -107,7 +108,10 @@ func RestoreDatabase(file string) {
if err != nil { if err != nil {
utils.Fatal("Error, in restoring the database %v", err) utils.Fatal("Error, in restoring the database %v", err)
} }
utils.Info("Restoring database... done")
utils.Done("Database has been restored") utils.Done("Database has been restored")
//Delete temp
deleteTemp()
} else if extension == ".sql" { } else if extension == ".sql" {
//Restore from sql file //Restore from sql file
@@ -116,7 +120,10 @@ func RestoreDatabase(file string) {
if err != nil { if err != nil {
utils.Fatal("Error in restoring the database %v", err) utils.Fatal("Error in restoring the database %v", err)
} }
utils.Info("Restoring database... done")
utils.Done("Database has been restored") utils.Done("Database has been restored")
//Delete temp
deleteTemp()
} else { } else {
utils.Fatal("Unknown file extension: %s", extension) utils.Fatal("Unknown file extension: %s", extension)
} }