Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
strategy:
fail-fast: false
matrix:
version: [ "8.1", "8.2", "8.3" ]
version: [ "8.1", "8.2", "8.3", "8.4" ]

name: ${{ matrix.version }}
runs-on: ubuntu-latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
strategy:
fail-fast: false
matrix:
version: [ "8.1", "8.2", "8.3" ]
version: [ "8.1", "8.2", "8.3", "8.4" ]
arch: [
"linux/amd64,linux/arm64,linux/arm/v8,linux/arm/v7",
]
Expand Down
26 changes: 11 additions & 15 deletions 8.1/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
FROM --platform=$BUILDPLATFORM alpine:3.17 as main
FROM --platform=$BUILDPLATFORM alpine:3.19 AS main

LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"

RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/main add \
icu-libs \
libsodium \
&&apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
# Current packages don't exist in other repositories
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/community add \
libavif \
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ --allow-untrusted gnu-libiconv \
# Packages
gnu-libiconv \
tini \
php81 \
php81-dev \
Expand All @@ -36,29 +33,32 @@ RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main
php81-fpm \
php81-sodium \
php81-tokenizer \
# Iconv Fix
php81-pecl-apcu \
&& ln -sf /usr/bin/php81 /usr/bin/php

ADD rootfs /

ENTRYPOINT ["/sbin/tini", "--"]

HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
CMD /usr/sbin/php-fpm81 -t 2>&1 | grep -q "test is successful" || exit 1

CMD ["/usr/sbin/php-fpm81", "-R", "--nodaemonize"]

EXPOSE 9000

WORKDIR /app

FROM --platform=$BUILDPLATFORM main as dev
FROM --platform=$BUILDPLATFORM main AS dev

ARG USER=root
ARG PASSWORD=root

ARG COMPOSER_VERSION=2.5.1
ARG COMPOSER_VERSION=2.9.5

RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.19/community/ \
php81-pear \
php81-xdebug \
openssh \
supervisor \
autoconf \
Expand All @@ -67,14 +67,10 @@ RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge
wget \
make \
zip \
php81-xdebug \
# Delete APK cache.
&& rm -rf /var/cache/apk/* \
# Create ssh user for dev.
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
&& echo "${USER}:${PASSWORD}" | chpasswd \
&& ssh-keygen -A \
# Download composer.
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}

ADD devfs /
Expand Down
9 changes: 6 additions & 3 deletions 8.2/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM --platform=$BUILDPLATFORM alpine:3.21 as main
FROM --platform=$BUILDPLATFORM alpine:3.21 AS main

LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"

Expand Down Expand Up @@ -43,18 +43,21 @@ ADD rootfs /

ENTRYPOINT ["/sbin/tini", "--"]

HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
CMD /usr/sbin/php-fpm82 -t 2>&1 | grep -q "test is successful" || exit 1

CMD ["/usr/sbin/php-fpm82", "-R", "--nodaemonize"]

EXPOSE 9000

WORKDIR /app

FROM --platform=$BUILDPLATFORM main as dev
FROM --platform=$BUILDPLATFORM main AS dev

ARG USER=root
ARG PASSWORD=root

ARG COMPOSER_VERSION=2.5.1
ARG COMPOSER_VERSION=2.9.5

RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.21/community/ \
php82-pear \
Expand Down
23 changes: 10 additions & 13 deletions 8.3/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
FROM --platform=$BUILDPLATFORM alpine:edge as main
FROM --platform=$BUILDPLATFORM alpine:3.20 AS main

LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"

RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/main add \
icu-libs \
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
# Current packages don't exist in other repositories
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/community add \
libavif \
gnu-libiconv \
# Packages
tini \
php83 \
php83-dev \
Expand All @@ -35,29 +33,32 @@ RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main
php83-fpm \
php83-sodium \
php83-tokenizer \
# Iconv Fix
php83-pecl-apcu \
&& ln -sf /usr/bin/php83 /usr/bin/php

ADD rootfs /

ENTRYPOINT ["/sbin/tini", "--"]

HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
CMD /usr/sbin/php-fpm83 -t 2>&1 | grep -q "test is successful" || exit 1

CMD ["/usr/sbin/php-fpm83", "-R", "--nodaemonize"]

EXPOSE 9000

WORKDIR /app

FROM --platform=$BUILDPLATFORM main as dev
FROM --platform=$BUILDPLATFORM main AS dev

ARG USER=root
ARG PASSWORD=root

ARG COMPOSER_VERSION=2.5.1
ARG COMPOSER_VERSION=2.9.5

RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.20/community/ \
php83-pear \
php83-xdebug \
openssh \
supervisor \
autoconf \
Expand All @@ -66,14 +67,10 @@ RUN apk add -U --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge
wget \
make \
zip \
php83-xdebug \
# Delete APK cache.
&& rm -rf /var/cache/apk/* \
# Create ssh user for dev.
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
&& echo "${USER}:${PASSWORD}" | chpasswd \
&& ssh-keygen -A \
# Download composer.
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}

ADD devfs /
Expand Down
82 changes: 82 additions & 0 deletions 8.4/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# PHP 8.4 — uses alpine:edge until php84 lands in a stable Alpine release.
# TODO: pin to alpine:3.22 (or next stable) once available.
FROM --platform=$BUILDPLATFORM alpine:edge AS main

LABEL maintainer="Jorge Arco <jorge.arcoma@gmail.com>"

RUN apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/main add \
icu-libs \
&& apk --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community add \
libavif \
gnu-libiconv \
tini \
php84 \
php84-dev \
php84-common \
php84-gd \
php84-xmlreader \
php84-bcmath \
php84-ctype \
php84-curl \
php84-exif \
php84-iconv \
php84-intl \
php84-mbstring \
php84-opcache \
php84-openssl \
php84-pcntl \
php84-phar \
php84-session \
php84-xml \
php84-xsl \
php84-zip \
php84-zlib \
php84-dom \
php84-fpm \
php84-sodium \
php84-tokenizer \
php84-pecl-apcu \
&& ln -sf /usr/bin/php84 /usr/bin/php

ADD rootfs /

ENTRYPOINT ["/sbin/tini", "--"]

HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=3 \
CMD /usr/sbin/php-fpm84 -t 2>&1 | grep -q "test is successful" || exit 1

CMD ["/usr/sbin/php-fpm84", "-R", "--nodaemonize"]

EXPOSE 9000

WORKDIR /app

FROM --platform=$BUILDPLATFORM main AS dev

ARG USER=root
ARG PASSWORD=root

ARG COMPOSER_VERSION=2.9.5

RUN apk add -U --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/edge/community/ \
php84-pear \
php84-xdebug \
openssh \
supervisor \
autoconf \
git \
curl \
wget \
make \
zip \
&& rm -rf /var/cache/apk/* \
&& sed -i s/#PermitRootLogin.*/PermitRootLogin\ yes/ /etc/ssh/sshd_config \
&& echo "${USER}:${PASSWORD}" | chpasswd \
&& ssh-keygen -A \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION}

