File tree Expand file tree Collapse file tree 5 files changed +35
-10
lines changed Expand file tree Collapse file tree 5 files changed +35
-10
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,8 @@ ENV S3_S3V4 'no'
2121ENV SCHEDULE ''
2222ENV PASSPHRASE ''
2323ENV BACKUP_KEEP_DAYS ''
24+ ENV LOCAL_STORE_PREFIX ''
25+ ENV COMPRESS ''
2426
2527ADD src/run.sh run.sh
2628ADD src/env.sh env.sh
Original file line number Diff line number Diff line change @@ -26,3 +26,5 @@ services:
2626 POSTGRES_DATABASE : postgres
2727 POSTGRES_USER : user
2828 POSTGRES_PASSWORD : password
29+ COMPRESS : ' true' # optional, set to 'true' to enable compression
30+ LOCAL_STORE_PREFIX : /data/backups # optional, local storage prefix for backups
Original file line number Diff line number Diff line change @@ -5,27 +5,36 @@ set -o pipefail
55
66source ./env.sh
77
8+ file_path=" ${LOCAL_STORE_PREFIX} /db.dump"
9+
810echo " Creating backup of $POSTGRES_DATABASE database..."
911pg_dump --format=custom \
1012 -h $POSTGRES_HOST \
1113 -p $POSTGRES_PORT \
1214 -U $POSTGRES_USER \
1315 -d $POSTGRES_DATABASE \
1416 $PGDUMP_EXTRA_OPTS \
15- > db.dump
17+ > " $file_path "
1618
1719timestamp=$( date +" %Y-%m-%dT%H:%M:%S" )
1820s3_uri_base=" s3://${S3_BUCKET} /${S3_PREFIX} /${POSTGRES_DATABASE} _${timestamp} .dump"
1921
22+ if [ -n " $COMPRESS " ]; then
23+ echo " Compressing backup..."
24+ zstd -2 " $file_path "
25+ file_path=" ${file_path} .zst"
26+ s3_uri_base=" ${s3_uri_base} .zst"
27+ fi
28+
2029if [ -n " $PASSPHRASE " ]; then
2130 echo " Encrypting backup..."
22- rm -f db.dump. gpg
23- gpg --symmetric --batch --passphrase " $PASSPHRASE " db.dump
24- rm db.dump
25- local_file=" db.dump .gpg"
31+ rm -f " $file_path . gpg"
32+ gpg --symmetric --batch --passphrase " $PASSPHRASE " " $file_path "
33+ rm " $file_path "
34+ local_file=" $file_path .gpg"
2635 s3_uri=" ${s3_uri_base} .gpg"
2736else
28- local_file=" db.dump "
37+ local_file=" $file_path "
2938 s3_uri=" $s3_uri_base "
3039fi
3140
Original file line number Diff line number Diff line change @@ -11,6 +11,10 @@ apk add postgresql-client
1111# install gpg
1212apk add gnupg
1313
14+ # install zstd
15+ apk add zstd
16+
17+ # install aws-cli
1418apk add aws-cli
1519
1620# install go-cron
Original file line number Diff line number Diff line change 2626 )
2727fi
2828
29+ file_path=" ${LOCAL_STORE_PREFIX} /db${file_type} "
30+
2931echo " Fetching backup from S3..."
30- aws $aws_args s3 cp " ${s3_uri_base} /${key_suffix} " " db ${file_type} "
32+ aws $aws_args s3 cp " ${s3_uri_base} /${key_suffix} " " $file_path "
3133
3234if [ -n " $PASSPHRASE " ]; then
3335 echo " Decrypting backup..."
34- gpg --decrypt --batch --passphrase " $PASSPHRASE " db.dump.gpg > db.dump
35- rm db.dump.gpg
36+ gpg --decrypt --batch --passphrase " $PASSPHRASE " " $file_path .gpg" > " ${LOCAL_STORE_PREFIX} /db.dump"
37+ rm " $file_path .gpg"
38+ fi
39+
40+ if [ -n " $COMPRESS " ]; then
41+ echo " Decompressing backup..."
42+ zstd -d " ${LOCAL_STORE_PREFIX} /db.dump.zst" -o " ${LOCAL_STORE_PREFIX} /db.dump"
43+ rm " ${LOCAL_STORE_PREFIX} /db.dump.zst"
3644fi
3745
3846conn_opts=" -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DATABASE "
3947
4048echo " Restoring from backup..."
41- pg_restore $conn_opts --clean --if-exists db.dump
49+ pg_restore $conn_opts --clean --if-exists " ${LOCAL_STORE_PREFIX} / db.dump"
4250rm db.dump
4351
4452echo " Restore complete."
You can’t perform that action at this time.
0 commit comments