Skip to content

Commit 4196368

Browse files
committed
added compression, added local storage dump path
1 parent ecb08ff commit 4196368

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ ENV S3_S3V4 'no'
2121
ENV SCHEDULE ''
2222
ENV PASSPHRASE ''
2323
ENV BACKUP_KEEP_DAYS ''
24+
ENV LOCAL_STORE_PREFIX ''
25+
ENV COMPRESS ''
2426

2527
ADD src/run.sh run.sh
2628
ADD src/env.sh env.sh

docker-compose.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff 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

src/backup.sh

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,36 @@ set -o pipefail
55

66
source ./env.sh
77

8+
file_path="${LOCAL_STORE_PREFIX}/db.dump"
9+
810
echo "Creating backup of $POSTGRES_DATABASE database..."
911
pg_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

1719
timestamp=$(date +"%Y-%m-%dT%H:%M:%S")
1820
s3_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+
2029
if [ -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"
2736
else
28-
local_file="db.dump"
37+
local_file="$file_path"
2938
s3_uri="$s3_uri_base"
3039
fi
3140

src/install.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ apk add postgresql-client
1111
# install gpg
1212
apk add gnupg
1313

14+
# install zstd
15+
apk add zstd
16+
17+
# install aws-cli
1418
apk add aws-cli
1519

1620
# install go-cron

src/restore.sh

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,27 @@ else
2626
)
2727
fi
2828

29+
file_path="${LOCAL_STORE_PREFIX}/db${file_type}"
30+
2931
echo "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

3234
if [ -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"
3644
fi
3745

3846
conn_opts="-h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DATABASE"
3947

4048
echo "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"
4250
rm db.dump
4351

4452
echo "Restore complete."

0 commit comments

Comments
 (0)