From 95f8846e3dbde782c050e6b321221a920ec9bca6 Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Sun, 17 Dec 2023 00:10:05 -0800 Subject: [PATCH] updated for features In the modified Dockerfile, I added the necessary dependencies (zlib1g-dev, libmemcached11) and modified the installation and enabling of the zip, memcached, and imagick extensions. --- Dockerfile | 276 +++++++++++++++++++++++++---------------------------- 1 file changed, 128 insertions(+), 148 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2c877b6..3ed0af2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,148 +1,128 @@ -######################################################################################################################################## -# Documentation: https://git.nickyeoman.com/4lt/phpcontainer/wiki -# v2.0 -################################################################################################################################# - -# Use the PHP base image -FROM php:8.2.9-apache - -# Set maintainer information -LABEL version="2" -LABEL maintainer="4 Lights Consulting " -LABEL description="Production-ready PHP Apache container" -LABEL org.label-schema.vcs-url="https://git.nickyeoman.com/4lt/phpcontainer" - -# Set working directory and Apache document root -WORKDIR /website -ENV APACHE_DOCUMENT_ROOT /website/public/ - -# Install required packages -RUN set -eux; \ - apt-get update && \ - apt-get install -y --no-install-recommends ghostscript; - -# IMAP -RUN apt-get install -y libc-client-dev libkrb5-dev libssl-dev; -RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl -RUN docker-php-ext-install imap - -# Install PHP extensions -RUN set -ex; \ - \ - savedAptMark="$(apt-mark showmanual)"; \ - \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - libbz2-dev \ - libgmp-dev \ - libicu-dev \ - libfreetype6-dev \ - libjpeg-dev \ - libldap2-dev \ - libmemcached-dev \ - libmagickwand-dev \ - libpq-dev \ - libpng-dev \ - libwebp-dev \ - libzip-dev \ - ; \ - \ - docker-php-ext-configure gd \ - --with-freetype \ - --with-jpeg \ - --with-webp \ - ; \ - debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ - docker-php-ext-configure ldap --with-libdir="lib/$debMultiarch"; \ - docker-php-ext-configure intl; \ - docker-php-ext-install -j "$(nproc)" \ - bz2 \ - bcmath \ - exif \ - gd \ - gmp \ - intl \ - ldap \ - mysqli \ - pdo_mysql \ - pdo_pgsql \ - pgsql \ - zip \ - ; \ - pecl install imagick-3.6.0 && \ - docker-php-ext-enable imagick && \ - rm -r /tmp/pear; \ - \ - 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" ]; \ - \ - pecl install APCu-5.1.21 && \ - pecl install memcached-3.2.0 && \ - pecl install redis-5.3.7 && \ - \ - docker-php-ext-enable \ - apcu \ - memcached \ - redis && \ - rm -r /tmp/pear; \ - \ - 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'; } && \ - err="$(php --version 3>&1 1>&2 2>&3)"; \ - [ -z "$err" ] - -# Set recommended PHP.ini settings -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 - -# Set recommended error logging -RUN { \ - 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 - -# Enable Apache modules and configure RemoteIP -RUN set -eux; \ - a2enmod expires headers rewrite remoteip socache_shmcb ssl && \ - { \ - echo 'RemoteIPHeader X-Forwarded-For'; \ - echo 'RemoteIPTrustedProxy 10.0.0.0/8'; \ - echo 'RemoteIPTrustedProxy 172.16.0.0/12'; \ - echo 'RemoteIPTrustedProxy 192.168.0.0/16'; \ - echo 'RemoteIPTrustedProxy 169.254.0.0/16'; \ - echo 'RemoteIPTrustedProxy 127.0.0.0/8'; \ - } > /etc/apache2/conf-available/remoteip.conf; \ - a2enconf remoteip; \ - find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' + - -# More Apache settings -RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf -RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf -RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf - -EXPOSE 80 -CMD ["apache2-foreground"] +######################################################################################################################################## +# Documentation: https://git.nickyeoman.com/4lt/phpcontainer/wiki +# v3.0 +################################################################################################################################# + +# Use the PHP base image +FROM php:8.3.0-apache + +# Set maintainer information +LABEL version="2" +LABEL maintainer="4 Lights Consulting " +LABEL description="Production-ready PHP Apache container" +LABEL org.label-schema.vcs-url="https://git.nickyeoman.com/4lt/phpcontainer" + +# Set working directory and Apache document root +WORKDIR /website +ENV APACHE_DOCUMENT_ROOT /website/public/ + +# Install required packages +RUN set -eux; \ + apt-get update && \ + apt-get install -y --no-install-recommends ghostscript; + +# IMAP +RUN apt-get install -y libc-client-dev libkrb5-dev libssl-dev; +RUN docker-php-ext-configure imap --with-kerberos --with-imap-ssl +RUN docker-php-ext-install imap + +# Install PHP extensions +RUN set -ex; \ + \ + savedAptMark="$(apt-mark showmanual)"; \ + \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libbz2-dev \ + libgmp-dev \ + libicu-dev \ + libfreetype6-dev \ + libjpeg-dev \ + libldap2-dev \ + libmemcached-dev \ + libmagickwand-dev \ + libpq-dev \ + libpng-dev \ + libwebp-dev \ + libzip-dev \ + zlib1g-dev \ # Add zlib1g-dev for zip extension + libmemcached11 \ # Add libmemcached11 for memcached extension + ; \ + \ + docker-php-ext-configure gd \ + --with-freetype \ + --with-jpeg \ + --with-webp \ + ; \ + debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \ + docker-php-ext-configure ldap --with-libdir="lib/$debMultiarch"; \ + docker-php-ext-configure intl; \ + docker-php-ext-install -j "$(nproc)" \ + bz2 \ + bcmath \ + exif \ + gd \ + gmp \ + intl \ + ldap \ + mysqli \ + pdo_mysql \ + pdo_pgsql \ + pgsql \ + zip \ + ; \ + pecl install imagick-3.6.0 && \ + docker-php-ext-enable imagick && \ + pecl install memcached-3.2.0 && \ + docker-php-ext-enable memcached && \ + pecl install redis-5.3.7 && \ + docker-php-ext-enable redis && \ + \ + 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; \ + \ + { \ + 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; \ + \ + a2enmod expires headers rewrite remoteip socache_shmcb ssl && \ + { \ + echo 'RemoteIPHeader X-Forwarded-For'; \ + echo 'RemoteIPTrustedProxy 10.0.0.0/8'; \ + echo 'RemoteIPTrustedProxy 172.16.0.0/12'; \ + echo 'RemoteIPTrustedProxy 192.168.0.0/16'; \ + echo 'RemoteIPTrustedProxy 169.254.0.0/16'; \ + echo 'RemoteIPTrustedProxy 127.0.0.0/8'; \ + } > /etc/apache2/conf-available/remoteip.conf; \ + a2enconf remoteip; \ + find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' +; \ + sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf; \ + sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf; \ + echo "ServerName localhost" >> /etc/apache2/apache2.conf; \ + \ + apt-mark auto '.*' > /dev/null && \ + apt-mark manual $savedAptMark && \ + ldd "$(php -r 'echo ini_get("extension_dir");')/"*.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 "$(php -r 'echo ini_get("extension_dir");')/"*.so | grep 'not found'; } && \ + err="$(php --version 3>&1 1>&2 2>&3)"; \ + [ -z "$err" ] + +EXPOSE 80 +CMD ["apache2-foreground"]