Skip to content

Commit

Permalink
Add Support for PHP|8.3 (#2375)
Browse files Browse the repository at this point in the history
* Add support for PHP|8.2

* Add support for PHP|8.3

* typo in version

* fixing gpg keys

* version fix

* fix duplicate buster file issue

* fix installPrereqs issue

* Add support for PHP|8.3

* nit fix

* updating base runtime tag

* update sqlsrv

* update 8.3.3 sha

* Remove imagick from php|8.3

* remove imagick from PHP|8.3

* PHP|8.3.3 update base tag

* Add bookworm support for PHP|8.3.3

* add bookworm for php|8.3.3

* adding common base dockerfile for bookworm

* add 8.3 bookworm job

* update service connection

* update debian repo url

* test|8.3 something

* update ms packages repo

* update packages

* test packages php|8.3

* update  83 bookworm

* rebase php|8.3 bookworm

* update release template for a temporary run

* temp run

* Generate php base images

* Update base tag | PHP|8.3.3

* Update base tag | Php-fpm|8.3.3

* test cases | php | 8.3

* update tests | php | 8.3

* tests | php | 8.3

* test cases | php|8.3

* php | 8.3 tests

* test cases | php | 8.3.3

* Run PHP|8.3 Tests

* php|tests | 8.3.3

* php|8.3.3 tests

* add tests | php | 8.3.3

* update php|8.3.3 to 8.3.4

* update version | php | 8.3.4

* update version 8.3.3 to 8.3.4 for php

* update keys for php|8.3.4

* PHP|8.3.4 | Update Base Tag

* Version updates | php | 8.3.4

* address comments | php|8.3.4

* address comments | php|8.3.4

* update ltsVersions dockerfile | php|8.3

* php|8.3, ltsDockerfile

* php composer | php|8.3.4

---------

Co-authored-by: root <root@Akshay-D22.fareast.corp.microsoft.com>
  • Loading branch information
kumaraksh1 and root authored Mar 19, 2024
1 parent b44e928 commit e1852c7
Show file tree
Hide file tree
Showing 50 changed files with 2,926 additions and 60 deletions.
9 changes: 6 additions & 3 deletions build/__phpVersions.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# This file was auto-generated from 'constants.yaml'. Changes may be overridden.

PHP_RUNTIME_BASE_TAG='20240222.2'
PHP_FPM_RUNTIME_BASE_TAG='20240222.2'
COMPOSER_DEFAULT_VERSION='2.0.8'
PHP_RUNTIME_BASE_TAG='20240318.5'
PHP_FPM_RUNTIME_BASE_TAG='20240318.4'
COMPOSER_DEFAULT_VERSION='2.6.2'
COMPOSER_SETUP_SHA384='e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02'
COMPOSER1_9_VERSION='1.9.3'
COMPOSER1_10_VERSION='1.10.19'
Expand All @@ -12,6 +12,9 @@ COMPOSER2_3_VERSION='2.3.10'
COMPOSER2_4_VERSION='2.4.4'
COMPOSER2_5_VERSION='2.5.8'
COMPOSER2_6_VERSION='2.6.2'
PHP83_VERSION='8.3.4'
PHP83_KEYS='1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA'
PHP83_TAR_SHA256='39a337036a546e5c28aea76cf424ac172db5156bd8a8fd85252e389409a5ba63'
PHP82_VERSION='8.2.16'
PHP82_KEYS='1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544'
PHP82_TAR_SHA256='28cdc995b7d5421711c7044294885fcde4390c9f67504a994b4cf9bc1b5cc593'
Expand Down
3 changes: 3 additions & 0 deletions build/buildRunTimeImages.sh
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ function getRuntimeTagVersion()
elif [ "$PLATFORM_NAME" == "php" ]
then
case $PLATFORM_VERSION in
8.3)
FULL_RUNTIME_TAG_VERSION=$PHP83_VERSION
;;
8.2)
FULL_RUNTIME_TAG_VERSION=$PHP82_VERSION
;;
Expand Down
9 changes: 6 additions & 3 deletions build/constants.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -185,9 +185,9 @@
file-name-prefix: __
- name: php-versions
constants:
php-runtime-base-tag: 20240222.2
php-fpm-runtime-base-tag: 20240222.2
composer-default-version: 2.0.8
php-runtime-base-tag: 20240318.5
php-fpm-runtime-base-tag: 20240318.4
composer-default-version: 2.6.2
composer-setup-sha384: e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02
composer1-9-version: 1.9.3
composer1-10-version: 1.10.19
Expand All @@ -197,6 +197,9 @@
composer2-4-version: 2.4.4
composer2-5-version: 2.5.8
composer2-6-version: 2.6.2
php83-version: 8.3.4
php83-keys: 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA
php83-tar-sha256: 39a337036a546e5c28aea76cf424ac172db5156bd8a8fd85252e389409a5ba63
php82-version: 8.2.16
php82-keys: 1198C0117593497A5EC5C199286AF1F9897469DC 39B641343D8C104B2B146DC3F9C39DC0B9698544
php82-tar-sha256: 28cdc995b7d5421711c7044294885fcde4390c9f67504a994b4cf9bc1b5cc593
Expand Down
5 changes: 2 additions & 3 deletions doc/supportedPlatformVersions.md
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,7 @@
- 8.0.100
- 8.0.101


