Created
August 12, 2016 13:36
-
-
Save jonathan-kosgei/cb3b5af5df98705c46256f70dec7304b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then | |
: "${WORDPRESS_DB_HOST:=mysql}" | |
# if we're linked to MySQL and thus have credentials already, let's use them | |
: ${WORDPRESS_DB_USER:=${MYSQL_ENV_MYSQL_USER:-root}} | |
if [ "$WORDPRESS_DB_USER" = 'root' ]; then | |
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD} | |
fi | |
: ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_PASSWORD} | |
: ${WORDPRESS_DB_NAME:=${MYSQL_ENV_MYSQL_DATABASE:-wordpress}} | |
if [ -z "$WORDPRESS_DB_PASSWORD" ]; then | |
echo >&2 'error: missing required WORDPRESS_DB_PASSWORD environment variable' | |
echo >&2 ' Did you forget to -e WORDPRESS_DB_PASSWORD=... ?' | |
echo >&2 | |
echo >&2 ' (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)' | |
exit 1 | |
fi | |
if ! [ -e index.php -a -e wp-includes/version.php ]; then | |
echo >&2 "WordPress not found in $(pwd) - copying now..." | |
if [ "$(ls -A)" ]; then | |
echo >&2 "WARNING: $(pwd) is not empty - press Ctrl+C now if this is an error!" | |
( set -x; ls -A; sleep 10 ) | |
fi | |
tar cf - --one-file-system -C /usr/src/wordpress . | tar xf - | |
echo >&2 "Complete! WordPress has been successfully copied to $(pwd)" | |
if [ ! -e .htaccess ]; then | |
# NOTE: The "Indexes" option is disabled in the php:apache base image | |
cat > .htaccess <<-'EOF' | |
# BEGIN WordPress | |
<IfModule mod_rewrite.c> | |
RewriteEngine On | |
RewriteBase / | |
RewriteRule ^index\.php$ - [L] | |
RewriteCond %{REQUEST_FILENAME} !-f | |
RewriteCond %{REQUEST_FILENAME} !-d | |
RewriteRule . /index.php [L] | |
</IfModule> | |
# END WordPress | |
EOF | |
chown www-data:www-data .htaccess | |
fi | |
fi | |
# TODO handle WordPress upgrades magically in the same way, but only if wp-includes/version.php's $wp_version is less than /usr/src/wordpress/wp-includes/version.php's $wp_version | |
# version 4.4.1 decided to switch to windows line endings, that breaks our seds and awks | |
# https://github.com/docker-library/wordpress/issues/116 | |
# https://github.com/WordPress/WordPress/commit/1acedc542fba2482bab88ec70d4bea4b997a92e4 | |
sed -ri 's/\r\n|\r/\n/g' wp-config* | |
if [ ! -e wp-config.php ]; then | |
awk '/^\/\*.*stop editing.*\*\/$/ && c == 0 { c = 1; system("cat") } { print }' wp-config-sample.php > wp-config.php <<'EOPHP' | |
// If we're behind a proxy server and using HTTPS, we need to alert Wordpress of that fact | |
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy | |
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { | |
$_SERVER['HTTPS'] = 'on'; | |
} | |
EOPHP | |
chown www-data:www-data wp-config.php | |
fi | |
# see http://stackoverflow.com/a/2705678/433558 | |
sed_escape_lhs() { | |
echo "$@" | sed 's/[]\/$*.^|[]/\\&/g' | |
} | |
sed_escape_rhs() { | |
echo "$@" | sed 's/[\/&]/\\&/g' | |
} | |
php_escape() { | |
php -r 'var_export(('$2') $argv[1]);' "$1" | |
} | |
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 "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_USER' "$WORDPRESS_DB_USER" | |
set_config 'DB_PASSWORD' "$WORDPRESS_DB_PASSWORD" | |
set_config 'DB_NAME' "$WORDPRESS_DB_NAME" | |
# allow any of these "Authentication Unique Keys and Salts." to be specified via | |
# environment variables with a "WORDPRESS_" prefix (ie, "WORDPRESS_AUTH_KEY") | |
UNIQUES=( | |
AUTH_KEY | |
SECURE_AUTH_KEY | |
LOGGED_IN_KEY | |
NONCE_KEY | |
AUTH_SALT | |
SECURE_AUTH_SALT | |
LOGGED_IN_SALT | |
NONCE_SALT | |
) | |
for unique in "${UNIQUES[@]}"; do | |
eval unique_value=\$WORDPRESS_$unique | |
if [ "$unique_value" ]; then | |
set_config "$unique" "$unique_value" | |
else | |
# if not specified, let's generate a random value | |
current_set="$(sed -rn "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)" | |
if [ "$current_set" = 'put your unique phrase here' ]; then | |
set_config "$unique" "$(head -c1M /dev/urandom | sha1sum | cut -d' ' -f1)" | |
fi | |
fi | |
done | |
if [ "$WORDPRESS_TABLE_PREFIX" ]; then | |
set_config '$table_prefix' "$WORDPRESS_TABLE_PREFIX" | |
fi | |
if [ "$WORDPRESS_DEBUG" ]; then | |
set_config 'WP_DEBUG' 1 boolean | |
fi | |
TERM=dumb php -- "$WORDPRESS_DB_HOST" "$WORDPRESS_DB_USER" "$WORDPRESS_DB_PASSWORD" "$WORDPRESS_DB_NAME" <<'EOPHP' | |
<?php | |
// database might not exist, so let's try creating it (just to be safe) | |
$stderr = fopen('php://stderr', 'w'); | |
// https://codex.wordpress.org/Editing_wp-config.php#MySQL_Alternate_Port | |
// "hostname:port" | |
// https://codex.wordpress.org/Editing_wp-config.php#MySQL_Sockets_or_Pipes | |
// "hostname:unix-socket-path" | |
list($host, $socket) = explode(':', $argv[1], 2); | |
$port = 0; | |
if (is_numeric($socket)) { | |
$port = (int) $socket; | |
$socket = null; | |
} | |
$maxTries = 10; | |
do { | |
$mysql = new mysqli($host, $argv[2], $argv[3], '', $port, $socket); | |
if ($mysql->connect_error) { | |
fwrite($stderr, "\n" . 'MySQL Connection Error: (' . $mysql->connect_errno . ') ' . $mysql->connect_error . "\n"); | |
--$maxTries; | |
if ($maxTries <= 0) { | |
exit(1); | |
} | |
sleep(3); | |
} | |
} while ($mysql->connect_error); | |
if (!$mysql->query('CREATE DATABASE IF NOT EXISTS `' . $mysql->real_escape_string($argv[4]) . '`')) { | |
fwrite($stderr, "\n" . 'MySQL "CREATE DATABASE" Error: ' . $mysql->error . "\n"); | |
$mysql->close(); | |
exit(1); | |
} | |
$mysql->close(); | |
EOPHP | |
fi | |
exec "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM jkosgei/php-nginx:v1 | |
MAINTAINER Jonathan Kosgei <[email protected]> | |
ENV DEBIAN_FRONTEND noninteractive | |
RUN wget http://wordpress.org/latest.tar.gz | |
RUN tar xzvf latest.tar.gz;\ | |
rsync -avP wordpress/ /var/www/html/ ;\ | |
chown -R root:www-data /var/www/html/* ;\ | |
mkdir -p /var/www/html/wp-content/uploads;\ | |
chown -R :www-data /var/www/html/wp-content/uploads | |
VOLUME /var/www/html/ | |
COPY docker-entrypoint.sh /usr/local/bin/ | |
RUN export PATH=~/usr/local/bin:$PATH | |
RUN chmod +x /usr/local/bin/docker-entrypoint.sh | |
ENTRYPOINT docker-entrypoint.sh | |
ENV DEBIAN_FRONTEND dialog | |
CMD service php5-fpm restart && nginx |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment