Skip to content

Commit 15dab9a

Browse files
committed
Add a "file_env" helper function and convert the rest of the file to use it for every user-specified value
1 parent 610717f commit 15dab9a

File tree

5 files changed

+170
-50
lines changed

5 files changed

+170
-50
lines changed

docker-entrypoint.sh

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,38 @@
11
#!/bin/bash
22
set -e
33

4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
file_env() {
9+
local var="$1"
10+
local fileVar="${var}_FILE"
11+
local def="${2:-}"
12+
if [ "${!var}" ] && [ "${!fileVar}" ]; then
13+
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
14+
exit 1
15+
fi
16+
local val="$def"
17+
if [ "${!var}" ]; then
18+
val="${!var}"
19+
elif [ "${!fileVar}" ]; then
20+
val="$(< "${!fileVar}")"
21+
fi
22+
export "$var"="$val"
23+
unset "$fileVar"
24+
}
25+
426
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
5-
: "${WORDPRESS_DB_HOST:=mysql}"
27+
file_env 'WORDPRESS_DB_HOST' 'mysql'
628
# if we're linked to MySQL and thus have credentials already, let's use them
7-
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}
29+
file_env 'WORDPRESS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
830
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
9-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
31+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
32+
else
33+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_PASSWORD"
1034
fi
11-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD}
12-
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}}
13-
# If the value of WORDPRESS_DB_PASSWORD is a file that exists within
14-
# the container, read the contents of that file (useful if using
15-
# Docker-managed secrets)
16-
if [ -f "$WORDPRESS_DB_PASSWORD" ]; then
17-
WORDPRESS_DB_PASSWORD="$(cat $WORDPRESS_DB_PASSWORD)"
18-
fi
35+
file_env 'WORDPRESS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-wordpress}"
1936
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then
2037
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable'
2138
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?'
@@ -110,9 +127,10 @@ EOPHP
110127
NONCE_SALT
111128
)
112129
for unique in "${UNIQUES[@]}"; do
113-
eval unique_value=\$WORDPRESS_$unique
114-
if [ "$unique_value" ]; then
115-
set_config "$unique" "$unique_value"
130+
uniqVar="WORDPRESS_$unique"
131+
file_env "$uniqVar"
132+
if [ "${!uniqVar}" ]; then
133+
set_config "$unique" "${!uniqVar}"
116134
else
117135
# if not specified, let's generate a random value
118136
current_set="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
@@ -122,10 +140,12 @@ EOPHP
122140
fi
123141
done
124142

143+
file_env 'WORDPRESS_TABLE_PREFIX'
125144
if [ "$WORDPRESS_TABLE_PREFIX" ]; then
126145
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
127146
fi
128147

148+
file_env 'WORDPRESS_DEBUG'
129149
if [ "$WORDPRESS_DEBUG" ]; then
130150
set_config 'WP_DEBUG' 1 boolean
131151
fi

php5.6/apache/docker-entrypoint.sh

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
22
set -e
33

4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
file_env() {
9+
local var="$1"
10+
local fileVar="${var}_FILE"
11+
local def="${2:-}"
12+
if [ "${!var}" ] && [ "${!fileVar}" ]; then
13+
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
14+
exit 1
15+
fi
16+
local val="$def"
17+
if [ "${!var}" ]; then
18+
val="${!var}"
19+
elif [ "${!fileVar}" ]; then
20+
val="$(< "${!fileVar}")"
21+
fi
22+
export "$var"="$val"
23+
unset "$fileVar"
24+
}
25+
426
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
5-
: "${WORDPRESS_DB_HOST:=mysql}"
27+
file_env 'WORDPRESS_DB_HOST' 'mysql'
628
# if we're linked to MySQL and thus have credentials already, let's use them
7-
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}
29+
file_env 'WORDPRESS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
830
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
9-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
31+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
32+
else
33+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_PASSWORD"
1034
fi
11-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD}
12-
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}}
13-
35+
file_env 'WORDPRESS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-wordpress}"
1436
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then
1537
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable'
1638
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?'
@@ -105,9 +127,10 @@ EOPHP
105127
NONCE_SALT
106128
)
107129
for unique in "${UNIQUES[@]}"; do
108-
eval unique_value=\$WORDPRESS_$unique
109-
if [ "$unique_value" ]; then
110-
set_config "$unique" "$unique_value"
130+
uniqVar="WORDPRESS_$unique"
131+
file_env "$uniqVar"
132+
if [ "${!uniqVar}" ]; then
133+
set_config "$unique" "${!uniqVar}"
111134
else
112135
# if not specified, let's generate a random value
113136
current_set="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
@@ -117,10 +140,12 @@ EOPHP
117140
fi
118141
done
119142

