Skip to content

Commit 1ccc23f

Browse files
Add prevalidate environment on start
1 parent 2cbc34e commit 1ccc23f

File tree

5 files changed

+75
-65
lines changed

5 files changed

+75
-65
lines changed

alpine.Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ ENV POSTGRES_DB="**None**" \
3636
WEBHOOK_EXTRA_ARGS=""
3737

3838
COPY hooks /hooks
39-
COPY backup.sh /backup.sh
39+
COPY backup.sh env.sh init.sh /
4040

4141
VOLUME /backups
4242

4343
ENTRYPOINT ["/bin/sh", "-c"]
44-
CMD ["exec /usr/local/bin/go-cron -s \"$SCHEDULE\" -p \"$HEALTHCHECK_PORT\" -- /backup.sh"]
44+
CMD ["exec /init.sh"]
4545

4646
HEALTHCHECK --interval=5m --timeout=3s \
4747
CMD curl -f "http://localhost:$HEALTHCHECK_PORT/" || exit 1

backup.sh

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,13 @@ if [ -d "${HOOKS_DIR}" ]; then
99
trap 'on_error' ERR
1010
fi
1111

12-
if [ "${POSTGRES_DB}" = "**None**" -a "${POSTGRES_DB_FILE}" = "**None**" ]; then
13-
echo "You need to set the POSTGRES_DB or POSTGRES_DB_FILE environment variable."
14-
exit 1
15-
fi
16-
17-
if [ "${POSTGRES_HOST}" = "**None**" ]; then
18-
if [ -n "${POSTGRES_PORT_5432_TCP_ADDR}" ]; then
19-
POSTGRES_HOST=${POSTGRES_PORT_5432_TCP_ADDR}
20-
POSTGRES_PORT=${POSTGRES_PORT_5432_TCP_PORT}
21-
else
22-
echo "You need to set the POSTGRES_HOST environment variable."
23-
exit 1
24-
fi
25-
fi
26-
27-
if [ "${POSTGRES_USER}" = "**None**" -a "${POSTGRES_USER_FILE}" = "**None**" ]; then
28-
echo "You need to set the POSTGRES_USER or POSTGRES_USER_FILE environment variable."
29-
exit 1
30-
fi
31-
32-
if [ "${POSTGRES_PASSWORD}" = "**None**" -a "${POSTGRES_PASSWORD_FILE}" = "**None**" -a "${POSTGRES_PASSFILE_STORE}" = "**None**" ]; then
33-
echo "You need to set the POSTGRES_PASSWORD or POSTGRES_PASSWORD_FILE or POSTGRES_PASSFILE_STORE environment variable or link to a container named POSTGRES."
34-
exit 1
35-
fi
36-
37-
#Process vars
38-
if [ "${POSTGRES_DB_FILE}" = "**None**" ]; then
39-
POSTGRES_DBS=$(echo "${POSTGRES_DB}" | tr , " ")
40-
elif [ -r "${POSTGRES_DB_FILE}" ]; then
41-
POSTGRES_DBS=$(cat "${POSTGRES_DB_FILE}")
42-
else
43-
echo "Missing POSTGRES_DB_FILE file."
44-
exit 1
45-
fi
46-
if [ "${POSTGRES_USER_FILE}" = "**None**" ]; then
47-
export PGUSER="${POSTGRES_USER}"
48-
elif [ -r "${POSTGRES_USER_FILE}" ]; then
49-
export PGUSER=$(cat "${POSTGRES_USER_FILE}")
50-
else
51-
echo "Missing POSTGRES_USER_FILE file."
52-
exit 1
53-
fi
54-
if [ "${POSTGRES_PASSWORD_FILE}" = "**None**" -a "${POSTGRES_PASSFILE_STORE}" = "**None**" ]; then
55-
export PGPASSWORD="${POSTGRES_PASSWORD}"
56-
elif [ -r "${POSTGRES_PASSWORD_FILE}" ]; then
57-
export PGPASSWORD=$(cat "${POSTGRES_PASSWORD_FILE}")
58-
elif [ -r "${POSTGRES_PASSFILE_STORE}" ]; then
59-
export PGPASSFILE="${POSTGRES_PASSFILE_STORE}"
60-
else
61-
echo "Missing POSTGRES_PASSWORD_FILE or POSTGRES_PASSFILE_STORE file."
62-
exit 1
63-
fi
64-
export PGHOST="${POSTGRES_HOST}"
65-
export PGPORT="${POSTGRES_PORT}"
66-
KEEP_MINS=${BACKUP_KEEP_MINS}
67-
KEEP_DAYS=${BACKUP_KEEP_DAYS}
68-
KEEP_WEEKS=`expr $(((${BACKUP_KEEP_WEEKS} * 7) + 1))`
69-
KEEP_MONTHS=`expr $(((${BACKUP_KEEP_MONTHS} * 31) + 1))`
12+
source "$(dirname "$0")/env.sh"
7013

7114
# Pre-backup hook
7215
if [ -d "${HOOKS_DIR}" ]; then
7316
run-parts -a "pre-backup" --exit-on-error "${HOOKS_DIR}"
7417
fi
7518

76-
#Initialize dirs
77-
mkdir -p "${BACKUP_DIR}/last/" "${BACKUP_DIR}/daily/" "${BACKUP_DIR}/weekly/" "${BACKUP_DIR}/monthly/"
78-
7919
#Loop all databases
8020
for DB in ${POSTGRES_DBS}; do
8121
#Initialize filename vers

