-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdocker-entrypoint.sh
executable file
·66 lines (51 loc) · 2.08 KB
/
docker-entrypoint.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/sh
PGCTL="/usr/pgsql-14/bin/pg_ctl"
[[ "$PGDATA" != */ ]] && PGDATA="$PGDATA/"
if [ -f "${PGDATA}initialized" ]; then
echo "Database already initialized" 1>&2
chmod -R 0700 "$PGDATA"
else
# REQUIRED VARS CHECK
[[ -z "${POSTGRESQL_DATABASE}" || "${POSTGRESQL_DATABASE}" == *'"'* ]] && {
echo "POSTGRESQL_DATABASE is invalid or missing" 1>&2
exit 1
}
[[ -z "${POSTGRESQL_USER}" || "${POSTGRESQL_USER}" == *'"'* ]] && {
echo "POSTGRESQL_USER is invalid or missing" 1>&2
exit 1
}
[[ -z "${POSTGRESQL_PASSWORD}" || "${POSTGRESQL_PASSWORD}" == *'"'* ]] && {
echo "POSTGRESQL_PASSWORD is invalid or missing" 1>&2
exit 1
}
[[ "${POSTGRESQL_ADMIN_PASSWORD}" == *"'"* ]] && {
echo "POSTGRESQL_ADMIN_PASSWORD is invalid" 1>&2
exit 1
}
# Before PostgreSQL can function correctly, the database cluster must be initialized:
[ ! -d "$PGDATA" ] && {
LANG=${LANG:-en_US.utf8} /usr/pgsql-14/bin/initdb -D "$PGDATA" --username "$PGUSER"
}
chmod -R 0700 "$PGDATA"
# internal start of server in order to allow set-up using psql-client
# does not listen on external TCP/IP and waits until start finishes
$PGCTL -D "$PGDATA" -o "-c listen_addresses='*'" -w start
# CONFIGURATION CHANGES
sed -i -e 's/logging_collector = on/logging_collector = off/g' -e "s/listen_address.*/listen_addresses='*'/g" "${PGDATA}postgresql.conf"
echo "host all all 0.0.0.0/0 md5" >> "${PGDATA}pg_hba.conf" && \
echo "listen_addresses='*'" >> "${PGDATA}postgresql.conf"
$PGCTL reload
# CREATE USER OR ROLE
psql -d "$PGUSER" -c "CREATE USER \"${POSTGRESQL_USER}\" WITH PASSWORD '${POSTGRESQL_PASSWORD}';"
# CREATE DATABASE
echo "Creating database: ${POSTGRESQL_DATABASE}"
psql -v ON_ERROR_STOP=1 -d "$PGUSER" -c "CREATE DATABASE \"${POSTGRESQL_DATABASE}\" OWNER '${POSTGRESQL_USER}';"
if [ -n "$POSTGRESQL_ADMIN_PASSWORD" ]; then
psql -v ON_ERROR_STOP=1 -d "$PGUSER" -c "ALTER USER \"$PGUSER\" WITH ENCRYPTED PASSWORD '${POSTGRESQL_ADMIN_PASSWORD}';"
fi
# STOP SERVER
$PGCTL -D "$PGDATA" -m fast -w stop
fi
touch "${PGDATA}initialized"
#..
exec "$@"