#!/bin/bash set -euo pipefail copy_default_uploads() { if [ ! -d ./wp-content/.uploads-default ]; then echo "No default uploads detected to copy." return fi local TIME_BUILD=`cat /container-build-time` local TIME_VOLUME=`[ -f ./wp-content/uploads/.defaults-copy-time ] && cat ./wp-content/uploads/.defaults-copy-time || echo "0"` if [ "$TIME_BUILD" -eq "$TIME_VOLUME" ]; then echo "No need to copy files, both are: $TIME_VOLUME" else echo "Timestamps not equal: $TIME_BUILD !== $TIME_VOLUME" cp /container-build-time ./wp-content/uploads/.defaults-copy-time cp -Tru --preserve=all ./wp-content/.uploads-default ./wp-content/uploads rm -rf ./wp-content/.uploads-default echo "Done copying default upload files" fi } # This ensures our git tracked default uploads are available to the customer on first run. copy_default_uploads # usage: exp_env VAR [DEFAULT] exp_env() { local var="$1" local val="${2:-}" if [ "${!var:-}" ]; then val="${!var}" fi export "$var"="$val" } if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then if [ "$(id -u)" = '0' ]; then case "$1" in apache2*) user="${APACHE_RUN_USER:-www-data}" group="${APACHE_RUN_GROUP:-www-data}" ;; *) # php-fpm user='www-data' group='www-data' ;; esac else user="$(id -u)" group="$(id -g)" fi # allow any of these values to be specified via environment variables # with a "WORDPRESS_" prefix (ie, "WORDPRESS_DB_HOST") envs=( WORDPRESS_DB_HOST WORDPRESS_DB_NAME WORDPRESS_TABLE_PREFIX WORDPRESS_DEBUG ) haveConfig= for e in "${envs[@]}"; do exp_env "$e" if [ -z "$haveConfig" ] && [ -n "${!e}" ]; then haveConfig=1 fi done # only touch "wp-config.php" if we have environment-supplied configuration values if [ "$haveConfig" ]; then : "${WORDPRESS_DB_HOST:=mysql}" : "${WORDPRESS_DB_NAME:=wordpress}" if [ -f wp-config.translucent-secret.php ]; then echo "Copying WP config" cp wp-config.translucent-secret.php wp-config.php chown "$user:$group" wp-config.php else echo "NOT copying WP config, have you set the docker secrets?" fi # see http://stackoverflow.com/a/2705678/433558 sed_escape_lhs() { echo "$@" | sed -e 's/[]\/$*.^|[]/\\&/g' } sed_escape_rhs() { echo "$@" | sed -e 's/[\/&]/\\&/g' } php_escape() { local escaped="$(php -r 'var_export(('"$2"') $argv[1]);' -- "$1")" if [ "$2" = 'string' ] && [ "${escaped:0:1}" = "'" ]; then escaped="${escaped//$'\n'/"' + \"\\n\" + '"}" fi echo "$escaped" } set_config() { key="$1" value="$2" var_type="${3:-string}" start="(['\"])$(sed_escape_lhs "$key")\2\s*," end="\);" if [ "${key:0:1}" = '$' ]; then start="^(\s*)$(sed_escape_lhs "$key")\s*=" end=";" fi sed -ri -e "s/($start\s*).*($end)$/\1$(sed_escape_rhs "$(php_escape "$value" "$var_type")")\3/" wp-config.php } set_config 'DB_HOST' "$WORDPRESS_DB_HOST" set_config 'DB_NAME' "$WORDPRESS_DB_NAME" if [ "$WORDPRESS_TABLE_PREFIX" ]; then set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX" fi if [ "$WORDPRESS_DEBUG" ]; then set_config 'WP_DEBUG' 1 boolean fi fi # now that we're definitely done writing configuration, let's clear out the relevant envrionment variables (so that stray "phpinfo()" calls don't leak secrets from our code) for e in "${envs[@]}"; do unset "$e" done fi exec "$@"