## golang

### bullseye
Expand Down Expand Up @@ -1012,9 +1013,7 @@

### bookworm

- 8.1.22
- 8.2.9
- 8.2.16
- 8.3.4

### bullseye

Expand Down
2 changes: 1 addition & 1 deletion images/build/Dockerfiles/ltsVersions.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ RUN --mount=type=secret,id=oryx_sdk_storage_account_access_token \
&& ln -s 7.3 7 \
&& ln -s 7 lts \
&& cd /opt/php-composer \
&& ln -sfn 2.0.8 stable \
&& ln -sfn 2.6.2 stable \
&& ln -sfn /opt/php-composer/stable/composer.phar /opt/php-composer/composer.phar \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
Expand Down
4 changes: 2 additions & 2 deletions images/build/Dockerfiles/ltsVersions.buster.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -177,12 +177,12 @@ RUN --mount=type=secret,id=oryx_sdk_storage_account_access_token \
# Copy PHP versions
&& . $buildDir/__phpVersions.sh \
&& $imagesDir/installPlatform.sh php $PHP80_VERSION \
&& $imagesDir/installPlatform.sh php-composer $COMPOSER1_10_VERSION \
&& $imagesDir/installPlatform.sh php-composer $COMPOSER2_6_VERSION \
&& cd /opt/php \
&& ln -s 8.0 8 \
&& ln -s 8 lts \
&& cd /opt/php-composer \
&& ln -sfn 2.0.8 stable \
&& ln -sfn 2.6.2 stable \
&& ln -sfn /opt/php-composer/stable/composer.phar /opt/php-composer/composer.phar \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
Expand Down
3 changes: 3 additions & 0 deletions images/build/php/8.3/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Build PHP 8.3
FROM oryxdevmcr.azurecr.io/private/oryx/php-build-prereqs AS php83-build
RUN set -eux && . /php/__phpVersions.sh && PHP_VERSION=$PHP83_VERSION GPG_KEYS=$PHP83_KEYS PHP_SHA256=$PHP83_TAR_SHA256 /php/build.sh
245 changes: 245 additions & 0 deletions images/runtime/php-fpm/8.3/8.3.bookworm.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
ARG DEBIAN_FLAVOR
# From https://github.com/docker-library/php.git
FROM oryxdevmcr.azurecr.io/private/oryx/php-fpm-run-base-${DEBIAN_FLAVOR}
ARG IMAGES_DIR=/tmp/oryx/images

# Install the Microsoft SQL Server PDO driver on supported versions only.
# - https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac
# - https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server
RUN set -eux \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
gnupg2 \
apt-transport-https \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 msodbcsql18=18.1.2.1-1 odbcinst1debian2=2.3.7 odbcinst=2.3.7 unixodbc=2.3.7 unixodbc-dev=2.3.7

ENV PHP_INI_DIR /usr/local/etc/php
RUN set -eux; \
mkdir -p "$PHP_INI_DIR/conf.d"; \
# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743)
[ ! -d /var/www/html ]; \
mkdir -p /var/www/html; \
chown www-data:www-data /var/www/html; \
chmod 777 /var/www/html

##<autogenerated>##
ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi ac_cv_func_mmap=no
##</autogenerated>##

# Apply stack smash protection to functions using local buffers and alloca()
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64)
# Enable optimization (-O2)
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default)
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated)
# https://github.com/docker-library/php/issues/272
# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php)
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
ENV PHP_CPPFLAGS="$PHP_CFLAGS"
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie"

ENV GPG_KEYS 1198C0117593497A5EC5C199286AF1F9897469DC AFD8691FDAEDF03BDF6E460563F15A9B715376CA C28D937575603EB4ABB725861C0779DC5C0A9DE4

ENV PHP_VERSION 8.3.4
ENV PHP_URL="https://www.php.net/get/php-8.3.4.tar.xz/from/this/mirror" PHP_ASC_URL="https://www.php.net/get/php-8.3.4.tar.xz.asc/from/this/mirror"
ENV PHP_SHA256="39a337036a546e5c28aea76cf424ac172db5156bd8a8fd85252e389409a5ba63" PHP_MD5=""

