diff --git a/9.2/alpine/docker-entrypoint.sh b/9.2/alpine/docker-entrypoint.sh index 2c87e77fb1..e2a6cfd384 100755 --- a/9.2/alpine/docker-entrypoint.sh +++ b/9.2/alpine/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "su-exec postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | su-exec postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.2/docker-entrypoint.sh b/9.2/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/9.2/docker-entrypoint.sh +++ b/9.2/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.3/alpine/docker-entrypoint.sh b/9.3/alpine/docker-entrypoint.sh index 2c87e77fb1..e2a6cfd384 100755 --- a/9.3/alpine/docker-entrypoint.sh +++ b/9.3/alpine/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "su-exec postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | su-exec postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.3/docker-entrypoint.sh b/9.3/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/9.3/docker-entrypoint.sh +++ b/9.3/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.4/alpine/docker-entrypoint.sh b/9.4/alpine/docker-entrypoint.sh index 2c87e77fb1..e2a6cfd384 100755 --- a/9.4/alpine/docker-entrypoint.sh +++ b/9.4/alpine/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "su-exec postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | su-exec postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.4/docker-entrypoint.sh b/9.4/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/9.4/docker-entrypoint.sh +++ b/9.4/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.5/alpine/docker-entrypoint.sh b/9.5/alpine/docker-entrypoint.sh index 2c87e77fb1..e2a6cfd384 100755 --- a/9.5/alpine/docker-entrypoint.sh +++ b/9.5/alpine/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "su-exec postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | su-exec postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.5/docker-entrypoint.sh b/9.5/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/9.5/docker-entrypoint.sh +++ b/9.5/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.6/alpine/docker-entrypoint.sh b/9.6/alpine/docker-entrypoint.sh index 2c87e77fb1..e2a6cfd384 100755 --- a/9.6/alpine/docker-entrypoint.sh +++ b/9.6/alpine/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "su-exec postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | su-exec postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/9.6/docker-entrypoint.sh b/9.6/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/9.6/docker-entrypoint.sh +++ b/9.6/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 54a1098f7a..d7a78cbbb9 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -41,6 +41,18 @@ if [ "$1" = 'postgres' ]; then file_env 'POSTGRES_INITDB_ARGS' eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + authMethod=trust + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_PASSWORD" ]; then + authMethod=md5 + fi + done + fi + # check password first so we can output the warning before postgres # messes it up file_env 'POSTGRES_PASSWORD' @@ -48,7 +60,10 @@ if [ "$1" = 'postgres' ]; then pass="PASSWORD '$POSTGRES_PASSWORD'" authMethod=md5 else - # The - option suppresses leading tabs but *not* spaces. :) + pass= + fi + + if [ "$authMethod" == "trust" ]; then cat >&2 <<-'EOWARN' **************************************************** WARNING: No password has been set for the database. @@ -62,9 +77,6 @@ if [ "$1" = 'postgres' ]; then it in "docker run". **************************************************** EOWARN - - pass= - authMethod=trust fi { echo; echo "host all all all $authMethod"; } | gosu postgres tee -a "$PGDATA/pg_hba.conf" > /dev/null @@ -99,6 +111,63 @@ if [ "$1" = 'postgres' ]; then psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + # If you want to create more than one user, please use that variable + # Variable example: POSTGRES_USERS="user1:user1pass|user2:user2pass|user3:user3password" + if [ "$POSTGRES_USERS" ]; then + USERS_ARR=$(echo $POSTGRES_USERS | tr "|" "\n") + for USER in $USERS_ARR + do + USER_NAME=`echo $USER | cut -d: -f1` + USER_PASSWORD=`echo $USER | cut -d: -f2` + if [ "$USER_NAME" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$USER_NAME" WITH SUPERUSER PASSWORD '$USER_PASSWORD' ; + EOSQL + done + fi + + # If you want to create more than one database, please use that variable + # Variable example: POSTGRES_DATABASES="database1:user1|database2:user2|database3:user3" + if [ "$POSTGRES_DATABASES" ]; then + DATABASES_ARR=$(echo $POSTGRES_DATABASES | tr "|" "\n") + for DATABASE in $DATABASES_ARR + do + DATABASE_NAME=`echo $DATABASE | cut -d: -f1` + DATABASE_OWNER=`echo $DATABASE | cut -d: -f2` + if [ "$DATABASE_NAME" != 'postgres' ]; then + if [ "$DATABASE_OWNER" ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" owner "$DATABASE_OWNER" ; + EOSQL + echo + else + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$DATABASE_NAME" ; + EOSQL + echo + fi + fi + done + fi + + # If you want to set up initial postgresql.conf parameters, please use that variable + # Variable example: POSTGRES_CONFIGS="work_mem:15MB|fsync:off|full_page_writes:off" + if [ "$POSTGRES_CONFIGS" ]; then + CONFIGS_ARR=$(echo $POSTGRES_CONFIGS | tr "|" "\n") + for CONFIG in $CONFIGS_ARR + do + CONFIG_NAME=`echo $CONFIG | cut -d: -f1` + CONFIG_VALUE=`echo $CONFIG | cut -d: -f2` + "${psql[@]}" --username postgres <<-EOSQL + ALTER SYSTEM SET $CONFIG_NAME = "$CONFIG_VALUE" ; + EOSQL + done + fi + echo for f in /docker-entrypoint-initdb.d/*; do case "$f" in