docker-postgis/scripts/docker-entrypoint.sh

127 wiersze
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
source /scripts/env-data.sh
# Setup postgres CONF file
source /scripts/setup-conf.sh
# Setup ssl
source /scripts/setup-ssl.sh
# Setup pg_hba.conf
source /scripts/setup-pg_hba.sh
# Function to add figlet
figlet -t "Kartoza Docker PostGIS"
# Gosu preparations
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
USER_ID=${POSTGRES_UID:-1000}
GROUP_ID=${POSTGRES_GID:-1000}
USER_NAME=${USER:-postgresuser}
DB_GROUP_NAME=${GROUP_NAME:-postgresusers}
export USER_NAME=${USER_NAME}
export DB_GROUP_NAME=${DB_GROUP_NAME}
# Add group
if [ ! $(getent group "${DB_GROUP_NAME}") ]; then
groupadd -r "${DB_GROUP_NAME}" -g "${GROUP_ID}"
fi
# Add user to system
if id "${USER_NAME}" &>/dev/null; then
echo ' skipping user creation'
else
useradd -l -m -d /home/"${USER_NAME}"/ -u "${USER_ID}" --gid "${GROUP_ID}" -s /bin/bash -G "${DB_GROUP_NAME}" "${USER_NAME}"
fi
if [[ "${REPLICATION}" =~ [Tt][Rr][Uu][Ee] ]] ; then
echo "/home/${USER_NAME}/.pgpass" > /tmp/pg_subs.txt
envsubst < /tmp/pg_subs.txt > /tmp/pass_command.txt
PGPASSFILE=$(cat /tmp/pass_command.txt)
rm /tmp/pg_subs.txt /tmp/pass_command.txt
fi
fi
if [[ -f /scripts/.pass_20.txt ]]; then
USER_CREDENTIAL_PASS=$(cat /scripts/.pass_20.txt)
cp /scripts/.pass_20.txt /tmp/PGPASSWORD.txt
echo -e "[Entrypoint] GENERATED Postgres PASSWORD: \e[1;31m $USER_CREDENTIAL_PASS \033[0m"
fi
if [[ -f /scripts/.pass_22.txt ]]; then
USER_CREDENTIAL_PASS=$(cat /scripts/.pass_22.txt)
cp /scripts/.pass_22.txt /tmp/REPLPASSWORD.txt
echo -e "[Entrypoint] GENERATED Replication PASSWORD: \e[1;34m $USER_CREDENTIAL_PASS \033[0m"
fi
if [[ -z "$REPLICATE_FROM" ]]; then
# This means this is a master instance. We check that database exists
echo -e "[Entrypoint] Setup master database \033[0m"
source /scripts/setup-database.sh
entry_point_script
kill_postgres
else
# This means this is a slave/replication instance.
echo -e "[Entrypoint] Setup replicant database \033[0m"
create_dir "${WAL_ARCHIVE}"
if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then
non_root_permission "${USER_NAME}" "${DB_GROUP_NAME}"
else
dir_ownership=("${DATADIR}" "${WAL_ARCHIVE}")
for directory in "${dir_ownership[@]}"; do
if [[ $(stat -c '%U' "${directory}") != "postgres" ]] && [[ $(stat -c '%G' "${directory}") != "postgres" ]];then
chown -R postgres:postgres "${directory}"
fi
done
for directory in "${dir_ownership[@]}"; do
if [ "$(stat -c %a "$directory")" != "750" ]; then
chmod -R 750 "$directory"
fi
done
fi
source /scripts/setup-replication.sh
fi
# If no arguments passed to entrypoint, then run postgres by default
if [[ $# -eq 0 ]];then
if [[ ${RUN_AS_ROOT} =~ [Tt][Rr][Uu][Ee] ]];then
echo -e "[Entrypoint] \e[1;31m Postgres initialisation process completed .... restarting in foreground \033[0m"
non_root_permission postgres postgres
exec su - postgres -c "$SETVARS $POSTGRES -D $DATADIR -c config_file=$CONF"
else
echo -e "[Entrypoint] \e[1;31m Postgres initialisation process completed .... restarting in foreground with gosu \033[0m"
non_root_permission "${USER_NAME}" "${DB_GROUP_NAME}"
exec gosu "${USER_NAME}" bash -c "$SETVARS $POSTGRES -D $DATADIR -c config_file=$CONF"
fi
fi
# If arguments passed, run postgres with these arguments
# This will make sure entrypoint will always be executed
if [[ "${1:0:1}" = '-' ]]; then
# append postgres into the arguments
if [[ ${RUN_AS_ROOT} =~ [Tt][Rr][Uu][Ee] ]];then
set -- postgres "$@"
else
set -- gosu "${USER_NAME}" "$@"
fi
fi
if [[ ${RUN_AS_ROOT} =~ [Tt][Rr][Uu][Ee] ]];then
exec su - "$@"
else
exec gosu "${USER_NAME}" - "$@"
fi