143+
file_env 'WORDPRESS_TABLE_PREFIX'
120144
if [ "$WORDPRESS_TABLE_PREFIX" ]; then
121145
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
122146
fi
123147

148+
file_env 'WORDPRESS_DEBUG'
124149
if [ "$WORDPRESS_DEBUG" ]; then
125150
set_config 'WP_DEBUG' 1 boolean
126151
fi

php5.6/fpm/docker-entrypoint.sh

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
22
set -e
33

4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
file_env() {
9+
local var="$1"
10+
local fileVar="${var}_FILE"
11+
local def="${2:-}"
12+
if [ "${!var}" ] && [ "${!fileVar}" ]; then
13+
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
14+
exit 1
15+
fi
16+
local val="$def"
17+
if [ "${!var}" ]; then
18+
val="${!var}"
19+
elif [ "${!fileVar}" ]; then
20+
val="$(< "${!fileVar}")"
21+
fi
22+
export "$var"="$val"
23+
unset "$fileVar"
24+
}
25+
426
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
5-
: "${WORDPRESS_DB_HOST:=mysql}"
27+
file_env 'WORDPRESS_DB_HOST' 'mysql'
628
# if we're linked to MySQL and thus have credentials already, let's use them
7-
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}
29+
file_env 'WORDPRESS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
830
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
9-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
31+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
32+
else
33+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_PASSWORD"
1034
fi
11-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD}
12-
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}}
13-
35+
file_env 'WORDPRESS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-wordpress}"
1436
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then
1537
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable'
1638
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?'
@@ -105,9 +127,10 @@ EOPHP
105127
NONCE_SALT
106128
)
107129
for unique in "${UNIQUES[@]}"; do
108-
eval unique_value=\$WORDPRESS_$unique
109-
if [ "$unique_value" ]; then
110-
set_config "$unique" "$unique_value"
130+
uniqVar="WORDPRESS_$unique"
131+
file_env "$uniqVar"
132+
if [ "${!uniqVar}" ]; then
133+
set_config "$unique" "${!uniqVar}"
111134
else
112135
# if not specified, let's generate a random value
113136
current_set="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
@@ -117,10 +140,12 @@ EOPHP
117140
fi
118141
done
119142

143+
file_env 'WORDPRESS_TABLE_PREFIX'
120144
if [ "$WORDPRESS_TABLE_PREFIX" ]; then
121145
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
122146
fi
123147

148+
file_env 'WORDPRESS_DEBUG'
124149
if [ "$WORDPRESS_DEBUG" ]; then
125150
set_config 'WP_DEBUG' 1 boolean
126151
fi

php7.0/apache/docker-entrypoint.sh

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
22
set -e
33

