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 |
# 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