Skip to content

Commit 1e6c856

Browse files
committed
chore(entrypoint.sh): improve shell script
1 parent 53c6e79 commit 1e6c856

File tree

1 file changed

+37
-46
lines changed

1 file changed

+37
-46
lines changed

entrypoint.sh

Lines changed: 37 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,63 @@
11
#! /bin/sh
22

3-
if [[ -z "$POSTGRES_HOST" ]]; then
4-
echo "POSTGRES_HOST environment variable is required"
5-
exit 1
6-
fi
7-
8-
POSTGRES_PORT="${POSTGRES_PORT:-5432}"
9-
10-
if [[ -z "$POSTGRES_USER" ]]; then
11-
echo "POSTGRES_USER environment variable is required"
12-
exit 1
13-
fi
14-
15-
if [[ -z "$POSTGRES_PASSWORD" ]]; then
16-
echo "POSTGRES_PASSWORD environment variable is required"
17-
exit 1
18-
fi
19-
20-
if [[ -z "$S3_ENDPOINT" ]]; then
21-
echo "S3_ENDPOINT environment variable is required"
22-
exit 1
23-
fi
24-
25-
if [[ -z "$S3_ACCESS_KEY" ]]; then
26-
echo "S3_ACCESS_KEY environment variable is required"
27-
exit 1
28-
fi
29-
30-
if [[ -z "$S3_SECRET_KEY" ]]; then
31-
echo "S3_SECRET_KEY environment variable is required"
32-
exit 1
33-
fi
34-
35-
if [[ -z "$S3_BUCKET" ]]; then
36-
echo "S3_BUCKET environment variable is required"
37-
exit 1
38-
fi
39-
40-
S3_FILE_PREFIX="${S3_FILE_PREFIX:-backup-}"
41-
3+
# with these settings, certain common errors will cause the script to immediately fail, explicitly and loudly
4+
set -euo pipefail
5+
6+
# required environment variables
7+
: "${POSTGRES_HOST}"
8+
: "${POSTGRES_USER}"
9+
: "${POSTGRES_PASSWORD}"
10+
: "${S3_ENDPOINT}"
11+
: "${S3_ACCESS_KEY}"
12+
: "${S3_SECRET_KEY}"
13+
: "${S3_BUCKET}"
14+
15+
# not required environment variables with default values
16+
: "${POSTGRES_PORT:=5432}"
17+
: "${S3_FILE_PREFIX:=backup-}"
18+
: "${PG_DUMPALL_EXTRA_ARGS:=}"
19+
: "${OPENSSL_ENC_EXTRA_ARGS:=}"
20+
: "${AWS_S3_CP_EXTRA_ARGS:=}"
21+
22+
# print pg_dumpall version
4223
pg_dumpall -V
24+
4325
echo "Creating a dump of all databases..."
4426

45-
SOURCE_FILE="output.bak.gz"
46-
DESTINATION_FILE="${S3_FILE_PREFIX}$(date +"%Y-%m-%dT%H:%M:%SZ").bak.gz"
27+
LOCAL_FILE="output.bak.gz"
28+
REMOTE_FILE="${S3_FILE_PREFIX}$(date +"%Y-%m-%dT%H:%M:%SZ").bak.gz"
4729

30+
# PGPASSWORD is required for pg_dumpall
4831
export PGPASSWORD=$POSTGRES_PASSWORD
49-
pg_dumpall -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER $PG_DUMPALL_EXTRA_ARGS | gzip > $SOURCE_FILE
32+
33+
# dump all databases and gzip to file
34+
pg_dumpall -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER $PG_DUMPALL_EXTRA_ARGS | gzip > $LOCAL_FILE
5035

5136
echo "Dump created"
5237

38+
# if encryption password is set and not an empty string
5339
if [[ -z "$ENCRYPTION_PASSWORD" ]]; then
5440
echo "Encryption disabled"
5541
else
5642
echo "Encryption of the dump..."
5743

58-
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in $SOURCE_FILE -out ${SOURCE_FILE}.enc -k $ENCRYPTION_PASSWORD $OPENSSL_ENC_EXTRA_ARGS
44+
# encrypt local dump
45+
openssl enc -aes-256-cbc -pbkdf2 -iter 20000 -in $LOCAL_FILE -out ${LOCAL_FILE}.enc -k $ENCRYPTION_PASSWORD $OPENSSL_ENC_EXTRA_ARGS
5946

60-
SOURCE_FILE="${SOURCE_FILE}.enc"
61-
DESTINATION_FILE="${DESTINATION_FILE}.enc"
47+
# update file extensions
48+
LOCAL_FILE="${LOCAL_FILE}.enc"
49+
REMOTE_FILE="${REMOTE_FILE}.enc"
6250

6351
echo "Dump encrypted"
6452
fi
6553

6654
echo "Uploading the dump to S3..."
6755

56+
# AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY is required for aws
6857
export AWS_ACCESS_KEY_ID=$S3_ACCESS_KEY
6958
export AWS_SECRET_ACCESS_KEY=$S3_SECRET_KEY
70-
aws s3 cp $SOURCE_FILE s3://$S3_BUCKET/$DESTINATION_FILE --endpoint-url $S3_ENDPOINT $AWS_S3_CP_EXTRA_ARGS
59+
60+
# upload local dump to s3
61+
aws s3 cp $LOCAL_FILE s3://$S3_BUCKET/$REMOTE_FILE --endpoint-url $S3_ENDPOINT $AWS_S3_CP_EXTRA_ARGS
7162

7263
echo "Dump uploaded"

0 commit comments

Comments
 (0)