From 871881cd56c671fa1b4e2808e87f844f9e6bab03 Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 10:45:50 +0200 Subject: [PATCH 1/8] refactor: rename app-frankenphp-base to frankenphp-base --- php/frankenphp.Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 7e184147..960eb563 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -1,6 +1,6 @@ ARG PHP_VERSION=8.4 -FROM dunglas/frankenphp:php${PHP_VERSION} AS app-frankenphp-base +FROM dunglas/frankenphp:php${PHP_VERSION} AS frankenphp-base RUN < Date: Wed, 19 Aug 2026 10:47:51 +0200 Subject: [PATCH 2/8] fix: ensure health check is only run for non-cli containers --- php/frankenphp.Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 960eb563..a1e5c110 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -119,6 +119,10 @@ USER www-data RUN frankenphp adapt --config /etc/frankenphp/Caddyfile --pretty --validate +HEALTHCHECK NONE + +FROM frankenphp-base AS frankenphp + HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ CMD curl --fail --silent http://localhost:8080/health-check || exit 1 @@ -176,6 +180,9 @@ USER www-data FROM frankenphp-base-dev AS frankenphp-dev +HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ + CMD curl --fail --silent http://localhost:8080/health-check || exit 1 + FROM frankenphp-base-dev AS frankenphp-cli-dev ENTRYPOINT [ "frankenphp", "php-cli" ] CMD [] From 5a349a3b9c82c3d30bcc8c00f7278c78cfe3a18d Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 10:48:37 +0200 Subject: [PATCH 3/8] fix: set correct port for prometheus metrics --- php/frankenphp.Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index a1e5c110..687e6c8a 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -126,7 +126,7 @@ FROM frankenphp-base AS frankenphp HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ CMD curl --fail --silent http://localhost:8080/health-check || exit 1 -LABEL prometheus_port="2020" +LABEL prometheus_port="2019" FROM frankenphp-base AS frankenphp-cli COPY --chown=www-data:www-data . /var/www/ @@ -183,6 +183,8 @@ FROM frankenphp-base-dev AS frankenphp-dev HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ CMD curl --fail --silent http://localhost:8080/health-check || exit 1 +LABEL prometheus_port="2019" + FROM frankenphp-base-dev AS frankenphp-cli-dev ENTRYPOINT [ "frankenphp", "php-cli" ] CMD [] From 8ed16d03c15318351f2cc0616febedd3188bb77f Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 10:49:23 +0200 Subject: [PATCH 4/8] fix: ensure build context is not copied into /var/www/ --- php/frankenphp.Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 687e6c8a..0d3ccf86 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -129,9 +129,6 @@ HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ LABEL prometheus_port="2019" FROM frankenphp-base AS frankenphp-cli -COPY --chown=www-data:www-data . /var/www/ - -FROM frankenphp AS frankenphp-cli ENTRYPOINT [ "frankenphp", "php-cli" ] CMD [] From 10661152967e566690204310ffeb825b4c79779f Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 10:50:02 +0200 Subject: [PATCH 5/8] feat: add php pdo_pgsql extension --- php/frankenphp.Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 0d3ccf86..648203ff 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -39,6 +39,7 @@ RUN < Date: Wed, 19 Aug 2026 11:06:06 +0200 Subject: [PATCH 6/8] feat: add frankenphp cron and cron-dev images --- .github/workflows/frankenphp.yml | 30 ++++++++++++++++++++++++++++++ php/frankenphp.Dockerfile | 24 ++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/.github/workflows/frankenphp.yml b/.github/workflows/frankenphp.yml index 716e3dc9..76401c92 100644 --- a/.github/workflows/frankenphp.yml +++ b/.github/workflows/frankenphp.yml @@ -95,6 +95,21 @@ jobs: cache-from: type=gha, scope=${{ github.workflow }}-frankenphp cache-to: type=gha, scope=${{ github.workflow }}-frankenphp, mode=max + - name: Build and push (frankenphp-cron) + uses: docker/build-push-action@v7 + timeout-minutes: 120 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ./php + target: frankenphp-cron + file: ./php/${{ matrix.image.file || 'Dockerfile' }} + build-args: ${{ matrix.image.build-args }} + push: ${{ github.event_name != 'pull_request' }} + tags: ghcr.io/netlogix/docker/frankenphp-cron:${{ matrix.image.version }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha, scope=${{ github.workflow }}-frankenphp + cache-to: type=gha, scope=${{ github.workflow }}-frankenphp, mode=max + build-docker-dev-image: name: 'Build frankenphp-${{ matrix.image.version }}-dev docker image' runs-on: ubuntu-latest @@ -164,3 +179,18 @@ jobs: platforms: linux/amd64,linux/arm64 cache-from: type=gha, scope=${{ github.workflow }}-frankenphp-dev cache-to: type=gha, scope=${{ github.workflow }}-frankenphp-dev, mode=max + + - name: Build and push (frankenphp-cron-dev) + uses: docker/build-push-action@v7 + timeout-minutes: 120 + with: + builder: ${{ steps.buildx.outputs.name }} + context: ./php + target: frankenphp-cron-dev + file: ./php/${{ matrix.image.file || 'Dockerfile' }} + build-args: ${{ matrix.image.build-args }} + push: ${{ github.event_name != 'pull_request' }} + tags: ghcr.io/netlogix/docker/frankenphp-cron-dev:${{ matrix.image.version }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha, scope=${{ github.workflow }}-frankenphp-dev + cache-to: type=gha, scope=${{ github.workflow }}-frankenphp-dev, mode=max) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 648203ff..3646f326 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -133,6 +133,18 @@ FROM frankenphp-base AS frankenphp-cli ENTRYPOINT [ "frankenphp", "php-cli" ] CMD [] +FROM frankenphp-base AS frankenphp-cron + +USER root + +ENV CRONTAB_PATH=/var/www/config/crontab +# cron runs jobs with a minimal PATH (/usr/bin:/bin) that excludes /usr/local/bin, so +# crontab entries calling plain `php` would fail without this symlink +RUN ln -s /usr/local/bin/php /usr/bin/php + +ENTRYPOINT ["/bin/sh", "-c", "env > /etc/environment && crontab -u www-data - < \"$CRONTAB_PATH\" && exec cron -f"] +CMD [] + FROM frankenphp-base AS frankenphp-base-dev USER root @@ -186,3 +198,15 @@ LABEL prometheus_port="2019" FROM frankenphp-base-dev AS frankenphp-cli-dev ENTRYPOINT [ "frankenphp", "php-cli" ] CMD [] + +FROM frankenphp-base-dev AS frankenphp-cron-dev + +USER root + +ENV CRONTAB_PATH=/var/www/config/crontab +# cron runs jobs with a minimal PATH (/usr/bin:/bin) that excludes /usr/local/bin, so +# crontab entries calling plain `php` would fail without this symlink +RUN ln -s /usr/local/bin/php /usr/bin/php + +ENTRYPOINT ["/bin/sh", "-c", "env > /etc/environment && crontab -u www-data - < \"$CRONTAB_PATH\" && exec cron -f"] +CMD [] From 7525b9cda7da572a2a9d502b3a224fa0ce596228 Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 11:23:07 +0200 Subject: [PATCH 7/8] fix: use custom metrics ports for prometheus --- php/frankenphp.Dockerfile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/php/frankenphp.Dockerfile b/php/frankenphp.Dockerfile index 3646f326..7048a8f0 100644 --- a/php/frankenphp.Dockerfile +++ b/php/frankenphp.Dockerfile @@ -124,10 +124,12 @@ HEALTHCHECK NONE FROM frankenphp-base AS frankenphp +LABEL prometheus_port="2020" + HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ CMD curl --fail --silent http://localhost:8080/health-check || exit 1 -LABEL prometheus_port="2019" +EXPOSE 2020 FROM frankenphp-base AS frankenphp-cli ENTRYPOINT [ "frankenphp", "php-cli" ] @@ -190,10 +192,12 @@ USER www-data FROM frankenphp-base-dev AS frankenphp-dev +LABEL prometheus_port="2020" + HEALTHCHECK --interval=2s --timeout=2s --start-period=2s --retries=3 \ CMD curl --fail --silent http://localhost:8080/health-check || exit 1 -LABEL prometheus_port="2019" +EXPOSE 2020 FROM frankenphp-base-dev AS frankenphp-cli-dev ENTRYPOINT [ "frankenphp", "php-cli" ] From b065630ff82929ba787cd8a8f48ae455389806e2 Mon Sep 17 00:00:00 2001 From: Tim Weisenberger Date: Wed, 19 Aug 2026 11:29:56 +0200 Subject: [PATCH 8/8] fix: update build container script to use same build settings like GitHub workflows --- build-container.sh | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/build-container.sh b/build-container.sh index 004a25af..9e59336b 100755 --- a/build-container.sh +++ b/build-container.sh @@ -41,33 +41,12 @@ docker buildx build -t ghcr.io/netlogix/docker/prometheus-redis-exporter:${VERSI docker buildx build -t ghcr.io/netlogix/docker/prometheus-solr-exporter:${VERSION} -f prometheus-solr-exporter/Dockerfile prometheus-solr-exporter docker buildx build -t ghcr.io/netlogix/docker/prometheus-varnish-exporter:${VERSION} -f prometheus-varnish-exporter/Dockerfile prometheus-varnish-exporter -docker buildx build -t ghcr.io/netlogix/docker/php-fpm:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-fpm php -docker buildx build -t ghcr.io/netlogix/docker/php-cli:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cli php -docker buildx build -t ghcr.io/netlogix/docker/php-fpm-dev:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-fpm-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cli-dev:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cli-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cron:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cron php -docker buildx build -t ghcr.io/netlogix/docker/php-cron-dev:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cron-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-supervisor:7.2 --build-arg PHP_VERSION=7.2 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-supervisor php - -docker buildx build -t ghcr.io/netlogix/docker/php-fpm:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-fpm php -docker buildx build -t ghcr.io/netlogix/docker/php-cli:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cli php -docker buildx build -t ghcr.io/netlogix/docker/php-fpm-dev:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-fpm-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cli-dev:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cli-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cron:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cron php -docker buildx build -t ghcr.io/netlogix/docker/php-cron-dev:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-cron-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-supervisor:7.3 --build-arg PHP_VERSION=7.3 --build-arg UBUNTU_VERSION=24.04 -f php/7.x.Dockerfile --target=php-supervisor php - -docker buildx build -t ghcr.io/netlogix/docker/php-fpm:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-fpm php -docker buildx build -t ghcr.io/netlogix/docker/php-cli:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-cli php -docker buildx build -t ghcr.io/netlogix/docker/php-fpm-dev:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-fpm-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cli-dev:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-cli-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-cron:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-cron php -docker buildx build -t ghcr.io/netlogix/docker/php-cron-dev:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-cron-dev php -docker buildx build -t ghcr.io/netlogix/docker/php-supervisor:7.4 --build-arg PHP_VERSION=7.4 --build-arg UBUNTU_VERSION=20.04 -f php/7.x.Dockerfile --target=php-supervisor php - docker buildx build -t ghcr.io/netlogix/docker/php-fpm:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-fpm php docker buildx build -t ghcr.io/netlogix/docker/php-cli:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-cli php -docker buildx build -t ghcr.io/netlogix/docker/php-cron:8.0--build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-cron php +docker buildx build -t ghcr.io/netlogix/docker/php-fpm-dev:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-fpm-dev php +docker buildx build -t ghcr.io/netlogix/docker/php-cli-dev:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-cli-dev php +docker buildx build -t ghcr.io/netlogix/docker/php-cron:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-cron php +docker buildx build -t ghcr.io/netlogix/docker/php-cron-dev:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-cron-dev php docker buildx build -t ghcr.io/netlogix/docker/php-supervisor:8.0 --build-arg PHP_VERSION=8.0 --build-arg UBUNTU_VERSION=24.04 -f php/8.x.Dockerfile --target=php-supervisor php docker buildx build -t ghcr.io/netlogix/docker/php-fpm:8.1 --build-arg PHP_VERSION=8.1 --build-arg UBUNTU_VERSION=22.04 -f php/Dockerfile --target=php-fpm php @@ -114,12 +93,24 @@ docker buildx build -t ghcr.io/netlogix/docker/frankenphp:8.3 --build-arg PHP_VE docker buildx build -t ghcr.io/netlogix/docker/frankenphp-dev:8.3 --build-arg PHP_VERSION=8.3 -f php/frankenphp.Dockerfile --target=frankenphp-dev php docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli:8.3 --build-arg PHP_VERSION=8.3 -f php/frankenphp.Dockerfile --target=frankenphp-cli php docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli-dev:8.3 --build-arg PHP_VERSION=8.3 -f php/frankenphp.Dockerfile --target=frankenphp-cli-dev php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron:8.3 --build-arg PHP_VERSION=8.3 -f php/frankenphp.Dockerfile --target=frankenphp-cron php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron-dev:8.3 --build-arg PHP_VERSION=8.3 -f php/frankenphp.Dockerfile --target=frankenphp-cron-dev php docker buildx build -t ghcr.io/netlogix/docker/frankenphp:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp php docker buildx build -t ghcr.io/netlogix/docker/frankenphp-dev:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp-dev php docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp-cli php docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli-dev:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp-cli-dev php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp-cron php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron-dev:8.4 --build-arg PHP_VERSION=8.4 -f php/frankenphp.Dockerfile --target=frankenphp-cron-dev php + +docker buildx build -t ghcr.io/netlogix/docker/frankenphp:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-dev:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp-dev php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp-cli php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cli-dev:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp-cli-dev php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp-cron php +docker buildx build -t ghcr.io/netlogix/docker/frankenphp-cron-dev:8.5 --build-arg PHP_VERSION=8.5 -f php/frankenphp.Dockerfile --target=frankenphp-cron-dev php docker buildx build -t ghcr.io/netlogix/docker/node:18 --build-arg NODE_VERSION=18 -f node/Dockerfile node docker buildx build -t ghcr.io/netlogix/docker/node:20 --build-arg NODE_VERSION=20 -f node/Dockerfile node docker buildx build -t ghcr.io/netlogix/docker/node:22 --build-arg NODE_VERSION=22 -f node/Dockerfile node +docker buildx build -t ghcr.io/netlogix/docker/node:24 --build-arg NODE_VERSION=24 -f node/Dockerfile node