ADD devfs /

CMD ["supervisord", "--nodaemon", "--configuration", "/etc/supervisord/conf.d/supervisord.conf"]

EXPOSE 22 9003
11 changes: 11 additions & 0 deletions 8.4/devfs/etc/php84/conf.d/00_opcache.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
zend_extension=opcache.so

opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1
opcache.validate_timestamps=1
opcache.max_wasted_percentage=10
11 changes: 11 additions & 0 deletions 8.4/devfs/etc/php84/conf.d/00_xdebug.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
zend_extension=xdebug.so

xdebug.mode=debug
xdebug.log_level=0

xdebug.start_with_request=yes
xdebug.client_host=${XDEBUG_CLIENT_HOST}
xdebug.max_nesting_level=250

xdebug.var_display_max_data=10000
xdebug.var_display_max_depth=20
6 changes: 6 additions & 0 deletions 8.4/devfs/etc/php84/conf.d/50_settings.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date.timezone = "UTC"
short_open_tag = Off
session.auto_start = Off
magic_quotes_gpc = Off
register_globals = Off
memory_limit = 1G
19 changes: 19 additions & 0 deletions 8.4/devfs/etc/profile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export CHARSET=UTF-8
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PAGER=less
export PS1='\h:\w\$ '

umask 022

alias xon='mv /tmp/00_xdebug.ini /etc/php84/conf.d/'
alias xoff='mv /etc/php84/conf.d/00_xdebug.ini /tmp'
alias opcon='mv /tmp/00_opcache.ini /etc/php84/conf.d/'
alias opcoff='mv /etc/php84/conf.d/00_opcache.ini /tmp'

alias profile='XDEBUG_CONFIG="profiler_enable=1 xdebug.profiler_output_name=profiler.out.%p profiler_output_dir=." php'

for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
13 changes: 13 additions & 0 deletions 8.4/devfs/etc/supervisord/conf.d/supervisord.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[supervisord]
nodaemon=true
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid

loglevel=debug
user=root

[program:fpm]
command=/usr/sbin/php-fpm84 -R --nodaemonize

[program:ssh]
command=/usr/sbin/sshd -D
11 changes: 11 additions & 0 deletions 8.4/rootfs/etc/php84/conf.d/00_opcache.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
zend_extension=opcache.so

opcache.memory_consumption=256
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=50000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1
opcache.validate_timestamps=0
opcache.max_wasted_percentage=10
9 changes: 9 additions & 0 deletions 8.4/rootfs/etc/php84/conf.d/50_settings.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
date.timezone = "UTC"
short_open_tag = Off
session.auto_start = Off
magic_quotes_gpc = Off
register_globals = Off
memory_limit = 256M

realpath_cache_size=4096K
realpath_cache_ttl=600
36 changes: 36 additions & 0 deletions 8.4/rootfs/etc/php84/php-fpm.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[global]
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10
error_log = /proc/self/fd/2

[www]
user = root
group = root
listen = [::]:9000
chdir = /app

access.log = /proc/self/fd/1

pm = dynamic
pm.max_children = 500
pm.start_servers = 60
pm.min_spare_servers = 25
pm.max_spare_servers = 100
pm.max_requests = 1000

listen.backlog = -1
rlimit_files = 65536
rlimit_core = unlimited
catch_workers_output = yes
decorate_workers_output = no

request_slowlog_timeout = 5s
request_terminate_timeout = 120s
slowlog = /var/log/$pool.log.slow

pm.status_path = /fpm_status
ping.path = /fpm_ping
ping.response = pong

clear_env = no
Loading