diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d5e8b2..48e07c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,5 +50,11 @@ date: 22 June 2021 date: 13 January 2022 +## update to WordPress version no-alpine PHP 8.1 + +date: 26 October 2022 + + +--- --- --- diff --git a/repo-config.yaml b/repo-config.yaml index e625b4a..95fbf59 100644 --- a/repo-config.yaml +++ b/repo-config.yaml @@ -1,3 +1,4 @@ + Active: true # Active: false # to not follow up webhook workflow diff --git a/src/Dockerfile b/src/Dockerfile index abc2497..b08fb83 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,36 +1,38 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" # -FROM php:8.1-fpm-alpine +# PLEASE DO NOT EDIT IT DIRECTLY. +# + +FROM php:8.1-fpm # persistent dependencies RUN set -eux; \ - apk add --no-cache \ -# in theory, docker-entrypoint.sh is POSIX-compliant, but priority is a working, consistent image - bash \ + apt-get update; \ + apt-get install ssmtp -y ;\ + apt-get install -y --no-install-recommends \ # Ghostscript is required for rendering PDF previews ghostscript \ -# Alpine package for "imagemagick" contains ~120 .so files, see: https://github.com/docker-library/wordpress/pull/497 - imagemagick \ - ; + ; \ + rm -rf /var/lib/apt/lists/* # install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions) RUN set -ex; \ \ - apk add --no-cache --virtual .build-deps \ - $PHPIZE_DEPS \ - freetype-dev \ - imagemagick-dev \ - libjpeg-turbo-dev \ + savedAptMark="$(apt-mark showmanual)"; \ + \ + apt-get update; \ + apt-get install -y --no-install-recommends \ + libfreetype6-dev \ + libicu-dev \ + libjpeg-dev \ + libmagickwand-dev \ libpng-dev \ libwebp-dev \ libzip-dev \ - gmp \ - gmp-dev \ + libgmp-dev \ ; \ \ - docker-php-ext-configure gmp \ - ;\ docker-php-ext-configure gd \ --with-freetype \ --with-jpeg \ @@ -40,11 +42,10 @@ RUN set -ex; \ bcmath \ exif \ gd \ + intl \ mysqli \ zip \ - gmp \ ; \ -# WARNING: imagick is likely not supported on Alpine: https://github.com/Imagick/imagick/issues/328 # https://pecl.php.net/package/imagick pecl install imagick-3.6.0; \ docker-php-ext-enable imagick; \ @@ -58,14 +59,19 @@ RUN set -ex; \ \ extDir="$(php -r 'echo ini_get("extension_dir");')"; \ [ -d "$extDir" ]; \ - runDeps="$( \ - scanelf --needed --nobanner --format '%n#p' --recursive "$extDir" \ - | tr ',' '\n' \ - | sort -u \ - | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ - )"; \ - apk add --no-network --virtual .wordpress-phpexts-rundeps $runDeps; \ - apk del --no-network .build-deps; \ +# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies + apt-mark auto '.*' > /dev/null; \ + apt-mark manual $savedAptMark; \ + ldd "$extDir"/*.so \ + | awk '/=>/ { print $3 }' \ + | sort -u \ + | xargs -r dpkg-query -S \ + | cut -d: -f1 \ + | sort -u \ + | xargs -rt apt-mark manual; \ + \ + apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ + rm -rf /var/lib/apt/lists/*; \ \ ! { ldd "$extDir"/*.so | grep 'not found'; }; \ # check for output like "PHP Warning: PHP Startup: Unable to load dynamic library 'foo' (tried: ...) @@ -99,8 +105,8 @@ RUN { \ } > /usr/local/etc/php/conf.d/error-logging.ini RUN set -eux; \ - version='5.8.3'; \ - sha1='3be7ed4dc6f46fe98271b974c88153640e95ad49'; \ + version='6.0.3'; \ + sha1='9ab0d521aac7042cf09946f17ec86dc65b182201'; \ \ curl -o wordpress.tar.gz -fL "https://wordpress.org/wordpress-$version.tar.gz"; \ echo "$sha1 *wordpress.tar.gz" | sha1sum -c -; \ @@ -134,15 +140,12 @@ RUN set -eux; \ mkdir "wp-content/$dir"; \ done; \ chown -R www-data:www-data wp-content; \ - chmod -R 777 wp-content; \ - curl -o wp-cli.phar -fSL "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"; \ - chmod +x wp-cli.phar; \ - mv wp-cli.phar /usr/local/bin/wp + chmod -R 777 wp-content; \ + curl -o wp-cli.phar -fSL "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"; \ + chmod +x wp-cli.phar; \ + mv wp-cli.phar /usr/local/bin/wp -RUN apk add ssmtp - -#VOLUME /var/www/html -VOLUME /var/www +VOLUME /var/www/html COPY --chown=www-data:www-data wp-config-docker.php /usr/src/wordpress/ COPY docker-entrypoint.sh /usr/local/bin/ diff --git a/src/alpine_Dockerfile b/src/alpine_Dockerfile new file mode 100644 index 0000000..abc2497 --- /dev/null +++ b/src/alpine_Dockerfile @@ -0,0 +1,151 @@ +# +# NOTE: THIS DOCKERFILE IS GENERATED VIA "apply-templates.sh" +# +FROM php:8.1-fpm-alpine + +# persistent dependencies +RUN set -eux; \ + apk add --no-cache \ +# in theory, docker-entrypoint.sh is POSIX-compliant, but priority is a working, consistent image + bash \ +# Ghostscript is required for rendering PDF previews + ghostscript \ +# Alpine package for "imagemagick" contains ~120 .so files, see: https://github.com/docker-library/wordpress/pull/497 + imagemagick \ + ; + +# install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions) +RUN set -ex; \ + \ + apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS \ + freetype-dev \ + imagemagick-dev \ + libjpeg-turbo-dev \ + libpng-dev \ + libwebp-dev \ + libzip-dev \ + gmp \ + gmp-dev \ + ; \ + \ + docker-php-ext-configure gmp \ + ;\ + docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + --with-webp \ + ; \ + docker-php-ext-install -j "$(nproc)" \ + bcmath \ + exif \ + gd \ + mysqli \ + zip \ + gmp \ + ; \ +# WARNING: imagick is likely not supported on Alpine: https://github.com/Imagick/imagick/issues/328 +# https://pecl.php.net/package/imagick + pecl install imagick-3.6.0; \ + docker-php-ext-enable imagick; \ + rm -r /tmp/pear; \ + \ +# some misbehaving extensions end up outputting to stdout 🙈 (https://github.com/docker-library/wordpress/issues/669#issuecomment-993945967) + out="$(php -r 'exit(0);')"; \ + [ -z "$out" ]; \ + err="$(php -r 'exit(0);' 3>&1 1>&2 2>&3)"; \ + [ -z "$err" ]; \ + \ + extDir="$(php -r 'echo ini_get("extension_dir");')"; \ + [ -d "$extDir" ]; \ + runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive "$extDir" \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )"; \ + apk add --no-network --virtual .wordpress-phpexts-rundeps $runDeps; \ + apk del --no-network .build-deps; \ + \ + ! { ldd "$extDir"/*.so | grep 'not found'; }; \ +# check for output like "PHP Warning: PHP Startup: Unable to load dynamic library 'foo' (tried: ...) + err="$(php --version 3>&1 1>&2 2>&3)"; \ + [ -z "$err" ] + +# set recommended PHP.ini settings +# see https://secure.php.net/manual/en/opcache.installation.php +RUN set -eux; \ + docker-php-ext-enable opcache; \ + { \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=4000'; \ + echo 'opcache.revalidate_freq=2'; \ + echo 'opcache.fast_shutdown=1'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini +# https://wordpress.org/support/article/editing-wp-config-php/#configure-error-logging +RUN { \ +# https://www.php.net/manual/en/errorfunc.constants.php +# https://github.com/docker-library/wordpress/issues/420#issuecomment-517839670 + echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \ + echo 'display_errors = Off'; \ + echo 'display_startup_errors = Off'; \ + echo 'log_errors = On'; \ + echo 'error_log = /dev/stderr'; \ + echo 'log_errors_max_len = 1024'; \ + echo 'ignore_repeated_errors = On'; \ + echo 'ignore_repeated_source = Off'; \ + echo 'html_errors = Off'; \ + } > /usr/local/etc/php/conf.d/error-logging.ini + +RUN set -eux; \ + version='5.8.3'; \ + sha1='3be7ed4dc6f46fe98271b974c88153640e95ad49'; \ + \ + curl -o wordpress.tar.gz -fL "https://wordpress.org/wordpress-$version.tar.gz"; \ + echo "$sha1 *wordpress.tar.gz" | sha1sum -c -; \ + \ +# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress + tar -xzf wordpress.tar.gz -C /usr/src/; \ + rm wordpress.tar.gz; \ + \ +# https://wordpress.org/support/article/htaccess/ + [ ! -e /usr/src/wordpress/.htaccess ]; \ + { \ + echo '# BEGIN WordPress'; \ + echo ''; \ + echo 'RewriteEngine On'; \ + echo 'RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]'; \ + echo 'RewriteBase /'; \ + echo 'RewriteRule ^index\.php$ - [L]'; \ + echo 'RewriteCond %{REQUEST_FILENAME} !-f'; \ + echo 'RewriteCond %{REQUEST_FILENAME} !-d'; \ + echo 'RewriteRule . /index.php [L]'; \ + echo ''; \ + echo '# END WordPress'; \ + } > /usr/src/wordpress/.htaccess; \ + \ + chown -R www-data:www-data /usr/src/wordpress; \ +# pre-create wp-content (and single-level children) for folks who want to bind-mount themes, etc so permissions are pre-created properly instead of root:root +# wp-content/cache: https://github.com/docker-library/wordpress/issues/534#issuecomment-705733507 + mkdir wp-content; \ + for dir in /usr/src/wordpress/wp-content/*/ cache; do \ + dir="$(basename "${dir%/}")"; \ + mkdir "wp-content/$dir"; \ + done; \ + chown -R www-data:www-data wp-content; \ + chmod -R 777 wp-content; \ + curl -o wp-cli.phar -fSL "https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar"; \ + chmod +x wp-cli.phar; \ + mv wp-cli.phar /usr/local/bin/wp + +RUN apk add ssmtp + +#VOLUME /var/www/html +VOLUME /var/www + +COPY --chown=www-data:www-data wp-config-docker.php /usr/src/wordpress/ +COPY docker-entrypoint.sh /usr/local/bin/ + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["php-fpm"]