debian.Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,12 @@ ENV POSTGRES_DB="**None**" \
5050
WEBHOOK_EXTRA_ARGS=""
5151

5252
COPY hooks /hooks
53-
COPY backup.sh /backup.sh
53+
COPY backup.sh env.sh init.sh /
5454

5555
VOLUME /backups
5656

5757
ENTRYPOINT ["/bin/sh", "-c"]
58-
CMD ["exec /usr/local/bin/go-cron -s \"$SCHEDULE\" -p \"$HEALTHCHECK_PORT\" -- /backup.sh"]
58+
CMD ["exec /init.sh"]
5959

6060
HEALTHCHECK --interval=5m --timeout=3s \
6161
CMD curl -f "http://localhost:$HEALTHCHECK_PORT/" || exit 1

env.sh

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/usr/bin/env bash
2+
# Pre-validate the environment
3+
if [ "${POSTGRES_DB}" = "**None**" -a "${POSTGRES_DB_FILE}" = "**None**" ]; then
4+
echo "You need to set the POSTGRES_DB or POSTGRES_DB_FILE environment variable."
5+
exit 1
6+
fi
7+
8+
if [ "${POSTGRES_HOST}" = "**None**" ]; then
9+
if [ -n "${POSTGRES_PORT_5432_TCP_ADDR}" ]; then
10+
POSTGRES_HOST=${POSTGRES_PORT_5432_TCP_ADDR}
11+
POSTGRES_PORT=${POSTGRES_PORT_5432_TCP_PORT}
12+
else
13+
echo "You need to set the POSTGRES_HOST environment variable."
14+
exit 1
15+
fi
16+
fi
17+
18+
if [ "${POSTGRES_USER}" = "**None**" -a "${POSTGRES_USER_FILE}" = "**None**" ]; then
19+
echo "You need to set the POSTGRES_USER or POSTGRES_USER_FILE environment variable."
20+
exit 1
21+
fi
22+
23+
if [ "${POSTGRES_PASSWORD}" = "**None**" -a "${POSTGRES_PASSWORD_FILE}" = "**None**" -a "${POSTGRES_PASSFILE_STORE}" = "**None**" ]; then
24+
echo "You need to set the POSTGRES_PASSWORD or POSTGRES_PASSWORD_FILE or POSTGRES_PASSFILE_STORE environment variable or link to a container named POSTGRES."
25+
exit 1
26+
fi
27+
28+
#Process vars
29+
if [ "${POSTGRES_DB_FILE}" = "**None**" ]; then
30+
POSTGRES_DBS=$(echo "${POSTGRES_DB}" | tr , " ")
31+
elif [ -r "${POSTGRES_DB_FILE}" ]; then
32+
POSTGRES_DBS=$(cat "${POSTGRES_DB_FILE}")
33+
else
34+
echo "Missing POSTGRES_DB_FILE file."
35+
exit 1
36+
fi
37+
if [ "${POSTGRES_USER_FILE}" = "**None**" ]; then
38+
export PGUSER="${POSTGRES_USER}"
39+
elif [ -r "${POSTGRES_USER_FILE}" ]; then
40+
export PGUSER=$(cat "${POSTGRES_USER_FILE}")
41+
else
42+
echo "Missing POSTGRES_USER_FILE file."
43+
exit 1
44+
fi
45+
if [ "${POSTGRES_PASSWORD_FILE}" = "**None**" -a "${POSTGRES_PASSFILE_STORE}" = "**None**" ]; then
46+
export PGPASSWORD="${POSTGRES_PASSWORD}"
47+
elif [ -r "${POSTGRES_PASSWORD_FILE}" ]; then
48+
export PGPASSWORD=$(cat "${POSTGRES_PASSWORD_FILE}")
49+
elif [ -r "${POSTGRES_PASSFILE_STORE}" ]; then
50+
export PGPASSFILE="${POSTGRES_PASSFILE_STORE}"
51+
else
52+
echo "Missing POSTGRES_PASSWORD_FILE or POSTGRES_PASSFILE_STORE file."
53+
exit 1
54+
fi
55+
export PGHOST="${POSTGRES_HOST}"
56+
export PGPORT="${POSTGRES_PORT}"
57+
KEEP_MINS=${BACKUP_KEEP_MINS}
58+
KEEP_DAYS=${BACKUP_KEEP_DAYS}
59+
KEEP_WEEKS=`expr $(((${BACKUP_KEEP_WEEKS} * 7) + 1))`
60+
KEEP_MONTHS=`expr $(((${BACKUP_KEEP_MONTHS} * 31) + 1))`
61+
62+
# Validate / initialize backup dirs
63+
mkdir -p "${BACKUP_DIR}/last/" "${BACKUP_DIR}/daily/" "${BACKUP_DIR}/weekly/" "${BACKUP_DIR}/monthly/"

init.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/env bash
2+
set -Eeo pipefail
3+
4+
# Prevalidate configuration (don't source)
5+
/env.sh
6+
7+
exec /usr/local/bin/go-cron -s "$SCHEDULE" -p "$HEALTHCHECK_PORT" -- /backup.sh

0 commit comments

Comments
 (0)