RUN set -eux; \
\
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends gnupg dirmngr; \
rm -rf /var/lib/apt/lists/*; \
\
mkdir -p /usr/src; \
cd /usr/src; \
\
curl -fsSL -o php.tar.xz "$PHP_URL"; \
\
if [ -n "$PHP_SHA256" ]; then \
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \
fi; \
if [ -n "$PHP_MD5" ]; then \
echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \
fi; \
\
if [ -n "$PHP_ASC_URL" ]; then \
curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \
export GNUPGHOME="$(mktemp -d)"; \
${IMAGES_DIR}/receiveGpgKeys.sh $GPG_KEYS; \
gpg --batch --verify php.tar.xz.asc php.tar.xz; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME"; \
fi; \
\
apt-mark auto '.*' > /dev/null; \
apt-mark manual $savedAptMark > /dev/null;

COPY docker-php-source /usr/local/bin/

RUN set -eux; \
\

savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends \
libargon2-dev \
libcurl4-openssl-dev \
libedit-dev \
libonig-dev \
libsodium-dev \
libsqlite3-dev \
libssl-dev \
libxml2-dev \
zlib1g-dev \
${PHP_EXTRA_BUILD_DEPS:-} \
; \
rm -rf /var/lib/apt/lists/*; \
\
export \
CFLAGS="$PHP_CFLAGS" \
CPPFLAGS="$PHP_CPPFLAGS" \
LDFLAGS="$PHP_LDFLAGS" \
; \
#which docker-php-source; \
awk '{ sub("\r$", ""); print }' /usr/local/bin/docker-php-source > /usr/local/bin/docker-php-source_new; \
cat /usr/local/bin/docker-php-source_new; \
chmod +x /usr/local/bin/docker-php-source_new ; \
docker-php-source_new extract; \
ls -l /usr/src/; \
cd /usr/src/php; \
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
# https://bugs.php.net/bug.php?id=74125
if [ ! -d /usr/include/curl ]; then \
ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \
fi; \
./configure \
--build="$gnuArch" \
--with-config-file-path="$PHP_INI_DIR" \
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \
\
# make sure invalid --configure-flags are fatal errors intead of just warnings
--enable-option-checking=fatal \
\
# https://github.com/docker-library/php/issues/439
--with-mhash \
\
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236)
--enable-ftp \
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)
--enable-mbstring \
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself)
--enable-mysqlnd \
# https://wiki.php.net/rfc/argon2_password_hash (7.2+)
--with-password-argon2 \
# https://wiki.php.net/rfc/libsodium
--with-sodium=shared \
# always build against system sqlite3 (https://github.com/php/php-src/commit/6083a387a81dbbd66d6316a3a12a63f06d5f7109)
--with-pdo-sqlite=/usr \
--with-sqlite3=/usr \
\
--with-curl \
--with-libedit \
--with-openssl \
--with-zlib \
\
# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") and will be removed in PHP 8+; see also https://github.com/docker-library/php/issues/846#issuecomment-505638494
--with-pear \
\
# bundled pcre does not support JIT on s390x
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \
--with-libdir="lib/$debMultiarch" \
\
${PHP_EXTRA_CONFIGURE_ARGS:-} \
; \
make -j "$(nproc)"; \
find -type f -name '*.a' -delete; \
make install; \
find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; \
make clean; \
\
# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable)
cp -v php.ini-* "$PHP_INI_DIR/"; \
\
cd /; \
docker-php-source_new delete; \
\
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
find /usr/local -type f -executable -exec ldd '{}' ';' \
| awk '/=>/ { print $(NF-1) }' \
| sort -u \
| xargs -r dpkg-query --search \
| cut -d: -f1 \
| sort -u \
| xargs -r apt-mark manual \
; \
# update pecl channel definitions https://github.com/docker-library/php/issues/443
pecl update-channels; \
rm -rf /tmp/pear ~/.pearrc; \
# smoke test
php --version

COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-php-ext-*
RUN chmod +x /usr/local/bin/docker-php-entrypoint

# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598)
RUN docker-php-ext-enable sodium

ENTRYPOINT ["docker-php-entrypoint"]
##<autogenerated>##
WORKDIR /var/www/html

RUN set -eux; \
cd /usr/local/etc; \
if [ -d php-fpm.d ]; then \
# for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf"
sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \
cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \
else \
# PHP 5.x doesn't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency
mkdir php-fpm.d; \
cp php-fpm.conf.default php-fpm.d/www.conf; \
{ \
echo '[global]'; \
echo 'include=etc/php-fpm.d/*.conf'; \
} | tee php-fpm.conf; \
fi; \
{ \
echo '[global]'; \
echo 'error_log = /proc/self/fd/2'; \
echo; echo '; https://github.com/docker-library/php/pull/725#issuecomment-443540114'; echo 'log_limit = 8192'; \
echo; \
echo '[www]'; \
echo '; if we send this to /proc/self/fd/1, it never appears'; \
echo 'access.log = /proc/self/fd/2'; \
echo; \
echo 'clear_env = no'; \
echo; \
echo '; Ensure worker stdout and stderr are sent to the main error log.'; \
echo 'catch_workers_output = yes'; \
echo 'decorate_workers_output = no'; \
} | tee php-fpm.d/docker.conf; \
{ \
echo '[global]'; \
echo 'daemonize = no'; \
echo; \
echo '[www]'; \
echo 'listen = 9000'; \
} | tee php-fpm.d/zz-docker.conf

RUN rm -rf /var/lib/apt/lists/*

# Override stop signal to stop process gracefully
# https://github.com/php/php-src/blob/17baa87faddc2550def3ae7314236826bc1b1398/sapi/fpm/php-fpm.8.in#L163
STOPSIGNAL SIGQUIT

EXPOSE 9000
CMD ["php-fpm"]
##</autogenerated>##
Loading

0 comments on commit e1852c7

Please sign in to comment.