diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3417bde..a3940e4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,6 +39,7 @@ jobs: - '7.4' - '8.0' - '8.1' + - '8.2' steps: # ------------------------------------------------------------ diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index cf4bf09..7b7bad3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -38,9 +38,10 @@ jobs: - '7.4' - '8.0' - '8.1' + - '8.2' refs: - 'master' - - '0.132' + - '0.133' steps: # ------------------------------------------------------------ diff --git a/CHANGELOG.md b/CHANGELOG.md index ebe4e5d..f6645d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ## Unreleased +## Release 0.133 + +#### Added +- Added PHP 8.2: https://github.com/devilbox/docker-php-fpm-8.2 + + ## Release 0.132 #### Fixed diff --git a/Dockerfiles/base/Dockerfile-8.2 b/Dockerfiles/base/Dockerfile-8.2 new file mode 100644 index 0000000..001d3f7 --- /dev/null +++ b/Dockerfiles/base/Dockerfile-8.2 @@ -0,0 +1,104 @@ +# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-base.j2 instead. +FROM devilbox/php-fpm-8.2 +MAINTAINER "cytopia" + + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.2-base" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-base" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-base" + + +### +### Envs +### +ENV MY_USER="devilbox" \ + MY_GROUP="devilbox" \ + MY_UID="1000" \ + MY_GID="1000" \ + PHP_VERSION="8.2" + + +### +### User/Group +### +RUN set -eux \ + && groupadd -g ${MY_GID} -r ${MY_GROUP} \ + && useradd -u ${MY_UID} -m -s /bin/bash -g ${MY_GROUP} ${MY_USER} + + +### +### Upgrade (install ps) +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests procps \ + && rm -rf /var/lib/apt/lists/* + + +### +### Configure +### +RUN set -eux \ + && rm -rf /usr/local/etc/php-fpm.d \ + && mkdir -p /usr/local/etc/php-fpm.d \ + && mkdir -p /var/lib/php/session \ + && mkdir -p /var/lib/php/wsdlcache \ + && chown -R devilbox:devilbox /var/lib/php/session \ + && chown -R devilbox:devilbox /var/lib/php/wsdlcache + + +### +### Copy files +### +COPY ./data/php-ini.d/php-8.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-8.2.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d /docker-entrypoint.d + + +### +### Verify +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /usr/local/sbin/php-fpm --test \ + \ + && PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + && PHP_ERROR="$( php -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + \ + && PHP_FPM_ERROR="$( php-fpm -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && PHP_FPM_ERROR="$( php-fpm -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && rm -f /usr/local/etc/php/php.ini + + +### +### Ports +### +EXPOSE 9000 + + +### +### Entrypoint +### +CMD ["/usr/local/sbin/php-fpm"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/base/data/php-fpm.conf/php-fpm-8.2.conf b/Dockerfiles/base/data/php-fpm.conf/php-fpm-8.2.conf new file mode 100644 index 0000000..b743989 --- /dev/null +++ b/Dockerfiles/base/data/php-fpm.conf/php-fpm-8.2.conf @@ -0,0 +1,134 @@ +; ################################################################################ +; #### +; #### The following settings can be overwritten by later includes +; #### +; ################################################################################ + + +; ############################################################ +; Timeouts +; ############################################################ + +[www] +; The timeout for serving a single request after which the worker process will be killed. +; This option should be used when the 'max_execution_time' ini option does not stop script +; execution for some reason. +request_terminate_timeout = 120s + + +; ############################################################ +; Logging +; ############################################################ + +[global] +error_log = /proc/self/fd/2 +log_level = notice + +[www] +; if we send this to /proc/self/fd/1, it never appears +access.log = /proc/self/fd/2 + + +; ############################################################ +; Backlog configuration +; ############################################################ + +[www] +; A maximum of backlog incoming connections will be queued for processing. +; If a connection request arrives with the queue full the client may receive an error with an +; indication of ECONNREFUSED, or, if the underlying protocol supports retransmission, +; the request may be ignored so that retries may succeed. + +; This should not be greater than `cat /proc/sys/net/core/somaxconn`, otherwise connections +; are silently truncated +listen.backlog = 1024 + + +; ############################################################ +; Worker configuration +; ############################################################ + +[www] +; static - the number of child processes is fixed (pm.max_children). +; +; dynamic - the number of child processes is set dynamically based on the following directives: +; pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. +; +; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where +; pm.start_servers are started when the service is started. +pm = ondemand + +; The maximum number of child processes to be created +pm.max_children = 50 + +; The number of child processes created on startup. Used only when pm is set to dynamic. +; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2. +pm.start_servers = 4 + +; The desired minimum number of idle server processes. +pm.min_spare_servers = 2 + +; The desired maximum number of idle server processes. +pm.max_spare_servers = 6 + +; The number of requests each child process should execute before respawning. +; This can be useful to work around memory leaks in 3rd party libraries. +; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. +; Default value: 0. +pm.max_requests = 500 + +; The number of seconds after which an idle process will be killed. Used only when pm is set to ondemand +pm.process_idle_timeout = 10s + + +; ############################################################ +; Include +; ############################################################ + + +[global] +include = /usr/local/etc/php-fpm.d/*.conf + + +; ################################################################################ +; #### +; #### The following settings overwrite any includes again +; #### +; ################################################################################ + + +; ############################################################ +; Required for Dockerization +; ############################################################ + +[global] +daemonize = no + +[www] +; Keep env variables set by docker +clear_env = no + +; Redirect worker stdout and stderr into main error log. If not set, stdout and +; stderr will be redirected to /dev/null according to FastCGI specs. +; Note: on highloaded environement, this can cause some delay in the page +; process time (several ms). +; Default Value: no +catch_workers_output = yes + + +; ############################################################ +; User and Group +; ############################################################ + +[www] +user = devilbox +group = devilbox + + +; ############################################################ +; Networking +; ############################################################ + +[www] +; Ensure to listen here +listen = 9000 diff --git a/Dockerfiles/base/data/php-ini.d/php-8.2.ini b/Dockerfiles/base/data/php-ini.d/php-8.2.ini new file mode 100644 index 0000000..8f1d34a --- /dev/null +++ b/Dockerfiles/base/data/php-ini.d/php-8.2.ini @@ -0,0 +1,48 @@ +; ############################################################ +; # Devilbox PHP defaults for 8.2-base +; ############################################################ + +; Each PHP flavour (base, mods, prod, work) might have its own php.ini. +; If none is present, the one from the previous flavour is inherited. + + +[PHP] + +; Memory +; Note: "memory_limit" should be larger than "post_max_size" +memory_limit = 512M + + +; Timeouts +max_execution_time = 120 +max_input_time = 120 + + +; Uploads +; Note: "post_max_size" should be greater than "upload_max_filesize" +post_max_size = 72M +upload_max_filesize = 64M +max_file_uploads = 20 + + +; Vars +variables_order = EGPCS +max_input_vars = 8000 +max_input_nesting_level = 64 + + +; Error reporting +; Note: error_log is dynamic and handled during start to set appropriate setting +error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED +xmlrpc_errors = Off +report_memleaks = On +display_errors = Off +display_startup_errors = Off +log_errors = On +html_errors = Off + + +; Xdebug settings +xdebug.mode = Off +xdebug.start_with_request = default +xdebug.client_port = 9000 diff --git a/Dockerfiles/mods/Dockerfile-8.2 b/Dockerfiles/mods/Dockerfile-8.2 new file mode 100644 index 0000000..9599769 --- /dev/null +++ b/Dockerfiles/mods/Dockerfile-8.2 @@ -0,0 +1,972 @@ +# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-mods.j2 instead. +FROM devilbox/php-fpm:8.2-base as builder + + +### +### Install +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests apt-utils \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests \ + alien \ + firebird-dev \ + freetds-dev \ + ghostscript \ + libaio-dev \ + libavif-dev \ + libbz2-dev \ + libc-client-dev \ + libcurl4-openssl-dev \ + libenchant-2-dev \ + libevent-dev \ + libfbclient2 \ + libfreetype6-dev \ + libgmp-dev \ + libib-util \ + libicu-dev \ + libjpeg-dev \ + libkrb5-dev \ + libldap2-dev \ + libmagickwand-dev \ + libmemcached-dev \ + libpcre3-dev \ + libpng-dev \ + libpq-dev \ + libpspell-dev \ + librabbitmq-dev \ + librdkafka-dev \ + libsasl2-dev \ + libsnmp-dev \ + libsodium-dev \ + libssl-dev \ + libtidy-dev \ + libvpx-dev \ + libwebp-dev \ + libwebp6 \ + libxml2-dev \ + libxpm-dev \ + libxslt-dev \ + libyaml-dev \ + libzip-dev \ + snmp \ + unixodbc-dev \ + uuid-dev \ + zlib1g-dev \ + ca-certificates \ + git + + +# Fix timezone (only required for testing to stop php -v and php-fpm -v from complaining to stderr) +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini + + +### +### Install and enable PHP modules +### +# Enable ffi if it exists +RUN set -eux \ + && if [ -f /usr/local/etc/php/conf.d/docker-php-ext-ffi.ini ]; then \ + echo "ffi.enable = 1" >> /usr/local/etc/php/conf.d/docker-php-ext-ffi.ini; \ + fi + +# -------------------- Installing PHP Extension: amqp -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Custom: Pecl command + && echo "/usr" | pecl install amqp \ + # Enabling + && docker-php-ext-enable amqp \ + && true + + +# -------------------- Installing PHP Extension: apcu -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install apcu \ + # Enabling + && docker-php-ext-enable apcu \ + && true + + +# -------------------- Installing PHP Extension: bcmath -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) bcmath \ + && true + + +# -------------------- Installing PHP Extension: bz2 -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) bz2 \ + && true + + +# -------------------- Installing PHP Extension: calendar -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) calendar \ + && true + + +# -------------------- Installing PHP Extension: dba -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) dba \ + && true + + +# -------------------- Installing PHP Extension: enchant -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) enchant \ + && true + + +# -------------------- Installing PHP Extension: exif -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) exif \ + && true + + +# -------------------- Installing PHP Extension: gd -------------------- +RUN set -eux \ + # Generic pre-command + && ln -s /usr/lib/x86_64-linux-gnu/libXpm.* /usr/lib/ \ + # Installation: Version specific + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --with-avif \ + # Installation + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gd \ + && true + + +# -------------------- Installing PHP Extension: gettext -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gettext \ + && true + + +# -------------------- Installing PHP Extension: gmp -------------------- +RUN set -eux \ + # Generic pre-command + && ln /usr/include/x86_64-linux-gnu/gmp.h /usr/include/ \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) gmp \ + && true + + +# -------------------- Installing PHP Extension: igbinary -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install igbinary \ + # Enabling + && docker-php-ext-enable igbinary \ + && true + + +# -------------------- Installing PHP Extension: imagick -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install imagick \ + # Enabling + && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ +&& sed -i'' 's|.* /usr/local/include/php/Zend/Optimizer/zend_dfg.h \ + # Installation: Version specific + # Type: Built-in extension + # Installation + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) opcache \ + && true + + +# -------------------- Installing PHP Extension: pcntl -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pcntl \ + && true + + +# -------------------- Installing PHP Extension: pdo_dblib -------------------- +RUN set -eux \ + # Generic pre-command + && ln -s /usr/lib/x86_64-linux-gnu/libsybdb.* /usr/lib/ \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pdo_dblib \ + && true + + +# -------------------- Installing PHP Extension: pdo_firebird -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pdo_firebird \ + && true + + +# -------------------- Installing PHP Extension: pdo_mysql -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure pdo_mysql --with-zlib-dir=/usr \ + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pdo_mysql \ + && true + + +# -------------------- Installing PHP Extension: pdo_oci -------------------- +RUN set -eux \ + # Generic pre-command + && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ +&& ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ +&& ORACLE_VERSION_FULL="$( echo "${ORACLE_HREF}" | grep -Eo 'basiclite-[-.0-9]+' | sed -e 's/basiclite-//g' -e 's/\.$//g' )" \ +\ +&& rpm --import http://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 \ +&& curl -o /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-basiclite-${ORACLE_VERSION_FULL}.x86_64.rpm \ + https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient${ORACLE_VERSION_MAJOR}-basiclite-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& curl -o /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-devel-${ORACLE_VERSION_FULL}.x86_64.rpm \ + https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/getPackage/oracle-instantclient${ORACLE_VERSION_MAJOR}-devel-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& alien -i /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-basiclite-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& alien -i /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-devel-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& rm -f /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-basiclite-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& rm -f /tmp/oracle-instantclient${ORACLE_VERSION_MAJOR}-devel-${ORACLE_VERSION_FULL}.x86_64.rpm \ +&& (ln -s /usr/lib/oracle/${ORACLE_VERSION_MAJOR}/client64/lib/*.so* /usr/lib/ || true) \ + \ + # Installation: Version specific + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/lib/oracle/${ORACLE_VERSION_MAJOR}/client64/lib/,${ORACLE_VERSION_MAJOR} \ + # Installation + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pdo_oci \ + && true + + +# -------------------- Installing PHP Extension: pdo_pgsql -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pdo_pgsql \ + && true + + +# -------------------- Installing PHP Extension: pdo_sqlsrv -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install pdo_sqlsrv \ + # Enabling + && docker-php-ext-enable pdo_sqlsrv \ + && true + + +# -------------------- Installing PHP Extension: pgsql -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pgsql \ + && true + + +# -------------------- Installing PHP Extension: psr -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install psr \ + # Enabling + && docker-php-ext-enable psr \ + && true + + +# -------------------- Installing PHP Extension: pspell -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) pspell \ + && true + + +# -------------------- Installing PHP Extension: redis -------------------- +RUN set -eux \ + # Installation: Version specific + # Type: GIT extension + && git clone https://github.com/phpredis/phpredis /tmp/redis \ + && cd /tmp/redis \ + # Custom: Branch + && git checkout $(git for-each-ref --format='%(refname)' refs/tags | grep -E 'tags/[.0-9]+$' | sed 's|.*tags/||g' | sort -V | tail -1) \ + # Custom: Install command + && REDIS_ARGS=""; \ +if [ -d "/usr/local/include/php/ext/igbinary" ]; then \ + REDIS_ARGS="${REDIS_ARGS} --enable-redis-igbinary"; \ +fi; \ +if [ -d "/usr/local/include/php/ext/msgpack" ]; then \ + REDIS_ARGS="${REDIS_ARGS} --enable-redis-msgpack"; \ +fi; \ +phpize \ +&& ./configure --enable-redis ${REDIS_ARGS} \ +&& sed -i'' 's/ops->hash_init(ctx);/ops->hash_init(ctx, NULL);/g' library.c \ +&& sed -i'' 's/ops->hash_init(ctx);/ops->hash_init(ctx, NULL);/g' redis_array_impl.c \ +&& make -j$(getconf _NPROCESSORS_ONLN) \ +&& make install \ + \ + # Enabling + && docker-php-ext-enable redis \ + && true + + +# -------------------- Installing PHP Extension: rdkafka -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install rdkafka \ + # Enabling + && docker-php-ext-enable rdkafka \ + && true + + +# -------------------- Installing PHP Extension: shmop -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) shmop \ + && true + + +# -------------------- Installing PHP Extension: snmp -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure snmp --with-openssl-dir \ + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) snmp \ + && true + + +# -------------------- Installing PHP Extension: soap -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure soap --with-libxml-dir=/usr \ + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) soap \ + && true + + +# -------------------- Installing PHP Extension: sockets -------------------- +RUN set -eux \ + # Version specific pre-command + && docker-php-ext-configure sockets \ +&& sed -i'' 's/.*ucred.*//g' /usr/src/php/ext/sockets/sendrecvmsg.c \ + \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) sockets \ + && true + + +# -------------------- Installing PHP Extension: sodium -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) sodium \ + && true + + +# -------------------- Installing PHP Extension: sqlsrv -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install sqlsrv \ + # Enabling + && docker-php-ext-enable sqlsrv \ + && true + + +# -------------------- Installing PHP Extension: sysvmsg -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) sysvmsg \ + && true + + +# -------------------- Installing PHP Extension: sysvsem -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) sysvsem \ + && true + + +# -------------------- Installing PHP Extension: sysvshm -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) sysvshm \ + && true + + +# -------------------- Installing PHP Extension: tidy -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) tidy \ + && true + + +# -------------------- Installing PHP Extension: uploadprogress -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install uploadprogress \ + # Enabling + && docker-php-ext-enable uploadprogress \ + && true + + +# -------------------- Installing PHP Extension: uuid -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install uuid \ + # Enabling + && docker-php-ext-enable uuid \ + && true + + +# -------------------- Installing PHP Extension: xsl -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) xsl \ + && true + + +# -------------------- Installing PHP Extension: xlswriter -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install xlswriter \ + # Enabling + && docker-php-ext-enable xlswriter \ + && true + + +# -------------------- Installing PHP Extension: yaml -------------------- +RUN set -eux \ + # Installation: Generic + # Type: PECL extension + # Default: Pecl command + && pecl install yaml \ + # Enabling + && docker-php-ext-enable yaml \ + && true + + +# -------------------- Installing PHP Extension: zip -------------------- +RUN set -eux \ + # Installation: Generic + # Type: Built-in extension + # Custom: configure command + && docker-php-ext-configure zip --with-zlib-dir=/usr --with-pcre-dir=/usr --with-libzip \ + && docker-php-ext-install -j$(getconf _NPROCESSORS_ONLN) zip \ + && true + + + + +# Fix php.ini settings for enabled extensions +RUN set -eux \ + && chmod +x "$(php -r 'echo ini_get("extension_dir");')"/* + +# Fix oracle dir for images that don't have oci installed +RUN set -eux \ + && mkdir -p /usr/lib/oracle/ + +# Shrink everything down +RUN set -eux \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + + +# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-mods.j2 instead. +FROM devilbox/php-fpm:8.2-base as final +MAINTAINER "cytopia" + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.2-mods" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-mods" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-mods" + + +### +### Copy artifacts from builder +### +ARG EXT_DIR +COPY --from=builder ${EXT_DIR}/ ${EXT_DIR}/ +COPY --from=builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ +COPY --from=builder /usr/local/bin/ /usr/local/bin/ +COPY --from=builder /usr/local/lib/ /usr/local/lib/ +COPY --from=builder /usr/lib/oracle/ /usr/lib/oracle/ + + +### +### Install +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests \ + ghostscript \ + libaio1 \ + libaspell15 \ + libavif9 \ + libc-client2007e \ + libenchant-2-2 \ + libfbclient2 \ + libffi7 \ + libfreetype6 \ + libicu67 \ + libjpeg62-turbo \ + libmagickwand-6.q16-6 \ + libmemcachedutil2 \ + libpng16-16 \ + libpq5 \ + librabbitmq4 \ + librdkafka1 \ + libsybdb5 \ + libtidy5deb1 \ + libvpx6 \ + libwebp-dev \ + libwebp6 \ + libxpm4 \ + libxslt1.1 \ + libyaml-0-2 \ + libzip4 \ + snmp \ + unixodbc \ + uuid \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* \ + \ + && update-ca-certificates + + +### +### Post Install +### +RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ +&& sed -i'' 's|.* /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /usr/local/sbin/php-fpm --test \ + \ + && PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + && PHP_ERROR="$( php -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + \ + && PHP_FPM_ERROR="$( php-fpm -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && PHP_FPM_ERROR="$( php-fpm -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && rm -f /usr/local/etc/php/php.ini \ + \ + && php -m | grep -oiE '^amqp$' \ + && php-fpm -m | grep -oiE '^amqp$' \ + && php -m | grep -oiE '^apcu$' \ + && php-fpm -m | grep -oiE '^apcu$' \ + && php -m | grep -oiE '^bcmath$' \ + && php-fpm -m | grep -oiE '^bcmath$' \ + && php -m | grep -oiE '^bz2$' \ + && php-fpm -m | grep -oiE '^bz2$' \ + && php -m | grep -oiE '^calendar$' \ + && php-fpm -m | grep -oiE '^calendar$' \ + && php -m | grep -oiE '^ctype$' \ + && php-fpm -m | grep -oiE '^ctype$' \ + && php -m | grep -oiE '^curl$' \ + && php-fpm -m | grep -oiE '^curl$' \ + && php -m | grep -oiE '^dba$' \ + && php-fpm -m | grep -oiE '^dba$' \ + && php -m | grep -oiE '^dom$' \ + && php-fpm -m | grep -oiE '^dom$' \ + && php -m | grep -oiE '^enchant$' \ + && php-fpm -m | grep -oiE '^enchant$' \ + && php -m | grep -oiE '^exif$' \ + && php-fpm -m | grep -oiE '^exif$' \ + && php -m | grep -oiE '^ffi$' \ + && php-fpm -m | grep -oiE '^ffi$' \ + && php -m | grep -oiE '^fileinfo$' \ + && php-fpm -m | grep -oiE '^fileinfo$' \ + && php -m | grep -oiE '^filter$' \ + && php-fpm -m | grep -oiE '^filter$' \ + && php -m | grep -oiE '^ftp$' \ + && php-fpm -m | grep -oiE '^ftp$' \ + && php -m | grep -oiE '^gd$' \ + && php-fpm -m | grep -oiE '^gd$' \ + && php -m | grep -oiE '^gettext$' \ + && php-fpm -m | grep -oiE '^gettext$' \ + && php -m | grep -oiE '^gmp$' \ + && php-fpm -m | grep -oiE '^gmp$' \ + && php -m | grep -oiE '^hash$' \ + && php-fpm -m | grep -oiE '^hash$' \ + && php -m | grep -oiE '^iconv$' \ + && php-fpm -m | grep -oiE '^iconv$' \ + && php -m | grep -oiE '^igbinary$' \ + && php-fpm -m | grep -oiE '^igbinary$' \ + && php -m | grep -oiE '^imagick$' \ + && php-fpm -m | grep -oiE '^imagick$' \ + && php -m | grep -oiE '^imap$' \ + && php-fpm -m | grep -oiE '^imap$' \ + && php -m | grep -oiE '^intl$' \ + && php-fpm -m | grep -oiE '^intl$' \ + && php -m | grep -oiE '^json$' \ + && php-fpm -m | grep -oiE '^json$' \ + && php -m | grep -oiE '^ldap$' \ + && php-fpm -m | grep -oiE '^ldap$' \ + && php -m | grep -oiE '^libxml$' \ + && php-fpm -m | grep -oiE '^libxml$' \ + && php -m | grep -oiE '^mbstring$' \ + && php-fpm -m | grep -oiE '^mbstring$' \ + && php -m | grep -oiE '^msgpack$' \ + && php-fpm -m | grep -oiE '^msgpack$' \ + && php -m | grep -oiE '^memcache$' \ + && php-fpm -m | grep -oiE '^memcache$' \ + && php -m | grep -oiE '^memcached$' \ + && php-fpm -m | grep -oiE '^memcached$' \ + && php -m | grep -oiE '^mongodb$' \ + && php-fpm -m | grep -oiE '^mongodb$' \ + && php -m | grep -oiE '^mysqli$' \ + && php-fpm -m | grep -oiE '^mysqli$' \ + && php -m | grep -oiE '^mysqlnd$' \ + && php-fpm -m | grep -oiE '^mysqlnd$' \ + && php -m | grep -oiE '^oauth$' \ + && php-fpm -m | grep -oiE '^oauth$' \ + && php -m | grep -oiE '^oci8$' \ + && php-fpm -m | grep -oiE '^oci8$' \ + && php -m | grep -oiE '^Zend Opcache$' \ + && php-fpm -m | grep -oiE '^Zend Opcache$' \ + && php -m | grep -oiE '^openssl$' \ + && php-fpm -m | grep -oiE '^openssl$' \ + && php -m | grep -oiE '^pcntl$' \ + && php-fpm -m | grep -oiE '^pcntl$' \ + && php -m | grep -oiE '^pcre$' \ + && php-fpm -m | grep -oiE '^pcre$' \ + && php -m | grep -oiE '^pdo$' \ + && php-fpm -m | grep -oiE '^pdo$' \ + && php -m | grep -oiE '^pdo_dblib$' \ + && php-fpm -m | grep -oiE '^pdo_dblib$' \ + && php -m | grep -oiE '^pdo_firebird$' \ + && php-fpm -m | grep -oiE '^pdo_firebird$' \ + && php -m | grep -oiE '^pdo_mysql$' \ + && php-fpm -m | grep -oiE '^pdo_mysql$' \ + && php -m | grep -oiE '^pdo_oci$' \ + && php-fpm -m | grep -oiE '^pdo_oci$' \ + && php -m | grep -oiE '^pdo_pgsql$' \ + && php-fpm -m | grep -oiE '^pdo_pgsql$' \ + && php -m | grep -oiE '^pdo_sqlite$' \ + && php-fpm -m | grep -oiE '^pdo_sqlite$' \ + && php -m | grep -oiE '^pdo_sqlsrv$' \ + && php-fpm -m | grep -oiE '^pdo_sqlsrv$' \ + && php -m | grep -oiE '^pgsql$' \ + && php-fpm -m | grep -oiE '^pgsql$' \ + && php -m | grep -oiE '^psr$' \ + && php-fpm -m | grep -oiE '^psr$' \ + && php -m | grep -oiE '^phar$' \ + && php-fpm -m | grep -oiE '^phar$' \ + && php -m | grep -oiE '^posix$' \ + && php-fpm -m | grep -oiE '^posix$' \ + && php -m | grep -oiE '^pspell$' \ + && php-fpm -m | grep -oiE '^pspell$' \ + && php -m | grep -oiE '^readline$' \ + && php -m | grep -oiE '^redis$' \ + && php-fpm -m | grep -oiE '^redis$' \ + && php -m | grep -oiE '^reflection$' \ + && php-fpm -m | grep -oiE '^reflection$' \ + && php -m | grep -oiE '^rdkafka$' \ + && php-fpm -m | grep -oiE '^rdkafka$' \ + && php -m | grep -oiE '^session$' \ + && php-fpm -m | grep -oiE '^session$' \ + && php -m | grep -oiE '^shmop$' \ + && php-fpm -m | grep -oiE '^shmop$' \ + && php -m | grep -oiE '^simplexml$' \ + && php-fpm -m | grep -oiE '^simplexml$' \ + && php -m | grep -oiE '^snmp$' \ + && php-fpm -m | grep -oiE '^snmp$' \ + && php -m | grep -oiE '^soap$' \ + && php-fpm -m | grep -oiE '^soap$' \ + && php -m | grep -oiE '^sockets$' \ + && php-fpm -m | grep -oiE '^sockets$' \ + && php -m | grep -oiE '^sodium$' \ + && php-fpm -m | grep -oiE '^sodium$' \ + && php -m | grep -oiE '^spl$' \ + && php-fpm -m | grep -oiE '^spl$' \ + && php -m | grep -oiE '^sqlsrv$' \ + && php-fpm -m | grep -oiE '^sqlsrv$' \ + && php -m | grep -oiE '^sysvmsg$' \ + && php-fpm -m | grep -oiE '^sysvmsg$' \ + && php -m | grep -oiE '^sysvsem$' \ + && php-fpm -m | grep -oiE '^sysvsem$' \ + && php -m | grep -oiE '^sysvshm$' \ + && php-fpm -m | grep -oiE '^sysvshm$' \ + && php -m | grep -oiE '^tidy$' \ + && php-fpm -m | grep -oiE '^tidy$' \ + && php -m | grep -oiE '^tokenizer$' \ + && php-fpm -m | grep -oiE '^tokenizer$' \ + && php -m | grep -oiE '^uploadprogress$' \ + && php-fpm -m | grep -oiE '^uploadprogress$' \ + && php -m | grep -oiE '^uuid$' \ + && php-fpm -m | grep -oiE '^uuid$' \ + && php -m | grep -oiE '^xml$' \ + && php-fpm -m | grep -oiE '^xml$' \ + && php -m | grep -oiE '^xmlreader$' \ + && php-fpm -m | grep -oiE '^xmlreader$' \ + && php -m | grep -oiE '^xmlwriter$' \ + && php-fpm -m | grep -oiE '^xmlwriter$' \ + && php -m | grep -oiE '^xsl$' \ + && php-fpm -m | grep -oiE '^xsl$' \ + && php -m | grep -oiE '^xlswriter$' \ + && php-fpm -m | grep -oiE '^xlswriter$' \ + && php -m | grep -oiE '^yaml$' \ + && php-fpm -m | grep -oiE '^yaml$' \ + && php -m | grep -oiE '^zip$' \ + && php-fpm -m | grep -oiE '^zip$' \ + && true + + +# Deactive PSR and Phalcon: +# https://github.com/devilbox/docker-php-fpm/issues/201 +RUN set -eux \ + && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ + && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ + + +### +### Ports +### +EXPOSE 9000 + + +### +### Entrypoint +### +CMD ["/usr/local/sbin/php-fpm"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/prod/Dockerfile-8.2 b/Dockerfiles/prod/Dockerfile-8.2 new file mode 100644 index 0000000..a3f5b3d --- /dev/null +++ b/Dockerfiles/prod/Dockerfile-8.2 @@ -0,0 +1,99 @@ +# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-prod.j2 instead. +FROM devilbox/php-fpm:8.2-mods +MAINTAINER "cytopia" + + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.2-prod" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-prod" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-prod" + + +### +### Install +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests apt-utils \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests \ + locales-all \ + postfix \ + postfix-pcre \ + cron \ + rsyslog \ + socat \ + supervisor \ + && DEBIAN_FRONTEND=noninteractive apt-get purge -q -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \ + && rm -rf /var/lib/apt/lists/* \ + \ + && rm -rf /etc/supervisor* \ + && mkdir -p /var/log/supervisor \ + && mkdir -p /etc/supervisor/conf.d \ + && mkdir -p /etc/supervisor/custom.d \ + && chown devilbox:devilbox /etc/supervisor/custom.d \ + \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Verify +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /usr/local/sbin/php-fpm --test \ + \ + && PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + && PHP_ERROR="$( php -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + \ + && PHP_FPM_ERROR="$( php-fpm -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && PHP_FPM_ERROR="$( php-fpm -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && rm -f /usr/local/etc/php/php.ini + + +### +### Copy files +### +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/postfix.sh /usr/local/sbin/postfix.sh +COPY ./data/supervisord.conf /etc/supervisor/supervisord.conf + + +### +### Volumes +### +VOLUME /var/log/php +VOLUME /var/mail + + +### +### Ports +### +EXPOSE 9000 + + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/work/Dockerfile-8.2 b/Dockerfiles/work/Dockerfile-8.2 new file mode 100644 index 0000000..92af7b8 --- /dev/null +++ b/Dockerfiles/work/Dockerfile-8.2 @@ -0,0 +1,587 @@ +# Auto-generated via Ansible: edit build/ansible/DOCKERFILES/Dockerfile-work.j2 instead. +FROM devilbox/php-fpm:8.2-prod +MAINTAINER "cytopia" + + +### +### Labels +### +# https://github.com/opencontainers/image-spec/blob/master/annotations.md +#LABEL "org.opencontainers.image.created"="" +#LABEL "org.opencontainers.image.version"="" +#LABEL "org.opencontainers.image.revision"="" +LABEL "maintainer"="cytopia " +LABEL "org.opencontainers.image.authors"="cytopia " +LABEL "org.opencontainers.image.url"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.documentation"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.source"="https://github.com/devilbox/docker-php-fpm" +LABEL "org.opencontainers.image.vendor"="devilbox" +LABEL "org.opencontainers.image.licenses"="MIT" +LABEL "org.opencontainers.image.ref.name"="8.2-work" +LABEL "org.opencontainers.image.title"="PHP-FPM 8.2-work" +LABEL "org.opencontainers.image.description"="PHP-FPM 8.2-work" + + +### +### Re-activate modules which have been deactivated in mods. +### NOTE: They will be removed at the very bottom +### +RUN set -eux \ + && if find /usr/local/lib/php/extensions/ -name phalcon.so | grep phalcon; then \ + echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini; \ + fi \ + && if find /usr/local/lib/php/extensions/ -name psr.so | grep psr; then \ + echo "extension=psr.so" > /usr/local/etc/php/conf.d/docker-php-ext-psr.ini; \ + fi + + +### +### Envs +### +ENV BASH_PROFILE=".bashrc" + + +### +### Install Tools +### +RUN set -eux \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests apt-utils \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests \ + apt-transport-https \ + ca-certificates \ + curl \ + dirmngr \ + gnupg \ + \ + && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \ + && echo "deb http://ftp.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/backports.list \ + && curl -sS -L --fail "https://packages.blackfire.io/gpg.key" | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv A1715D88E1DF1F24 \ + && echo "deb http://ppa.launchpad.net/git-core/ppa/ubuntu artful main" > /etc/apt/sources.list.d/git.list \ + && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 \ + && echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" > /etc/apt/sources.list.d/mongo.list \ + && curl -sS -k -L --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgsql.list \ + && curl -sS -k -L --fail https://dl.yarnpkg.com/debian/pubkey.gpg | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \ + && echo "deb http://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + \ + && DEBIAN_FRONTEND=noninteractive apt-get update -q \ + && DEBIAN_FRONTEND=noninteractive apt-get install -q -y --no-install-recommends --no-install-suggests \ + ack-grep \ + aspell \ + autoconf \ + automake \ + bash-completion \ + binutils \ + blackfire-agent \ + build-essential \ + bzip2 \ + certbot \ + coreutils \ + dnsutils \ + dos2unix \ + file \ + gawk \ + gcc \ + git \ + git-flow \ + git-svn \ + ghostscript \ + graphviz \ + gsfonts \ + hostname \ + htop \ + imagemagick \ + iputils-ping \ + jq \ + less \ + libc-dev \ + libffi-dev \ + libssl-dev \ + libyaml-dev \ + locales \ + make \ + mongodb-org-shell \ + mongodb-org-tools \ + moreutils \ + mariadb-client \ + mupdf \ + mupdf-tools \ + nano \ + net-tools \ + netcat \ + openssh-client \ + patch \ + patchelf \ + postgresql-client \ + redis-tools \ + rsync \ + rubygems \ + ruby-dev \ + shellcheck \ + silversearcher-ag \ + sqlite3 \ + subversion \ + sudo \ + tig \ + tree \ + unzip \ + vim \ + w3m \ + wget \ + whois \ + xz-utils \ + yarn \ + zip \ + zlib1g-dev \ + zsh \ + && DEBIAN_FRONTEND=noninteractive apt-get purge -q -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \ + && rm -rf /var/lib/apt/lists/* \ + \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Install custom software +### +RUN set -eux \ +# -------------------- composer -------------------- + && curl -sS -L --fail https://getcomposer.org/composer-1.phar > /usr/local/bin/composer-1 \ +&& curl -sS -L --fail https://getcomposer.org/composer-2.phar > /usr/local/bin/composer-2 \ +&& chmod +x /usr/local/bin/composer-1 \ +&& chmod +x /usr/local/bin/composer-2 \ +&& ln -sf /usr/local/bin/composer-2 /usr/local/bin/composer \ + \ + \ +# -------------------- pip -------------------- + && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ +&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ + libpython3-dev \ + python3-distutils \ +&& DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ +&& rm -rf /var/lib/apt/lists/* \ +\ +&& curl -sS -L --fail https://bootstrap.pypa.io/get-pip.py | python3 \ + \ + \ +# -------------------- nvm -------------------- + && git clone https://github.com/creationix/nvm /opt/nvm \ +&& cd /opt/nvm \ +&& git checkout "$(git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1))" \ +\ +&& { \ + echo 'export NVM_DIR="/opt/nvm"'; \ + echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \ + echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \ +} >> /home/devilbox/.bashrc \ +\ +&& chown -R devilbox:devilbox /opt/nvm \ + \ + && su -c '. /opt/nvm/nvm.sh; nvm install node' devilbox \ +&& su -c '. /opt/nvm/nvm.sh; nvm install --lts' devilbox \ +&& su -c '. /opt/nvm/nvm.sh; nvm use node' devilbox \ + \ + \ +# -------------------- awesomeci -------------------- + && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \ +&& cd /usr/local/src/awesome-ci \ +&& git checkout $(git describe --abbrev=0 --tags) \ +&& ./configure --prefix=/usr/local \ +&& make install \ +&& cd / \ +&& rm -rf /usr/local/src/awesome-ci \ + \ + \ +# -------------------- deployer -------------------- + && curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep \ + && chmod +x /usr/local/bin/dep \ + \ +# -------------------- gitflow -------------------- + && git clone git://github.com/petervanderdoes/gitflow.git /tmp/gitflow \ +&& cd /tmp/gitflow \ +&& make install \ +&& cd / && rm -rf /tmp/gitflow \ + \ + \ +# -------------------- homebrew -------------------- + && git clone https://github.com/Homebrew/brew.git /usr/local/src/brew \ +&& chown -R ${MY_USER}:${MY_GROUP} /usr/local/src/brew \ +&& v="${BASH_PROFILE}" su ${MY_USER} -c -p \ +'echo "PATH=/usr/local/src/brew/bin:/usr/local/src/brew/sbin:/usr/bin:/usr/sbin:/bin:/sbin" >> /home/devilbox/${v}' \ +&& v="${BASH_PROFILE}" su ${MY_USER} -c -p \ +'echo "export MANPATH=/usr/local/src/brew/manpages:${MANPATH}" >> /home/devilbox/${v}' \ +&& v="${BASH_PROFILE}" su ${MY_USER} -c -p \ +'echo "export INFOPATH=/usr/local/src/brew/manpages:${INFOPATH}" >> /home/devilbox/${v}' \ +&& su - ${MY_USER} -c '/usr/local/src/brew/bin/brew config' \ + \ + \ +# -------------------- linkcheck -------------------- + && curl -sS -L --fail https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \ +&& chmod +x /usr/local/bin/linkcheck \ + \ + \ +# -------------------- mhsendmail -------------------- + && curl -sS -L --fail https://github.com/devilbox/mhsendmail/releases/download/v0.3.0/mhsendmail_linux_amd64 > mhsendmail_linux_amd64 \ +&& chmod +x mhsendmail_linux_amd64 \ +&& mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail \ + \ + \ +# -------------------- mysqldumpsecure -------------------- + && git clone https://github.com/cytopia/mysqldump-secure.git /usr/local/src/mysqldump-secure \ +&& cd /usr/local/src/mysqldump-secure \ +&& git checkout $(git describe --abbrev=0 --tags) \ +&& cp /usr/local/src/mysqldump-secure/bin/mysqldump-secure /usr/local/bin \ +&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.conf /etc \ +&& cp /usr/local/src/mysqldump-secure/etc/mysqldump-secure.cnf /etc \ +&& touch /var/log/mysqldump-secure.log \ +&& chown ${MY_USER}:${MY_GROUP} /etc/mysqldump-secure.* \ +&& chown ${MY_USER}:${MY_GROUP} /var/log/mysqldump-secure.log \ +&& chmod 0400 /etc/mysqldump-secure.conf \ +&& chmod 0400 /etc/mysqldump-secure.cnf \ +&& chmod 0644 /var/log/mysqldump-secure.log \ +&& sed -i'' 's/^COMPRESS_ARG=.*/COMPRESS_ARG="-9 -c"/g' /etc/mysqldump-secure.conf \ +&& sed -i'' 's/^DUMP_DIR=.*/DUMP_DIR="\/shared\/backups\/mysql"/g' /etc/mysqldump-secure.conf \ +&& sed -i'' 's/^DUMP_DIR_CHMOD=.*/DUMP_DIR_CHMOD="0755"/g' /etc/mysqldump-secure.conf \ +&& sed -i'' 's/^DUMP_FILE_CHMOD=.*/DUMP_FILE_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ +&& sed -i'' 's/^LOG_CHMOD=.*/LOG_CHMOD="0644"/g' /etc/mysqldump-secure.conf \ +&& sed -i'' 's/^NAGIOS_LOG=.*/NAGIOS_LOG=0/g' /etc/mysqldump-secure.conf \ +&& cd / \ +&& rm -rf /usr/local/src/mysqldump-secure \ + \ + \ +# -------------------- phpcs -------------------- + && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \ +&& chmod +x /usr/local/bin/phpcs \ + \ + \ +# -------------------- phpcbf -------------------- + && curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ +&& chmod +x /usr/local/bin/phpcbf \ + \ + \ +# -------------------- phpmd -------------------- + && curl -sS -k -L --fail https://phpmd.org/static/latest/phpmd.phar > phpmd.phar \ +&& mv phpmd.phar /usr/local/bin/phpmd \ +&& chmod +x /usr/local/bin/phpmd \ + \ + \ +# -------------------- symfony -------------------- + && SYMFONY_VERSION="$( curl -sS -L --fail https://get.symfony.com/cli/LATEST )" \ + && curl -sS -L --fail "https://github.com/symfony/cli/releases/download/v${SYMFONY_VERSION}/symfony_linux_amd64" > /usr/local/bin/symfony \ + && chmod +x /usr/local/bin/symfony \ + \ +# -------------------- wkhtmltopdf -------------------- + && VERSION="$( curl -sSL -L --fail https://github.com/wkhtmltopdf/wkhtmltopdf/releases | grep -Eo '/wkhtmltopdf/.+stretch_amd64\.deb' | head -1 )" \ + && DEBIAN_FRONTEND=noninteractive apt-get update -qq \ +&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ + libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ +&& curl -sS -L --fail -o /tmp/wkhtmltopdf.deb https://github.com/${VERSION} \ +&& dpkg -i /tmp/wkhtmltopdf.deb \ +&& rm -f /tmp/wkhtmltopdf.deb \ + \ + && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \ +&& rm -rf /var/lib/apt/lists/* \ + \ + \ +# -------------------- wpcli -------------------- + && curl -sS -L --fail https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -L -o /usr/local/bin/wp \ + && chmod +x /usr/local/bin/wp \ + \ +# -------------------- cleanup -------------------- + && rm -rf /home/${MY_USER}/.*json \ +&& rm -rf /home/${MY_USER}/.cache \ +&& rm -rf /home/${MY_USER}/.composer \ +&& rm -rf /home/${MY_USER}/.config \ +&& rm -rf /home/${MY_USER}/.drush \ +&& rm -rf /home/${MY_USER}/.subversion \ +&& rm -rf /home/${MY_USER}/.v8* \ +\ +&& rm -rf /root/.*json \ +&& rm -rf /root/.cache \ +&& rm -rf /root/.composer \ +&& rm -rf /root/.config \ +&& rm -rf /root/.drush \ +&& rm -rf /root/.subversion \ +&& rm -rf /root/.v8* \ +\ +&& rm -rf /tmp/* \ +&& (rm -rf /tmp/.* || true) \ + \ + \ + \ + && (rm -rf /root/.gem || true ) \ + && (rm -rf /root/.cache || true) \ + && (rm -rf /root/.composer || true) \ + && (rm -rf /root/.config || true) \ + && (rm -rf /root/.npm || true) \ + \ + && (rm -rf /home/devilbox/.cache || true) \ + && (rm -rf /home/devilbox/.composer || true) \ + && (rm -rf /home/devilbox/.config || true) \ + && (rm -rf /home/devilbox/.npm || true) \ + \ + && (rm -rf /usr/local/src/composer/cache/* || true) \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) + + +### +### Install Composer (PHP) +### +RUN set -eux \ + \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) \ + \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Install npm (Node) +### +RUN set -eux \ +# -------------------- angular_cli -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @angular/cli' devilbox \ + \ +# -------------------- eslint -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force eslint' devilbox \ + \ +# -------------------- grunt -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt' devilbox \ + \ +# -------------------- grunt_cli -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force grunt-cli' devilbox \ + \ +# -------------------- gulp -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force gulp' devilbox \ + \ +# -------------------- jsonlint -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force jsonlint' devilbox \ + \ +# -------------------- pm2 -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force pm2' devilbox \ + \ +# -------------------- mdlint -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force mdlint' devilbox \ + \ +# -------------------- sass -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force sass' devilbox \ + \ +# -------------------- stylelint -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force stylelint' devilbox \ + \ +# -------------------- vue_cli -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli' devilbox \ + \ +# -------------------- vue_cli_service_global -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force @vue/cli-service-global' devilbox \ + \ +# -------------------- webpack -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack' devilbox \ + \ +# -------------------- webpack_cli -------------------- + && su -c '. /opt/nvm/nvm.sh; npm install -g --force webpack-cli' devilbox \ + \ + \ + && ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \ + \ + && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \ + && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox \ + && rm -rf /home/devilbox/.npm \ + && rm -rf /home/devilbox/.cache \ + && rm -rf /home/devilbox/.config \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) \ + \ + && (find /opt/nvm -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Install gem (Ruby) +### +RUN set -eux \ +# -------------------- mixlib_config -------------------- + && gem install mixlib-config -v 2.2.4 \ + \ +# -------------------- rb_inotify -------------------- + && gem install rb-inotify -v 0.9.10 \ + \ +# -------------------- mdl -------------------- + && gem install mdl -v 0.5.0 \ + \ + \ + && rm -rf /root/.gem \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) \ + \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Install pip (Python) packages +### +RUN set -eux \ +# -------------------- ansible -------------------- + && pip install --no-cache-dir --force-reinstall ansible==3.4.0 || true \ + \ +# -------------------- yamllint -------------------- + && pip install --no-cache-dir --force-reinstall yamllint || true \ + \ +# -------------------- yq -------------------- + && pip install --no-cache-dir --force-reinstall yq || true \ + \ + \ + && rm -rf /root/.cache/pip \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) \ + \ + && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \ + && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) + + +### +### Configure Bash +### +RUN \ + { \ + echo 'PATH="${PATH}:/usr/local/bin:/usr/local/sbin"'; \ + echo 'PATH="${HOME}/.yarn/bin:${PATH}"'; \ + echo 'PATH="${HOME}/.composer/vendor/bin:${PATH}"'; \ + echo 'PATH="/opt/nvm/versions/node/$(nvm version default)/bin:${PATH}"'; \ + echo "export PATH"; \ + echo ". /etc/bash-devilbox"; \ + echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \ + echo " for f in /etc/bashrc-devilbox.d/*.sh ; do"; \ + echo " if [ -r \"\${f}\" ]; then"; \ + echo " . \"\${f}\""; \ + echo " fi"; \ + echo " done"; \ + echo " unset f"; \ + echo "fi"; \ + } | tee -a /home/${MY_USER}/${BASH_PROFILE} /root/${BASH_PROFILE} \ + && chown ${MY_USER}:${MY_GROUP} /home/${MY_USER}/${BASH_PROFILE} + + +### +### Verify +### +RUN set -eux \ + && echo "date.timezone=UTC" > /usr/local/etc/php/php.ini \ + && php -v | grep -oE 'PHP\s[.0-9]+' | grep -oE '[.0-9]+' | grep '^8.2' \ + && /usr/local/sbin/php-fpm --test \ + \ + && PHP_ERROR="$( php -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + && PHP_ERROR="$( php -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_ERROR}" ]; then echo "${PHP_ERROR}"; false; fi \ + \ + && PHP_FPM_ERROR="$( php-fpm -v 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && PHP_FPM_ERROR="$( php-fpm -i 2>&1 1>/dev/null )" \ + && if [ -n "${PHP_FPM_ERROR}" ]; then echo "${PHP_FPM_ERROR}"; false; fi \ + && rm -f /usr/local/etc/php/php.ini + +RUN set -eux \ +# -------------------- Software -------------------- + && composer --version 2>/dev/null | grep -E 'version\s*[0-9][.0-9]+' \ + && su -c '. /opt/nvm/nvm.sh; nvm --version' devilbox | grep -E '^[0-9][.0-9]+' \ + && regex-grep --version | grep -E '[0-9][.0-9]+' \ + && dep --version 2>/dev/null | grep -Ei 'deployer\s*(version\s*)?[0-9][.0-9]+' \ + && git-flow version | grep -E '[0-9][.0-9]+' \ + && linkcheck --version | grep -E '^linkcheck\sv[0-9][.0-9]+' \ + && mysqldump-secure --version | grep -E 'Version:\s*[0-9][.0-9]+' \ + && phpcs --version | grep -E 'version [0-9][.0-9]+' \ + && phpcbf --version | grep -E 'version [0-9][.0-9]+' \ + && phpmd --version | grep -E '^PHPMD [0-9][.0-9]+' \ + && symfony -V | grep -Ei 'version\s*.*v[0-9][.0-9]+' \ + && wkhtmltopdf --version | grep -E "^wkhtmltopdf [0-9][.0-9]+\s+\(.+patched.+\)" \ + && wp --allow-root --version | grep -E '[0-9][.0-9]+' \ + \ +# -------------------- Composer -------------------- + \ +# -------------------- PIP -------------------- + && ansible --version | grep -E '^ansible [0-9][.0-9]+$' \ + && yamllint --version 2>&1 | grep -E '[0-9][.0-9]+' \ + && yq --version 2>&1 | grep -E '^yq\s+[0-9][.0-9]+$' \ + \ +# -------------------- NPM -------------------- + && ng version 2>&1 | grep -iE 'Angular CLI:\s*[0-9][.0-9]+' \ + && eslint -v | grep -E '[0-9][.0-9]+' \ + && grunt --version | grep -E '[0-9][.0-9]+' \ + && gulp --version | grep -E '[0-9][.0-9]+' \ + && jsonlint --version | grep -E '[0-9][.0-9]+' \ + && pm2 --no-daemon --version | tail -1 | grep -E '[0-9][.0-9]+' \ + && mdlint --version | grep -E '[0-9][.0-9]+' \ + && sass --version | grep -E '[0-9][.0-9]+' \ + && stylelint --version | grep -E '[0-9][.0-9]+' \ + && vue --version | grep -E '[0-9][.0-9]+' \ + && webpack --version | grep -E '[0-9][.0-9]+' \ + \ +# -------------------- GEM -------------------- + && mdl --version | grep -E '[0-9][.0-9]+' \ + \ +# -------------------- Cleanup -------------------- + && rm -rf /home/devilbox/.cache/ \ + && rm -rf /home/devilbox/.config/ \ + && rm -rf /root/.ansible \ + && rm -rf /root/.console \ + && rm -rf /root/.composer \ + && rm -rf /root/.drush \ + && rm -rf /root/.pm2 \ + && rm -rf /tmp/* \ + && (rm -rf /tmp/.* || true) + + +# Deactive PSR and Phalcon: +# https://github.com/devilbox/docker-php-fpm/issues/201 +RUN set -eux \ + && rm -f /usr/local/etc/php/conf.d/docker-php-ext-phalcon.ini || true \ + && rm -f /usr/local/etc/php/conf.d/docker-php-ext-psr.ini || true \ + + +### +### Copy files +### +COPY ./data/php-ini.d/php-8.2.ini /usr/local/etc/php/conf.d/xxx-devilbox-default-php.ini +COPY ./data/php-fpm.conf/php-fpm-8.2.conf /usr/local/etc/php-fpm.conf + +COPY ./data/docker-entrypoint.sh /docker-entrypoint.sh +COPY ./data/docker-entrypoint.d/*.sh /docker-entrypoint.d/ +COPY ./data/bash-devilbox /etc/bash-devilbox +COPY ./data/sudo-devilbox /etc/sudoers.d/devilbox + + +### +### Volumes +### +VOLUME /shared/backups +VOLUME /var/log/php +VOLUME /var/mail + + +### +### Ports +### +EXPOSE 9000 + + +### +### Where to start inside the container +### +WORKDIR /shared/httpd + + +### +### Entrypoint +### +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"] +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.2.conf b/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.2.conf new file mode 100644 index 0000000..b743989 --- /dev/null +++ b/Dockerfiles/work/data/php-fpm.conf/php-fpm-8.2.conf @@ -0,0 +1,134 @@ +; ################################################################################ +; #### +; #### The following settings can be overwritten by later includes +; #### +; ################################################################################ + + +; ############################################################ +; Timeouts +; ############################################################ + +[www] +; The timeout for serving a single request after which the worker process will be killed. +; This option should be used when the 'max_execution_time' ini option does not stop script +; execution for some reason. +request_terminate_timeout = 120s + + +; ############################################################ +; Logging +; ############################################################ + +[global] +error_log = /proc/self/fd/2 +log_level = notice + +[www] +; if we send this to /proc/self/fd/1, it never appears +access.log = /proc/self/fd/2 + + +; ############################################################ +; Backlog configuration +; ############################################################ + +[www] +; A maximum of backlog incoming connections will be queued for processing. +; If a connection request arrives with the queue full the client may receive an error with an +; indication of ECONNREFUSED, or, if the underlying protocol supports retransmission, +; the request may be ignored so that retries may succeed. + +; This should not be greater than `cat /proc/sys/net/core/somaxconn`, otherwise connections +; are silently truncated +listen.backlog = 1024 + + +; ############################################################ +; Worker configuration +; ############################################################ + +[www] +; static - the number of child processes is fixed (pm.max_children). +; +; dynamic - the number of child processes is set dynamically based on the following directives: +; pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. +; +; ondemand - the processes spawn on demand (when requested, as opposed to dynamic, where +; pm.start_servers are started when the service is started. +pm = ondemand + +; The maximum number of child processes to be created +pm.max_children = 50 + +; The number of child processes created on startup. Used only when pm is set to dynamic. +; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2. +pm.start_servers = 4 + +; The desired minimum number of idle server processes. +pm.min_spare_servers = 2 + +; The desired maximum number of idle server processes. +pm.max_spare_servers = 6 + +; The number of requests each child process should execute before respawning. +; This can be useful to work around memory leaks in 3rd party libraries. +; For endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. +; Default value: 0. +pm.max_requests = 500 + +; The number of seconds after which an idle process will be killed. Used only when pm is set to ondemand +pm.process_idle_timeout = 10s + + +; ############################################################ +; Include +; ############################################################ + + +[global] +include = /usr/local/etc/php-fpm.d/*.conf + + +; ################################################################################ +; #### +; #### The following settings overwrite any includes again +; #### +; ################################################################################ + + +; ############################################################ +; Required for Dockerization +; ############################################################ + +[global] +daemonize = no + +[www] +; Keep env variables set by docker +clear_env = no + +; Redirect worker stdout and stderr into main error log. If not set, stdout and +; stderr will be redirected to /dev/null according to FastCGI specs. +; Note: on highloaded environement, this can cause some delay in the page +; process time (several ms). +; Default Value: no +catch_workers_output = yes + + +; ############################################################ +; User and Group +; ############################################################ + +[www] +user = devilbox +group = devilbox + + +; ############################################################ +; Networking +; ############################################################ + +[www] +; Ensure to listen here +listen = 9000 diff --git a/Dockerfiles/work/data/php-ini.d/php-8.2.ini b/Dockerfiles/work/data/php-ini.d/php-8.2.ini new file mode 100644 index 0000000..b9dc962 --- /dev/null +++ b/Dockerfiles/work/data/php-ini.d/php-8.2.ini @@ -0,0 +1,48 @@ +; ############################################################ +; # Devilbox PHP defaults for 8.2-work +; ############################################################ + +; Each PHP flavour (base, mods, prod, work) might have its own php.ini. +; If none is present, the one from the previous flavour is inherited. + + +[PHP] + +; Memory +; Note: "memory_limit" should be larger than "post_max_size" +memory_limit = 512M + + +; Timeouts +max_execution_time = 120 +max_input_time = 120 + + +; Uploads +; Note: "post_max_size" should be greater than "upload_max_filesize" +post_max_size = 72M +upload_max_filesize = 64M +max_file_uploads = 20 + + +; Vars +variables_order = EGPCS +max_input_vars = 8000 +max_input_nesting_level = 64 + + +; Error reporting +; Note: error_log is dynamic and handled during start to set appropriate setting +error_reporting = E_ALL | E_NOTICE | E_STRICT | E_DEPRECATED +xmlrpc_errors = Off +report_memleaks = On +display_errors = On +display_startup_errors = On +log_errors = On +html_errors = On + + +; Xdebug settings +xdebug.mode = Off +xdebug.start_with_request = default +xdebug.client_port = 9000 diff --git a/Makefile b/Makefile index 560f507..1e463c3 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,7 @@ help: @echo "--------------------------------------------------------------------------------" @echo @echo "VERSION One of '5.2', '5.3', '5.4', '5.5', '5.6', '7.0'," - @echo " '7.1', '7.2', '7.3', '7.4', '8.0', '8.1'." + @echo " '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2'." @echo " For gen-readme target it is optional and if not" @echo " specified, it will generate for all versions." @echo @@ -382,7 +382,9 @@ ifeq ($(VERSION),8.0) else ifeq ($(VERSION),8.1) else - @$(info VERSION can only be: '5.2', '5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0' or '8.1') +ifeq ($(VERSION),8.2) +else + @$(info VERSION can only be: '5.2', '5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1' or '8.2') @$(info ) @$(error Exiting) endif @@ -396,6 +398,7 @@ endif endif endif endif +endif endif @echo "Version $(VERSION) is valid" diff --git a/README.md b/README.md index 0af4822..2ae1db0 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Have a look at the following Devilbox base images for which no official versions * [PHP-FPM 7.4](https://github.com/devilbox/docker-php-fpm-7.4) * [PHP-FPM 8.0](https://github.com/devilbox/docker-php-fpm-8.0) * [PHP-FPM 8.1](https://github.com/devilbox/docker-php-fpm-8.1) +* [PHP-FPM 8.2](https://github.com/devilbox/docker-php-fpm-8.2) #### Documentation @@ -221,7 +222,7 @@ The following table shows a more complete overview about the offered Docker imag - base + base devilbox/php-fpm:5.2-base @@ -304,9 +305,16 @@ The following table shows a more complete overview about the offered Docker imag + + devilbox/php-fpm:8.2-base + + + + + - mods + mods devilbox/php-fpm:5.2-mods @@ -390,9 +398,16 @@ The following table shows a more complete overview about the offered Docker imag + + devilbox/php-fpm:8.2-mods + + + + + - prod + prod devilbox/php-fpm:5.2-prod @@ -476,9 +491,16 @@ The following table shows a more complete overview about the offered Docker imag + + devilbox/php-fpm:8.2-prod + + + + + - work + work devilbox/php-fpm:5.2-work @@ -562,6 +584,13 @@ The following table shows a more complete overview about the offered Docker imag + + devilbox/php-fpm:8.2-work + + + + + @@ -687,6 +716,11 @@ Check out this table to see which Docker image provides what PHP modules. Core, ctype, curl, date, dom, FFI, fileinfo, filter, ftp, hash, iconv, json, libxml, mbstring, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, Reflection, session, SimpleXML, sodium, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib amqp, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, exif, FFI, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, intl, json, ldap, libxml, mbstring, memcache, memcached, mongodb, msgpack, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, PDO_OCI, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, pspell, psr, rdkafka, readline, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, sodium, solr, SPL, sqlite3, sqlsrv, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, uuid, xdebug, xlswriter, xml, xmlreader, xmlwriter, xsl, yaml, Zend OPcache, zip, zlib + + 8.2 + Core, ctype, curl, date, dom, FFI, fileinfo, filter, ftp, hash, iconv, json, libxml, mbstring, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, Reflection, session, SimpleXML, sodium, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib + amqp, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, exif, FFI, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, intl, json, ldap, libxml, mbstring, memcache, memcached, mongodb, msgpack, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, PDO_OCI, pdo_pgsql, pdo_sqlite, pdo_sqlsrv, pgsql, Phar, posix, pspell, psr, rdkafka, readline, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, sodium, SPL, sqlite3, sqlsrv, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, uuid, xlswriter, xml, xmlreader, xmlwriter, xsl, yaml, Zend OPcache, zip, zlib + @@ -708,6 +742,7 @@ docker pull devilbox/php-fpm:7.3-base docker pull devilbox/php-fpm:7.4-base docker pull devilbox/php-fpm:8.0-base docker pull devilbox/php-fpm:8.1-base +docker pull devilbox/php-fpm:8.2-base ``` Generic PHP-FPM base image. Use it to derive your own php-fpm docker image from it and add more extensions, tools and injectables.