4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
file_env() {
9+
local var="$1"
10+
local fileVar="${var}_FILE"
11+
local def="${2:-}"
12+
if [ "${!var}" ] && [ "${!fileVar}" ]; then
13+
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
14+
exit 1
15+
fi
16+
local val="$def"
17+
if [ "${!var}" ]; then
18+
val="${!var}"
19+
elif [ "${!fileVar}" ]; then
20+
val="$(< "${!fileVar}")"
21+
fi
22+
export "$var"="$val"
23+
unset "$fileVar"
24+
}
25+
426
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
5-
: "${WORDPRESS_DB_HOST:=mysql}"
27+
file_env 'WORDPRESS_DB_HOST' 'mysql'
628
# if we're linked to MySQL and thus have credentials already, let's use them
7-
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}
29+
file_env 'WORDPRESS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
830
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
9-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
31+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
32+
else
33+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_PASSWORD"
1034
fi
11-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD}
12-
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}}
13-
35+
file_env 'WORDPRESS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-wordpress}"
1436
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then
1537
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable'
1638
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?'
@@ -105,9 +127,10 @@ EOPHP
105127
NONCE_SALT
106128
)
107129
for unique in "${UNIQUES[@]}"; do
108-
eval unique_value=\$WORDPRESS_$unique
109-
if [ "$unique_value" ]; then
110-
set_config "$unique" "$unique_value"
130+
uniqVar="WORDPRESS_$unique"
131+
file_env "$uniqVar"
132+
if [ "${!uniqVar}" ]; then
133+
set_config "$unique" "${!uniqVar}"
111134
else
112135
# if not specified, let's generate a random value
113136
current_set="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
@@ -117,10 +140,12 @@ EOPHP
117140
fi
118141
done
119142

143+
file_env 'WORDPRESS_TABLE_PREFIX'
120144
if [ "$WORDPRESS_TABLE_PREFIX" ]; then
121145
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
122146
fi
123147

148+
file_env 'WORDPRESS_DEBUG'
124149
if [ "$WORDPRESS_DEBUG" ]; then
125150
set_config 'WP_DEBUG' 1 boolean
126151
fi

php7.0/fpm/docker-entrypoint.sh

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
22
set -e
33

4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
file_env() {
9+
local var="$1"
10+
local fileVar="${var}_FILE"
11+
local def="${2:-}"
12+
if [ "${!var}" ] && [ "${!fileVar}" ]; then
13+
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
14+
exit 1
15+
fi
16+
local val="$def"
17+
if [ "${!var}" ]; then
18+
val="${!var}"
19+
elif [ "${!fileVar}" ]; then
20+
val="$(< "${!fileVar}")"
21+
fi
22+
export "$var"="$val"
23+
unset "$fileVar"
24+
}
25+
426
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
5-
: "${WORDPRESS_DB_HOST:=mysql}"
27+
file_env 'WORDPRESS_DB_HOST' 'mysql'
628
# if we're linked to MySQL and thus have credentials already, let's use them
7-
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}}
29+
file_env 'WORDPRESS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
830
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
9-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
31+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
32+
else
33+
file_env 'WORDPRESS_DB_PASSWORD' "$MYSQL_ENV_MYSQL_PASSWORD"
1034
fi
11-
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD}
12-
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}}
13-
35+
file_env 'WORDPRESS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-wordpress}"
1436
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then
1537
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable'
1638
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?'
@@ -105,9 +127,10 @@ EOPHP
105127
NONCE_SALT
106128
)
107129
for unique in "${UNIQUES[@]}"; do
108-
eval unique_value=\$WORDPRESS_$unique
109-
if [ "$unique_value" ]; then
110-
set_config "$unique" "$unique_value"
130+
uniqVar="WORDPRESS_$unique"
131+
file_env "$uniqVar"
132+
if [ "${!uniqVar}" ]; then
133+
set_config "$unique" "${!uniqVar}"
111134
else
112135
# if not specified, let's generate a random value
113136
current_set="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)"
@@ -117,10 +140,12 @@ EOPHP
117140
fi
118141
done
119142

143+
file_env 'WORDPRESS_TABLE_PREFIX'
120144
if [ "$WORDPRESS_TABLE_PREFIX" ]; then
121145
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX"
122146
fi
123147

148+
file_env 'WORDPRESS_DEBUG'
124149
if [ "$WORDPRESS_DEBUG" ]; then
125150
set_config 'WP_DEBUG' 1 boolean
126151
fi

0 commit comments

Comments
 (0)