parent
bcb5e39abb
commit
a2618615b8
@ -0,0 +1,25 @@ |
||||
FROM wordpress:4-php7.2-apache |
||||
|
||||
# install the PHP extensions we need |
||||
RUN set -ex; \ |
||||
\ |
||||
apt-get update; \ |
||||
apt-get install -y \ |
||||
libsqlite3-dev \ |
||||
unzip \ |
||||
; \ |
||||
rm -rf /var/lib/apt/lists/*; \ |
||||
\ |
||||
docker-php-ext-install gd pdo pdo_sqlite |
||||
# TODO consider removing the *-dev deps and only keeping the necessary lib* packages |
||||
|
||||
|
||||
ADD https://downloads.wordpress.org/plugin/sqlite-integration.1.8.1.zip /usr/src/wordpress/wp-content/plugins/ |
||||
|
||||
RUN unzip /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip -d /usr/src/wordpress/wp-content/plugins/ && \ |
||||
rm /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip && \ |
||||
cp /usr/src/wordpress/wp-content/plugins/sqlite-integration/db.php /usr/src/wordpress/wp-content/ |
||||
|
||||
COPY docker-entrypoint.sh /usr/local/bin/ |
||||
|
||||
ENV WORDPRESS_DB_FILE=database.sqlite |
@ -0,0 +1,25 @@ |
||||
FROM arm32v7/wordpress:4-php7.2-apache |
||||
|
||||
# install the PHP extensions we need |
||||
RUN set -ex; \ |
||||
\ |
||||
apt-get update; \ |
||||
apt-get install -y \ |
||||
libsqlite3-dev \ |
||||
unzip \ |
||||
; \ |
||||
rm -rf /var/lib/apt/lists/*; \ |
||||
\ |
||||
docker-php-ext-install gd pdo pdo_sqlite |
||||
# TODO consider removing the *-dev deps and only keeping the necessary lib* packages |
||||
|
||||
|
||||
ADD https://downloads.wordpress.org/plugin/sqlite-integration.1.8.1.zip /usr/src/wordpress/wp-content/plugins/ |
||||
|
||||
RUN unzip /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip -d /usr/src/wordpress/wp-content/plugins/ && \ |
||||
rm /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip && \ |
||||
cp /usr/src/wordpress/wp-content/plugins/sqlite-integration/db.php /usr/src/wordpress/wp-content/ |
||||
|
||||
COPY docker-entrypoint.sh /usr/local/bin/ |
||||
|
||||
ENV WORDPRESS_DB_FILE=database.sqlite |
@ -0,0 +1,25 @@ |
||||
FROM arm64v8/wordpress:4-php7.2-apache |
||||
|
||||
# install the PHP extensions we need |
||||
RUN set -ex; \ |
||||
\ |
||||
apt-get update; \ |
||||
apt-get install -y \ |
||||
libsqlite3-dev \ |
||||
unzip \ |
||||
; \ |
||||
rm -rf /var/lib/apt/lists/*; \ |
||||
\ |
||||
docker-php-ext-install gd pdo pdo_sqlite |
||||
# TODO consider removing the *-dev deps and only keeping the necessary lib* packages |
||||
|
||||
|
||||
ADD https://downloads.wordpress.org/plugin/sqlite-integration.1.8.1.zip /usr/src/wordpress/wp-content/plugins/ |
||||
|
||||
RUN unzip /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip -d /usr/src/wordpress/wp-content/plugins/ && \ |
||||
rm /usr/src/wordpress/wp-content/plugins/sqlite-integration.1.8.1.zip && \ |
||||
cp /usr/src/wordpress/wp-content/plugins/sqlite-integration/db.php /usr/src/wordpress/wp-content/ |
||||
|
||||
COPY docker-entrypoint.sh /usr/local/bin/ |
||||
|
||||
ENV WORDPRESS_DB_FILE=database.sqlite |
@ -1,2 +1,22 @@ |
||||
# docker-wordpress-sqlite |
||||
Fork from official wordpress-php7-apache, with sqlite plugin. For dev purpose or small memory device like Raspberrypi |
||||
Fork from official wordpress4-php7.2-apache, with [sqlite plugin](https://wordpress.org/plugins/sqlite-integration/). For dev purpose or small memory device like Raspberrypi. |
||||
|
||||
### Tags |
||||
|
||||
- `latest`: amd64 |
||||
- `arm32v7`: Raspberry Pi v2 (not tested) |
||||
- `arm64v8`: Raspberry Pi v3 (not tested) |
||||
|
||||
### How to use this image ? |
||||
|
||||
Read [official Readme](https://hub.docker.com/r/_/wordpress/). |
||||
|
||||
Deleted environment variables: `WORDPRESS_DB_*` |
||||
Added environment variables: |
||||
|
||||
- `WORDPRESS_DB_DIR`: location of sqlite file, relative to /var/www/html (default to "database", ie "/var/www/html/database") |
||||
- `WORDPRESS_DB_FILE`: name of sqlite file (default to "database.sqlite") |
||||
|
||||
### MySQL vs SQLite |
||||
|
||||
Read this article https://darryldias.me/12/my-experience-with-wordpress-sqlite/ |
@ -0,0 +1,169 @@ |
||||
#!/bin/bash |
||||
set -euo pipefail |
||||
|
||||
|
||||
########################################################################################################## |
||||
## COPY FROM https://github.com/docker-library/wordpress/blob/master/php7.2/apache/docker-entrypoint.sh ## |
||||
########################################################################################################## |
||||
|
||||
|
||||
# usage: file_env VAR [DEFAULT] |
||||
# ie: file_env 'XYZ_DB_PASSWORD' 'example' |
||||
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of |
||||
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) |
||||
file_env() { |
||||
local var="$1" |
||||
local fileVar="${var}_FILE" |
||||
local def="${2:-}" |
||||
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then |
||||
echo >&2 "error: both $var and $fileVar are set (but are exclusive)" |
||||
exit 1 |
||||
fi |
||||
local val="$def" |
||||
if [ "${!var:-}" ]; then |
||||
val="${!var}" |
||||
elif [ "${!fileVar:-}" ]; then |
||||
val="$(< "${!fileVar}")" |
||||
fi |
||||
export "$var"="$val" |
||||
unset "$fileVar" |
||||
} |
||||
|
||||
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then |
||||
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 |
||||
|
||||
# allow any of these "Authentication Unique Keys and Salts." to be specified via |
||||
# environment variables with a "WORDPRESS_" prefix (ie, "WORDPRESS_AUTH_KEY") |
||||
uniqueEnvs=( |
||||
AUTH_KEY |
||||
SECURE_AUTH_KEY |
||||
LOGGED_IN_KEY |
||||
NONCE_KEY |
||||
AUTH_SALT |
||||
SECURE_AUTH_SALT |
||||
LOGGED_IN_SALT |
||||
NONCE_SALT |
||||
) |
||||
envs=( |
||||
WORDPRESS_DB_DIR |
||||
WORDPRESS_DB_FILE |
||||
"${uniqueEnvs[@]/#/WORDPRESS_}" |
||||
WORDPRESS_DEBUG |
||||
) |
||||
haveConfig= |
||||
for e in "${envs[@]}"; do |
||||
file_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_DIR:=database}" |
||||
: "${WORDPRESS_DB_FILE:=database.sqlite}" |
||||
|
||||
# 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 -e 's/\r$//' 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 -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 |
||||
if (! grep "'$key'" wp-config.php) > /dev/null ; then |
||||
SETTINGS_LINE=$(grep wp-settings wp-config.php) |
||||
sed -i "s/$SETTINGS_LINE/define('$key',$(sed_escape_rhs "$(php_escape "$value" "$var_type")"));\n$SETTINGS_LINE/g" wp-config.php |
||||
fi |
||||
} |
||||
|
||||
set_config 'DB_DIR' "$WORDPRESS_DB_DIR" |
||||
set_config 'DB_FILE' "$WORDPRESS_DB_FILE" |
||||
set_config 'USE_MYSQL' "0" "integer" |
||||
|
||||
|
||||
for unique in "${uniqueEnvs[@]}"; do |
||||
uniqVar="WORDPRESS_$unique" |
||||
if [ -n "${!uniqVar}" ]; then |
||||
set_config "$unique" "${!uniqVar}" |
||||
else |
||||
# if not specified, let's generate a random value |
||||
currentVal="$(sed -rn -e "s/define\((([\'\"])$unique\2\s*,\s*)(['\"])(.*)\3\);/\4/p" wp-config.php)" |
||||
if [ "$currentVal" = 'put your unique phrase here' ]; then |
||||
set_config "$unique" "$(head -c1m /dev/urandom | sha1sum | cut -d' ' -f1)" |
||||
fi |
||||
fi |
||||
done |
||||
|
||||
|
||||
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 "$@" |
Loading…
Reference in new issue