(Does not offer any environment variables except for `NEW_UID` and `NEW_GID`) @@ -726,6 +761,7 @@ docker pull devilbox/php-fpm:7.3-mods docker pull devilbox/php-fpm:7.4-mods docker pull devilbox/php-fpm:8.0-mods docker pull devilbox/php-fpm:8.1-mods +docker pull devilbox/php-fpm:8.2-mods ``` Generic PHP-FPM image with fully loaded extensions. Use it to derive your own php-fpm docker image from it and add more extensions, tools and injectables.

(Does not offer any environment variables except for `NEW_UID` and `NEW_GID`) @@ -744,6 +780,7 @@ docker pull devilbox/php-fpm:7.3-prod docker pull devilbox/php-fpm:7.4-prod docker pull devilbox/php-fpm:8.0-prod docker pull devilbox/php-fpm:8.1-prod +docker pull devilbox/php-fpm:8.2-prod ``` Devilbox production image. This Docker image comes with many injectables, port-forwardings, mail-catch-all and user/group rewriting. @@ -762,6 +799,7 @@ docker pull devilbox/php-fpm:7.3-work docker pull devilbox/php-fpm:7.4-work docker pull devilbox/php-fpm:8.0-work docker pull devilbox/php-fpm:8.1-work +docker pull devilbox/php-fpm:8.2-work ``` Devilbox development image. Same as prod, but comes with lots of locally installed tools to make development inside the container as convenient as possible. See [Integrated Development Environment](#integrated-development-environment) for more information about this. diff --git a/build/ansible/DOCKERFILES/Dockerfile-base.j2 b/build/ansible/DOCKERFILES/Dockerfile-base.j2 index 05dba7e..cac3610 100644 --- a/build/ansible/DOCKERFILES/Dockerfile-base.j2 +++ b/build/ansible/DOCKERFILES/Dockerfile-base.j2 @@ -7,6 +7,8 @@ FROM devilbox/php-fpm-5.3 FROM devilbox/php-fpm-8.0 {% elif php_version == 8.1 %} FROM devilbox/php-fpm-8.1 +{% elif php_version == 8.2 %} +FROM devilbox/php-fpm-8.2 {% else %} FROM php:{{ php_version }}-fpm {% endif %} diff --git a/build/ansible/DOCKERFILES/Dockerfile-work.j2 b/build/ansible/DOCKERFILES/Dockerfile-work.j2 index 0e0ec71..4f16573 100644 --- a/build/ansible/DOCKERFILES/Dockerfile-work.j2 +++ b/build/ansible/DOCKERFILES/Dockerfile-work.j2 @@ -121,7 +121,7 @@ RUN set -eux \ mongodb-org-shell \ mongodb-org-tools \ moreutils \ -{% if php_version in [7.1, 7.2, 7.3, 7.4, 8.0, 8.1] %} +{% if php_version in [7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] %} mariadb-client \ {% else %} mysql-client \ diff --git a/build/ansible/group_vars/all/all-ansible.yml b/build/ansible/group_vars/all/all-ansible.yml index 0c6fb87..6ab6f73 100644 --- a/build/ansible/group_vars/all/all-ansible.yml +++ b/build/ansible/group_vars/all/all-ansible.yml @@ -34,6 +34,7 @@ php_all_versions: - 7.4 - 8.0 - 8.1 + - 8.2 # ------------------------------------------------------------------------------------------------- diff --git a/build/ansible/group_vars/all/mods.yml b/build/ansible/group_vars/all/mods.yml index a3d8e0d..2fce56a 100644 --- a/build/ansible/group_vars/all/mods.yml +++ b/build/ansible/group_vars/all/mods.yml @@ -188,7 +188,7 @@ extensions_available: all: type: builtin blackfire: - disabled: [5.2, 5.3, 5.4, 5.5, 8.1] + disabled: [5.2, 5.3, 5.4, 5.5, 8.1, 8.2] all: type: custom command: | @@ -253,14 +253,14 @@ extensions_available: all: type: builtin ffi: - already_avail: [8.0, 8.1] + already_avail: [8.0, 8.1, 8.2] disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3] all: type: builtin build_dep: [libffi-dev] run_dep: [libffi7] fileinfo: - already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] 5.2: type: pecl build_dep: [libmagic-dev] @@ -269,7 +269,7 @@ extensions_available: filter: already_avail: "{{ php_all_versions }}" # Available by default ftp: - already_avail: [5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] all: type: builtin configure: --with-openssl-dir @@ -335,6 +335,11 @@ extensions_available: configure: --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --with-avif build_dep: [libpng-dev, libjpeg-dev, libxpm-dev, libvpx-dev, zlib1g-dev, libfreetype6-dev, libwebp-dev, libavif-dev] run_dep: [libpng16-16, libjpeg62-turbo, libxpm4, libvpx6, libfreetype6, libwebp6, libavif9] + 8.2: + type: builtin + configure: --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype --with-avif + build_dep: [libpng-dev, libjpeg-dev, libxpm-dev, libvpx-dev, zlib1g-dev, libfreetype6-dev, libwebp-dev, libavif-dev] + run_dep: [libpng16-16, libjpeg62-turbo, libxpm4, libvpx6, libfreetype6, libwebp6, libavif9] all: type: builtin pre: ln -s /usr/lib/x86_64-linux-gnu/libXpm.* /usr/lib/ @@ -410,7 +415,7 @@ extensions_available: build_dep: [libc-client-dev, libkrb5-dev, libcurl4-openssl-dev] run_dep: [libc-client2007e] interbase: - disabled: [7.4, 8.0, 8.1] + disabled: [7.4, 8.0, 8.1, 8.2] all: type: builtin build_dep: [libfbclient2, libib-util, firebird-dev] @@ -445,7 +450,7 @@ extensions_available: build_dep: [libicu-dev] run_dep: [libicu67] ioncube: - disabled: [8.0, 8.1] + disabled: [8.0, 8.1, 8.2] all: type: custom command: | @@ -469,13 +474,13 @@ extensions_available: libxml: already_avail: "{{ php_all_versions }}" # Available by default mbstring: - already_avail: [5.2, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.2, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] all: type: builtin mcrypt: # mcrypt 1.0.4 requires PHP 8.1.0 or older # version >= 7.2.0, version <= 8.1.0, excluded versions: 8.1.0 - disabled: [8.1] + disabled: [8.1, 8.2] 5.2: type: builtin 5.3: @@ -580,12 +585,24 @@ extensions_available: && ./configure --enable-memcached \ && make -j$(getconf _NPROCESSORS_ONLN) \ && make install \ + 8.2: + type: git + git_url: https://github.com/php-memcached-dev/php-memcached + git_ref: master + command: | + true \ + # FIXME: This is a work-around to mitigate compile error with PHP 8.2 + && sed -i'' 's/\sTSRMLS_CC//g' php_memcached_session.c \ + && phpize \ + && ./configure --enable-memcached \ + && make -j$(getconf _NPROCESSORS_ONLN) \ + && make install \ all: type: pecl build_dep: [zlib1g-dev, libmemcached-dev, libevent-dev] run_dep: [libmemcachedutil2] mongo: - disabled: [7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] # Deprecated + disabled: [7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] # Deprecated 5.2: type: pecl command: yes yes | pecl install mongo-1.5.8 @@ -637,7 +654,7 @@ extensions_available: type: pecl mysql: already_avail: [5.2, 5.3] - disabled: [7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] # Deprecated in newer versions + disabled: [7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] # Deprecated in newer versions 5.6: type: builtin run_dep: [libmariadbclient18] @@ -650,7 +667,7 @@ extensions_available: type: builtin mysqlnd: disabled: [5.2] - already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] oauth: disabled: [] 5.2: @@ -713,6 +730,9 @@ extensions_available: 8.1: type: builtin pre: curl -sS https://raw.githubusercontent.com/php/php-src/php-8.0.6/ext/opcache/Optimizer/zend_dfg.h > /usr/local/include/php/Zend/Optimizer/zend_dfg.h + 8.2: + type: builtin + pre: curl -sS https://raw.githubusercontent.com/php/php-src/php-8.0.6/ext/opcache/Optimizer/zend_dfg.h > /usr/local/include/php/Zend/Optimizer/zend_dfg.h all: type: builtin openssl: @@ -759,6 +779,9 @@ extensions_available: 8.1: type: builtin configure: --with-pdo-oci=instantclient,/usr/lib/oracle/${ORACLE_VERSION_MAJOR}/client64/lib/,${ORACLE_VERSION_MAJOR} + 8.2: + type: builtin + configure: --with-pdo-oci=instantclient,/usr/lib/oracle/${ORACLE_VERSION_MAJOR}/client64/lib/,${ORACLE_VERSION_MAJOR} all: type: builtin configure: --with-pdo-oci=instantclient,/usr,${ORACLE_VERSION_MAJOR} @@ -833,7 +856,7 @@ extensions_available: all: type: pecl phalcon: - disabled: [5.2, 8.0, 8.1] # TODO: currently disabled for 7.4 as it breaks + disabled: [5.2, 8.0, 8.1, 8.2] # TODO: currently disabled for 7.4 as it breaks 5.3: type: git git_url: https://github.com/phalcon/cphalcon @@ -870,7 +893,7 @@ extensions_available: git_ref: $(git for-each-ref --format='%(*creatordate:raw)%(creatordate:raw) %(refname)' refs/tags | sort -n | sed 's/^.*tags\///g' | grep -E '^v[.0-9]+$' | tail -1) command: cd build && ./install phar: - already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] 5.2: type: pecl build_dep: [libssl-dev] @@ -884,7 +907,7 @@ extensions_available: readline: already_avail: "{{ php_all_versions }}" recode: - disabled: [7.4, 8.0, 8.1] + disabled: [7.4, 8.0, 8.1, 8.2] already_avail: [5.3, 5.4] all: type: builtin @@ -924,6 +947,24 @@ extensions_available: && sed -i'' 's/ops->hash_init(ctx);/ops->hash_init(ctx, NULL);/g' redis_array_impl.c \ && make -j$(getconf _NPROCESSORS_ONLN) \ && make install \ + 8.2: + type: git + git_url: https://github.com/phpredis/phpredis + git_ref: $(git for-each-ref --format='%(refname)' refs/tags | grep -E 'tags/[.0-9]+$' | sed 's|.*tags/||g' | sort -V | tail -1) + command: | + REDIS_ARGS=""; \ + if [ -d "/usr/local/include/php/ext/igbinary" ]; then \ + REDIS_ARGS="${REDIS_ARGS} --enable-redis-igbinary"; \ + fi; \ + if [ -d "/usr/local/include/php/ext/msgpack" ]; then \ + REDIS_ARGS="${REDIS_ARGS} --enable-redis-msgpack"; \ + fi; \ + phpize \ + && ./configure --enable-redis ${REDIS_ARGS} \ + && sed -i'' 's/ops->hash_init(ctx);/ops->hash_init(ctx, NULL);/g' library.c \ + && sed -i'' 's/ops->hash_init(ctx);/ops->hash_init(ctx, NULL);/g' redis_array_impl.c \ + && make -j$(getconf _NPROCESSORS_ONLN) \ + && make install \ all: type: git git_url: https://github.com/phpredis/phpredis @@ -941,7 +982,7 @@ extensions_available: && make -j$(getconf _NPROCESSORS_ONLN) \ && make install \ reflection: - already_avail: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + already_avail: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] rdkafka: disabled: [5.2] 5.3: @@ -999,6 +1040,11 @@ extensions_available: pre: | docker-php-ext-configure sockets \ && sed -i'' 's/.*ucred.*//g' /usr/src/php/ext/sockets/sendrecvmsg.c \ + 8.2: + # Remove ucred (currently breaks build) + pre: | + docker-php-ext-configure sockets \ + && sed -i'' 's/.*ucred.*//g' /usr/src/php/ext/sockets/sendrecvmsg.c \ all: type: builtin sodium: @@ -1008,7 +1054,8 @@ extensions_available: type: builtin build_dep: [libsodium-dev] solr: - disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0] + # PHP 8.2: SolrParams::__toString() implemented without string return type in Unknown on line 0 + disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 8.2] all: type: pecl build_dep: [libxml2-dev, libcurl4-openssl-dev] @@ -1033,14 +1080,14 @@ extensions_available: build_dep: [unixodbc-dev] run_dep: [unixodbc] ssh2: - disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 8.0, 8.1, 8.2] all: type: pecl version: 1.2 build_dep: [libssh2-1-dev] run_dep: [libssh2-1] swoole: - disabled: [5.2, 8.1] + disabled: [5.2, 8.1, 8.2] 5.3: type: pecl version: 1.9.23 @@ -1145,7 +1192,7 @@ extensions_available: run_dep: [uuid] build_dep: [uuid-dev] vips: - disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 5.5, 5.6, 8.0, 8.1, 8.2] 7.0: build_dep: - fftw-dev @@ -1237,13 +1284,13 @@ extensions_available: - libwebpmux3 wddx: # https://wiki.php.net/rfc/deprecate-and-remove-ext-wddx - disabled: [7.4, 8.0, 8.1] + disabled: [7.4, 8.0, 8.1, 8.2] all: type: builtin configure: --with-libxml-dir=/usr build_dep: [libxml2-dev] xdebug: - disabled: [] + disabled: [8.2] 5.2: type: pecl version: 2.2.7 @@ -1283,7 +1330,7 @@ extensions_available: xmlreader: already_avail: "{{ php_all_versions }}" xmlrpc: - disabled: [8.0, 8.1] + disabled: [8.0, 8.1, 8.2] 7.4: type: builtin configure: --with-iconv-dir=/usr diff --git a/build/ansible/group_vars/all/work.yml b/build/ansible/group_vars/all/work.yml index 4c120d9..4d51742 100644 --- a/build/ansible/group_vars/all/work.yml +++ b/build/ansible/group_vars/all/work.yml @@ -158,6 +158,8 @@ apt_repositories_available: deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu artful main 8.1: deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu artful main + 8.2: + deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu artful main all: deb: deb http://ppa.launchpad.net/git-core/ppa/ubuntu wily main key: A1715D88E1DF1F24 @@ -226,31 +228,31 @@ apt_repositories_available: # composer_available: asgardcms: - disabled: [5.2, 5.3, 5.4, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] check: asgardcms --version 2>/dev/null | grep -Ei 'AsgardCMS\sInstaller\s[0-9][.0-9]+' name: asgardcms/asgardcms-installer link: asgardcms version: 2 codeception: - disabled: [5.2, 8.0, 8.1] + disabled: [5.2, 8.0, 8.1, 8.2] check: codecept --version 2>/dev/null | grep -E '^Codeception(\sversion)?\s[0-9][.0-9]+$' name: codeception/codeception link: codecept version: 2 lumen: - disabled: [5.2, 5.3, 5.4, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] check: lumen --version 2>/dev/null | grep -E '^Lumen Installer\s[0-9][.0-9]+$' name: laravel/lumen-installer link: lumen version: 2 photon: - disabled: [5.2, 5.3, 5.4, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 8.0, 8.1, 8.2] check: photon --version | grep -E 'Installer [0-9][.0-9]+' name: photoncms/installer link: photon version: 2 prestissimo: - disabled: [5.2, 8.0, 8.1] + disabled: [5.2, 8.0, 8.1, 8.2] name: hirak/prestissimo version: 1 @@ -277,7 +279,7 @@ gem_available: # version which is not supported by the ruby version (>= 2.3) ffi: name: ffi - disabled: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1] + disabled: [5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] all: version: 1.12.2 rb_inotify: @@ -287,6 +289,8 @@ gem_available: mdl: name: mdl check: mdl --version | grep -E '[0-9][.0-9]+' + 8.2: + version: 0.5.0 8.1: version: 0.5.0 8.0: @@ -559,7 +563,7 @@ software_available: command: curl -sS -k -L --fail https://deployer.org/deployer.phar -L -o /usr/local/bin/dep post: chmod +x /usr/local/bin/dep drush7: - disabled: [5.2, 8.0, 8.1] + disabled: [5.2, 8.0, 8.1, 8.2] check: drush7 --version | grep -E '7[.0-9]+\s*$' all: pre: | @@ -575,7 +579,7 @@ software_available: && rm -rf /usr/local/src/drush7/examples \ && rm -rf /usr/local/src/drush7/misc \ drush8: - disabled: [5.2, 5.3, 8.0, 8.1] + disabled: [5.2, 5.3, 8.0, 8.1, 8.2] check: drush8 --version | grep -E '8[.0-9]+\s*$' all: pre: | @@ -591,7 +595,7 @@ software_available: && rm -rf /usr/local/src/drush8/examples \ && rm -rf /usr/local/src/drush8/misc \ drush9: - disabled: [5.2, 5.3, 5.4, 5.5, 7.0, 7.1, 8.0, 8.1] + disabled: [5.2, 5.3, 5.4, 5.5, 7.0, 7.1, 8.0, 8.1, 8.2] check: drush9 --version | grep -E '9[.0-9]+\s*$' all: pre: | @@ -607,7 +611,7 @@ software_available: && rm -rf /usr/local/src/drush9/examples \ && rm -rf /usr/local/src/drush9/misc \ drupalconsole: - disabled: [5.2, 5.3, 5.4, 7.0, 7.1, 8.0, 8.1] # TODO: re-enable for 8.0 (currently errors) + disabled: [5.2, 5.3, 5.4, 7.0, 7.1, 8.0, 8.1, 8.2] # TODO: re-enable for 8.0 (currently errors) check: drupal --version | grep -E 'Drupal Console Launcher\s*[0-9][.0-9]' 5.5: pre: DURL="https://github.com/hechoendrupal/drupal-console-launcher/releases/download/1.9.4/drupal.phar" @@ -643,7 +647,7 @@ software_available: && su - ${MY_USER} -c '/usr/local/src/brew/bin/brew config' \ laravel: check: laravel --version | grep -E '(Installer|version)\s*[0-9][.0-9]+' - disabled: [5.2, 5.3] + disabled: [5.2, 5.3, 8.2] 5.4: pre: | git clone https://github.com/laravel/installer /usr/local/src/laravel-installer \ @@ -747,7 +751,7 @@ software_available: && cd / \ && rm -rf /usr/local/src/mysqldump-secure \ phalcon: - disabled: [5.2, 8.0, 8.1] + disabled: [5.2, 8.0, 8.1, 8.2] check: phalcon commands | grep -E '[0-9][.0-9]+' 5.3: pre: | @@ -861,7 +865,7 @@ software_available: curl -sS -L --fail https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar > /usr/local/bin/phpcbf \ && chmod +x /usr/local/bin/phpcbf \ php-cs-fixer: - disabled: [5.2] + disabled: [5.2, 8.2] check: php-cs-fixer --version 2>&1 | grep -E 'Fixer\s+(version\s*)?[-_.0-9]+\s+' 5.3: command: | @@ -908,7 +912,7 @@ software_available: && mv phpmd.phar /usr/local/bin/phpmd \ && chmod +x /usr/local/bin/phpmd \ phpunit: - disabled: [5.2, 8.0, 8.1] + disabled: [5.2, 8.0, 8.1, 8.2] check: phpunit --version | grep -iE '^PHPUnit\s[0-9][.0-9]+' 5.3: command: | @@ -999,6 +1003,14 @@ software_available: && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb https://github.com/${VERSION} \ && dpkg -i /tmp/wkhtmltopdf.deb \ && rm -f /tmp/wkhtmltopdf.deb \ + 8.2: + command: | + DEBIAN_FRONTEND=noninteractive apt-get update -qq \ + && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \ + libfontenc1 libxfont2 xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils \ + && curl -sS -L --fail -o /tmp/wkhtmltopdf.deb https://github.com/${VERSION} \ + && dpkg -i /tmp/wkhtmltopdf.deb \ + && rm -f /tmp/wkhtmltopdf.deb \ all: pre: VERSION="$( curl -sSL -L --fail https://github.com/wkhtmltopdf/wkhtmltopdf/releases | grep -Eo '/wkhtmltopdf/.+stretch_amd64\.deb' | head -1 )" command: | diff --git a/build/ansible/inventory b/build/ansible/inventory index b3ad8e5..277d20e 100644 --- a/build/ansible/inventory +++ b/build/ansible/inventory @@ -11,3 +11,4 @@ php-7.3 php_version=7.3 ansible_connection=local php-7.4 php_version=7.4 ansible_connection=local php-8.0 php_version=8.0 ansible_connection=local php-8.1 php_version=8.1 ansible_connection=local +php-8.2 php_version=8.2 ansible_connection=local diff --git a/build/gen-readme.sh b/build/gen-readme.sh index 7ee75cb..78bcf38 100755 --- a/build/gen-readme.sh +++ b/build/gen-readme.sh @@ -26,6 +26,7 @@ print_usage() { echo " gen-readme.sh 7.4" echo " gen-readme.sh 8.0" echo " gen-readme.sh 8.1" + echo " gen-readme.sh 8.2" } @@ -104,6 +105,7 @@ if [ "${#}" -eq "0" ]; then update_readme "7.4" update_readme "8.0" update_readme "8.1" + update_readme "8.2" elif [ "${#}" -gt "1" ]; then # Specifying more than 1 argument is wrong echo "Error, invalid number of arguments." @@ -121,7 +123,8 @@ else && [ "${1}" != "7.3" ] \ && [ "${1}" != "7.4" ] \ && [ "${1}" != "8.0" ] \ - && [ "${1}" != "8.1" ]; then + && [ "${1}" != "8.1" ] \ + && [ "${1}" != "8.2" ]; then # Argument does not match any of the PHP versions echo "Error, invalid argument." print_usage diff --git a/tests/mods/modules/enchant/enchant-ispell.php b/tests/mods/modules/enchant/enchant-ispell.php index d6ab7b7..b9a012d 100644 --- a/tests/mods/modules/enchant/enchant-ispell.php +++ b/tests/mods/modules/enchant/enchant-ispell.php @@ -17,7 +17,7 @@ if (PHP_MAJOR_VERSION == 7) { // FIXME: Currently not available for PHP 8.0 and PHP 8.1 if (PHP_MAJOR_VERSION == 8) { - if (PHP_MINOR_VERSION == 0 || PHP_MINOR_VERSION == 1) { + if (PHP_MINOR_VERSION == 0 || PHP_MINOR_VERSION == 1 || PHP_MINOR_VERSION == 2) { echo 'SKIP'; exit(0); }