diff --git a/Makefile b/Makefile index 9720f2c..54778df 100644 --- a/Makefile +++ b/Makefile @@ -17,20 +17,20 @@ docker-build: docker build -f docker/Dockerfile -t jkaninda/pg-bkup:latest . docker-run: docker-build - docker run --rm --network internal --privileged --device /dev/fuse --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}" jkaninda/pg-bkup bkup backup --prune --keep-last 2 + docker run --rm --network internal --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}" jkaninda/pg-bkup bkup backup --prune --keep-last 2 docker-restore: docker-build - docker run --rm --network internal --privileged --device /dev/fuse --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}" jkaninda/pg-bkup bkup restore -f ${FILE_NAME} + docker run --rm --network internal --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}" jkaninda/pg-bkup bkup restore -f ${FILE_NAME} docker-run-scheduled: docker-build - docker run --rm --network internal --privileged --device /dev/fuse --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}" jkaninda/pg-bkup bkup backup --mode scheduled --period "* * * * *" + docker run --rm --network internal --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}" jkaninda/pg-bkup bkup backup --mode scheduled --period "* * * * *" docker-run-scheduled-s3: docker-build - docker run --rm --network internal --privileged --device /dev/fuse --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 "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/pg-bkup bkup backup --storage s3 --mode scheduled --path /custom-path --period "* * * * *" + docker run --rm --network internal --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 "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/pg-bkup bkup backup --storage s3 --mode scheduled --path /custom-path --period "* * * * *" docker-run-s3: docker-build - docker run --rm --network internal --privileged --device /dev/fuse --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "BUCKET_NAME=${BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/pg-bkup bkup backup --storage s3 --path /custom-path + docker run --rm --network internal --name pg-bkup -e "DB_HOST=${DB_HOST}" -e "DB_NAME=${DB_NAME}" -e "DB_USERNAME=${DB_USERNAME}" -e "DB_PASSWORD=${DB_PASSWORD}" -e "ACCESS_KEY=${ACCESS_KEY}" -e "SECRET_KEY=${SECRET_KEY}" -e "AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME}" -e "S3_ENDPOINT=${S3_ENDPOINT}" -e "AWS_REGION=eu2" -e "GPG_PASSPHRASE=${GPG_PASSPHRASE}" jkaninda/pg-bkup bkup backup --storage s3 --path /custom-path docker-restore-s3: docker-build diff --git a/docker/Dockerfile b/docker/Dockerfile index 16b4074..a1ccbe9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,9 +16,10 @@ ENV DB_USERNAME="" ENV DB_PASSWORD="" ENV DB_PORT="5432" ENV STORAGE=local -ENV BUCKET_NAME="" -ENV ACCESS_KEY="" -ENV SECRET_KEY="" +ENV AWS_S3_ENDPOINT="" +ENV AWS_S3_BUCKET_NAME="" +ENV AWS_ACCESS_KEY="" +ENV AWS_SECRET_KEY="" ENV AWS_REGION="us-west-2" ENV AWS_DISABLE_SSL="false" ENV GPG_PASSPHRASE="" @@ -27,12 +28,13 @@ ENV SSH_PASSWORD="" ENV SSH_HOST_NAME="" ENV SSH_IDENTIFY_FILE="/root/.ssh/id_rsa" ENV SSH_PORT="22" -ENV S3_ENDPOINT=https://s3.amazonaws.com ARG DEBIAN_FRONTEND=noninteractive ENV VERSION="v0.8" ARG WORKDIR="/app" ARG BACKUPDIR="/backup" ARG BACKUP_TMP_DIR="/tmp/backup" +ARG BACKUP_CRON="/etc/cron.d/backup_cron" +ARG BACKUP_CRON_SCRIPT="/usr/local/bin/backup_cron.sh" LABEL author="Jonas Kaninda" RUN apt-get update -qq @@ -48,6 +50,10 @@ RUN mkdir -p $BACKUP_TMP_DIR RUN chmod 777 $WORKDIR RUN chmod 777 $BACKUPDIR RUN chmod 777 $BACKUP_TMP_DIR +RUN touch $BACKUP_CRON && \ + touch $BACKUP_CRON_SCRIPT && \ + chmod 777 $BACKUP_CRON && \ + chmod 777 $BACKUP_CRON_SCRIPT COPY --from=build /app/pg-bkup /usr/local/bin/pg-bkup RUN chmod +x /usr/local/bin/pg-bkup @@ -56,4 +62,4 @@ RUN ln -s /usr/local/bin/pg-bkup /usr/local/bin/bkup ADD docker/supervisord.conf /etc/supervisor/supervisord.conf -WORKDIR $WORKDIR +WORKDIR $WORKDIR \ No newline at end of file diff --git a/pkg/backup.go b/pkg/backup.go index 33024d4..a2e6cc2 100644 --- a/pkg/backup.go +++ b/pkg/backup.go @@ -52,7 +52,7 @@ func StartBackup(cmd *cobra.Command) { case "local": localBackup(backupFileName, disableCompression, prune, backupRetention, encryption) case "ssh": - fmt.Println("x is 2") + sshBackup(backupFileName, s3Path, disableCompression, prune, backupRetention, encryption) case "ftp": fmt.Println("x is 3") default: @@ -209,8 +209,7 @@ func localBackup(backupFileName string, disableCompression bool, prune bool, bac } func s3Backup(backupFileName string, s3Path string, disableCompression bool, prune bool, backupRetention int, encrypt bool) { - bucket := os.Getenv("BUCKET_NAME") - storagePath = os.Getenv("STORAGE_PATH") + bucket := utils.GetEnvVariable("AWS_S3_BUCKET_NAME", "BUCKET_NAME") utils.Info("Backup database to s3 storage") //Backup database BackupDatabase(backupFileName, disableCompression) @@ -242,6 +241,9 @@ func s3Backup(backupFileName string, s3Path string, disableCompression bool, pru } utils.Done("Database has been backed up and uploaded to s3 ") } +func sshBackup(backupFileName string, s3Path string, disableCompression bool, prune bool, backupRetention int, encrypt bool) { + +} func encryptBackup(backupFileName string) { gpgPassphrase := os.Getenv("GPG_PASSPHRASE") diff --git a/pkg/restore.go b/pkg/restore.go index 1c6f581..a3d8149 100644 --- a/pkg/restore.go +++ b/pkg/restore.go @@ -21,8 +21,7 @@ func StartRestore(cmd *cobra.Command) { storage = utils.GetEnv(cmd, "storage", "STORAGE") file = utils.GetEnv(cmd, "file", "FILE_NAME") executionMode, _ = cmd.Flags().GetString("mode") - bucket := os.Getenv("BUCKET_NAME") - + bucket := utils.GetEnvVariable("AWS_S3_BUCKET_NAME", "BUCKET_NAME") switch storage { case "s3": utils.Info("Restore database from s3") diff --git a/utils/s3.go b/utils/s3.go index 2a3cb1a..3186344 100644 --- a/utils/s3.go +++ b/utils/s3.go @@ -19,9 +19,9 @@ import ( // CreateSession creates a new AWS session func CreateSession() (*session.Session, error) { - endPoint := os.Getenv("S3_ENDPOINT") - accessKey := os.Getenv("ACCESS_KEY") - secretKey := os.Getenv("SECRET_KEY") + endPoint := GetEnvVariable("AWS_S3_ENDPOINT", "S3_ENDPOINT") + accessKey := GetEnvVariable("AWS_ACCESS_KEY", "ACCESS_KEY") + secretKey := GetEnvVariable("AWS_SECRET_KEY", "SECRET_KEY") region := os.Getenv("AWS_REGION") awsDisableSsl, err := strconv.ParseBool(os.Getenv("AWS_DISABLE_SSL")) if err != nil { diff --git a/utils/utils.go b/utils/utils.go index 6424efc..da69d4e 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -178,6 +178,15 @@ func SetEnv(key, value string) { return } } - +func GetEnvVariable(envName, oldEnvName string) string { + value := os.Getenv(envName) + if value == "" { + value = os.Getenv(oldEnvName) + if value != "" { + fmt.Printf("%s is deprecated, please use %s instead!\n", oldEnvName, envName) + } + } + return value +} func ShowHistory() { }