From 6d154446d37aba32a72445f4827397b701d75ab5 Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Tue, 14 Jan 2025 17:05:44 -0800 Subject: [PATCH] v5.0.0 --- Dockerfile | 169 ++++++++++++++--------------------------------------- README.md | 19 +++--- 2 files changed, 51 insertions(+), 137 deletions(-) diff --git a/Dockerfile b/Dockerfile index d103a72..48a9150 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,149 +1,66 @@ -######################################################################################################################################## -# Project: https://git.4lt.ca/4lt/phpcontainer/ -# v4 -################################################################################################################################# - # Use the PHP base image -# https://hub.docker.com/_/php -FROM php:8.3.9-apache +FROM php:8.4.2-apache # Set maintainer information -LABEL version="4.0" +LABEL version="5.0.0" LABEL maintainer="4 Lights Consulting " LABEL description="Production-ready PHP Apache container" LABEL org.label-schema.vcs-url="https://git.4lt.ca/4lt/phpcontainer" # Set working directory and Apache document root WORKDIR /data -ENV APACHE_DOCUMENT_ROOT /data/public/ +ENV APACHE_DOCUMENT_ROOT=/data/public/ -# Install required packages +# Update and install required packages RUN set -eux; \ - apt-get update && \ - apt-get install -y --no-install-recommends ghostscript; + apt-get update && \ + apt-get install -y --no-install-recommends \ + ghostscript \ + libssl-dev \ + libbz2-dev \ + libfreetype6-dev \ + libjpeg-dev \ + libpng-dev \ + libwebp-dev \ + libzip-dev && \ + rm -rf /var/lib/apt/lists/* -# 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 +# Configure and install essential 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" ] + docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp; \ + docker-php-ext-install -j "$(nproc)" \ + bz2 \ + gd \ + mysqli \ + pdo_mysql \ + zip # 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 + echo 'opcache.memory_consumption=128' > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ + echo 'opcache.interned_strings_buffer=8' >> /usr/local/etc/php/conf.d/opcache-recommended.ini; \ + echo 'opcache.max_accelerated_files=4000' >> /usr/local/etc/php/conf.d/opcache-recommended.ini; \ + echo 'opcache.revalidate_freq=2' >> /usr/local/etc/php/conf.d/opcache-recommended.ini; \ + 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' > /usr/local/etc/php/conf.d/error-logging.ini; \ + echo 'display_errors = Off' >> /usr/local/etc/php/conf.d/error-logging.ini; \ + echo 'log_errors = On' >> /usr/local/etc/php/conf.d/error-logging.ini; \ + echo 'error_log = /dev/stderr' >> /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' '{}' + + a2enmod expires headers rewrite remoteip socache_shmcb ssl; \ + echo 'RemoteIPHeader X-Forwarded-For' > /etc/apache2/conf-available/remoteip.conf; \ + echo 'RemoteIPTrustedProxy 10.0.0.0/8' >> /etc/apache2/conf-available/remoteip.conf; \ + echo 'RemoteIPTrustedProxy 172.16.0.0/12' >> /etc/apache2/conf-available/remoteip.conf; \ + echo 'RemoteIPTrustedProxy 192.168.0.0/16' >> /etc/apache2/conf-available/remoteip.conf; \ + a2enconf remoteip; \ + sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' /etc/apache2/*.conf -# 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 +# Configure Apache document root +RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf; \ + echo "ServerName localhost" >> /etc/apache2/apache2.conf +# Expose port and set command EXPOSE 80 CMD ["apache2-foreground"] diff --git a/README.md b/README.md index 978739b..e886125 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,16 @@ Dockerhub: https://hub.docker.com/r/4lights/phpcontainer ## How to update -Clone the project: ```git clone git@git.4lt.ca:4lt/phpcontainer.git``` - -Update the Dockerfile. - -Build (be sure to change the version number) +1. Clone the project: ```git clone git@git.4lt.ca:4lt/phpcontainer.git``` +2. Update the Dockerfile. +3. Build (be sure to change the version number) ```bash -podman buildx build --no-cache -t 4lights/phpcontainer:v5 -t 4lights/phpcontainer:latest --load . -podman login -podman push 4lights/phpcontainer:v4 -podman push 4lights/phpcontainer:latest +sudo su +docker buildx build --no-cache -t 4lights/phpcontainer:5.0.0 -t 4lights/phpcontainer:latest --load . +docker login +docker push 4lights/phpcontainer:5.0.0 +docker push 4lights/phpcontainer:latest ``` # References And Notes @@ -26,9 +25,7 @@ podman push 4lights/phpcontainer:latest ## Supported Software -* Joomla * 4 Lights PHP Framework -* Matomo ## Samples included in Repo