Skip to content

Commit 8ce1e14

Browse files
authored
Merge pull request #186 from mstanleyjones/wordpress_support_secrets
Add support for passing a file path as the value for DB password
2 parents 9c8f5d0 + 8ab70dd commit 8ce1e14

File tree

5 files changed

+175
-50
lines changed

5 files changed

+175
-50
lines changed

docker-entrypoint.sh

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
2-
set -e
2+
set -eu
3+
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+
}
325

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/apache/docker-entrypoint.sh

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
2-
set -e
2+
set -eu
3+
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+
}
325

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: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
2-
set -e
2+
set -eu
3+
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+
}
325

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: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
2-
set -e
2+
set -eu
3+
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+
}
325

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: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
#!/bin/bash
2-
set -e
2+
set -eu
3+
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+
}
325

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)