diff --git a/Dockerfile b/Dockerfile index 16915d7..9e8a91b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM alpine:${ALPINE_VERSION} ARG TARGETARCH ADD src/install.sh install.sh -RUN sh install.sh && rm install.sh +RUN sh install.sh && rm install.sh && mkdir /backup ENV POSTGRES_DATABASE '' ENV POSTGRES_HOST '' diff --git a/README.md b/README.md index 67e2f99..4d5b001 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ services: POSTGRES_DATABASE: dbname POSTGRES_USER: user POSTGRES_PASSWORD: password + volumes: + - /mnt/path/to/backup/folder:/backup # optional ``` - Images are tagged by the major PostgreSQL version supported: `12`, `13`, `14`, `15` or `16`. diff --git a/src/backup.sh b/src/backup.sh index ff1bf15..dc1c1a3 100644 --- a/src/backup.sh +++ b/src/backup.sh @@ -12,20 +12,20 @@ pg_dump --format=custom \ -U $POSTGRES_USER \ -d $POSTGRES_DATABASE \ $PGDUMP_EXTRA_OPTS \ - > db.dump + > backup/db.dump timestamp=$(date +"%Y-%m-%dT%H:%M:%S") s3_uri_base="s3://${S3_BUCKET}/${S3_PREFIX}/${POSTGRES_DATABASE}_${timestamp}.dump" if [ -n "$PASSPHRASE" ]; then echo "Encrypting backup..." - rm -f db.dump.gpg - gpg --symmetric --batch --passphrase "$PASSPHRASE" db.dump - rm db.dump - local_file="db.dump.gpg" + rm -f backup/db.dump.gpg + gpg --symmetric --batch --passphrase "$PASSPHRASE" backup/db.dump + rm backup/db.dump + local_file="backup/db.dump.gpg" s3_uri="${s3_uri_base}.gpg" else - local_file="db.dump" + local_file="backup/db.dump" s3_uri="$s3_uri_base" fi diff --git a/src/restore.sh b/src/restore.sh index 3040146..80e5664 100644 --- a/src/restore.sh +++ b/src/restore.sh @@ -27,18 +27,18 @@ else fi echo "Fetching backup from S3..." -aws $aws_args s3 cp "${s3_uri_base}/${key_suffix}" "db${file_type}" +aws $aws_args s3 cp "${s3_uri_base}/${key_suffix}" "backup/db${file_type}" if [ -n "$PASSPHRASE" ]; then echo "Decrypting backup..." - gpg --decrypt --batch --passphrase "$PASSPHRASE" db.dump.gpg > db.dump - rm db.dump.gpg + gpg --decrypt --batch --passphrase "$PASSPHRASE" backup/db.dump.gpg > backup/db.dump + rm backup/db.dump.gpg fi conn_opts="-h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DATABASE" echo "Restoring from backup..." -pg_restore $conn_opts --clean --if-exists db.dump -rm db.dump +pg_restore $conn_opts --clean --if-exists backup/db.dump +rm backup/db.dump echo "Restore complete."