From 156ce5a65b8b2c27013833d38632717b197b5fbd Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Wed, 25 Feb 2026 18:46:12 +0100 Subject: [PATCH 1/6] Add mapbender-uppeteer target to Dockerfile and configure build process --- Dockerfile | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f31b7874f..22feb357c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,7 +42,7 @@ EXPOSE 8080 COPY --chown=www-data:www-data . /var/mapbender/ -FROM base-container as build-container +FROM base-container AS build-container RUN apt-get update && apt-get install -y \ git \ @@ -50,13 +50,33 @@ RUN apt-get update && apt-get install -y \ USER www-data # required to create a complete mapbender application container image including all dependencies -RUN ./bootstrap +RUN git config --global --add safe.directory /var/mapbender +RUN rm application/composer.lock && ./bootstrap -FROM base-container +FROM base-container AS mapbender USER www-data COPY --from=build-container --chown=www-data:www-data /var/mapbender /var/mapbender CMD ["apache2-foreground"] + +FROM base-container AS mapbender-puppeteer + +RUN apt-get update && apt-get install -y \ + npm \ + nodejs \ + libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgdk-pixbuf-xlib-2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget \ + && rm -rf /var/lib/apt/lists/* + +RUN npm install -g puppeteer +RUN chown www-data:www-data -R /usr/local/lib/node_modules/ + +USER www-data + +RUN puppeteer browsers install + +COPY --from=build-container --chown=www-data:www-data /var/mapbender /var/mapbender + +CMD ["apache2-foreground"] \ No newline at end of file From 009acc22720e3cb266edf9fae041a0a9f7a2e17d Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Fri, 13 Mar 2026 18:07:22 +0100 Subject: [PATCH 2/6] add mapbender-puppeteer build stage & php-ext-builder stage --- .dockerignore | 32 +++++++++++++++++++++++++ Dockerfile | 66 ++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..09bc55124 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,32 @@ +application/public/uploads + +!application/public/uploads/mapbender_user +!application/public/uploads/mapbender_user_basic +*/config/parameters.yaml +*/vendor +*.tar.gz +*.rpm +*.deb +local.properties +/nbproject/private/ +testresults + +# IDEA Project Files +.idea/ + +# Composer asset components +application/public/components/ + +application/mapbender + +# Distribution files +dist + +.phpunit.result.cache + +# Git +.git + +# Docker build helpers (config files are COPYed explicitly) +docker/distroless-fs + diff --git a/Dockerfile b/Dockerfile index 22feb357c..16935142a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,8 @@ -FROM php:8.3-apache AS base-container - -ENV APACHE_DOCUMENT_ROOT=/var/mapbender/application/public -ENV API_UPLOAD_DIR=/var/mapbender/application/uploads/ +# Stage: compile PHP extensions with dev dependencies +FROM php:8.3-apache AS php-ext-builder -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ libpq-dev \ - unzip \ - openssl \ - bzip2 \ - sqlite3 \ - curl \ libcurl4-gnutls-dev \ libgd-dev \ libicu-dev \ @@ -19,7 +12,6 @@ RUN apt-get update && apt-get install -y \ libsqlite3-dev \ libldap2-dev \ libonig-dev \ - postgresql-client \ && rm -rf /var/lib/apt/lists/* RUN docker-php-ext-install pdo_pgsql @@ -27,6 +19,30 @@ RUN docker-php-ext-configure gd --with-jpeg --with-freetype RUN docker-php-ext-install curl gd intl mbstring zip bz2 xml pdo_sqlite ldap RUN docker-php-ext-install opcache +# Stage: runtime base (no -dev packages, only runtime shared libs) +FROM php:8.3-apache AS base-container + +ENV APACHE_DOCUMENT_ROOT=/var/mapbender/application/public +ENV API_UPLOAD_DIR=/var/mapbender/application/uploads/ + +# Copy compiled PHP extension binaries and ini configs from builder +COPY --from=php-ext-builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ +COPY --from=php-ext-builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ + +# Install only runtime libraries (no -dev / header packages) +RUN apt-get update && apt-get install -y --no-install-recommends \ + libpq5 \ + libcurl3-gnutls \ + libgd3 \ + libicu72 \ + libzip4 \ + libonig5 \ + libldap-2.5-0 \ + unzip \ + openssl \ + curl \ + && rm -rf /var/lib/apt/lists/* + RUN rm /etc/apache2/sites-enabled/* COPY ./docker/mapbender_apache.conf /etc/apache2/sites-enabled/ COPY ./docker/php.ini /usr/local/etc/php/php.ini @@ -53,6 +69,12 @@ USER www-data RUN git config --global --add safe.directory /var/mapbender RUN rm application/composer.lock && ./bootstrap +# Replace VectorTilesBundle files with patched versions +RUN curl -fsSL https://raw.githubusercontent.com/mapbender/mapbender/b762f26fa0439aa9a5c4e1a620f36718fd5845ce/src/Mapbender/VectorTilesBundle/Component/VectorTilesRenderer.php \ + -o application/mapbender/src/Mapbender/VectorTilesBundle/Component/VectorTilesRenderer.php \ + && curl -fsSL https://raw.githubusercontent.com/mapbender/mapbender/b762f26fa0439aa9a5c4e1a620f36718fd5845ce/src/Mapbender/VectorTilesBundle/Resources/js/print-vectortile.js \ + -o application/mapbender/src/Mapbender/VectorTilesBundle/Resources/js/print-vectortile.js + FROM base-container AS mapbender @@ -62,12 +84,11 @@ COPY --from=build-container --chown=www-data:www-data /var/mapbender /var/mapben CMD ["apache2-foreground"] -FROM base-container AS mapbender-puppeteer +FROM base-container AS mapbender-puppeteer-build -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ npm \ nodejs \ - libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgdk-pixbuf-xlib-2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget \ && rm -rf /var/lib/apt/lists/* RUN npm install -g puppeteer @@ -77,6 +98,23 @@ USER www-data RUN puppeteer browsers install +FROM base-container AS mapbender-puppeteer + +RUN apt-get update && apt-get install -y --no-install-recommends \ + nodejs \ + libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgdk-pixbuf-xlib-2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=mapbender-puppeteer-build /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ +COPY --from=mapbender-puppeteer-build --chown=www-data:www-data /var/www/.cache/puppeteer/ /var/www/.cache/puppeteer/ +RUN ln -sf /usr/local/lib/node_modules/.bin/puppeteer /usr/local/bin/puppeteer +# Symlink so Node's standard module resolution finds puppeteer from any script under /var/mapbender +RUN mkdir -p /var/mapbender/node_modules && ln -sf /usr/local/lib/node_modules/puppeteer /var/mapbender/node_modules/puppeteer + +ENV NODE_PATH=/usr/local/lib/node_modules + +USER www-data + COPY --from=build-container --chown=www-data:www-data /var/mapbender /var/mapbender CMD ["apache2-foreground"] \ No newline at end of file From 38319c9a3758fee75d04460ba55a6531ae33e452 Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Tue, 17 Mar 2026 14:55:33 +0100 Subject: [PATCH 3/6] Update PHP version in Dockerfile and streamline bootstrap process --- Dockerfile | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 16935142a..a6ee8dded 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage: compile PHP extensions with dev dependencies -FROM php:8.3-apache AS php-ext-builder +FROM php:8.4-apache AS php-ext-builder RUN apt-get update && apt-get install -y --no-install-recommends \ libpq-dev \ @@ -67,14 +67,7 @@ RUN apt-get update && apt-get install -y \ USER www-data # required to create a complete mapbender application container image including all dependencies RUN git config --global --add safe.directory /var/mapbender -RUN rm application/composer.lock && ./bootstrap - -# Replace VectorTilesBundle files with patched versions -RUN curl -fsSL https://raw.githubusercontent.com/mapbender/mapbender/b762f26fa0439aa9a5c4e1a620f36718fd5845ce/src/Mapbender/VectorTilesBundle/Component/VectorTilesRenderer.php \ - -o application/mapbender/src/Mapbender/VectorTilesBundle/Component/VectorTilesRenderer.php \ - && curl -fsSL https://raw.githubusercontent.com/mapbender/mapbender/b762f26fa0439aa9a5c4e1a620f36718fd5845ce/src/Mapbender/VectorTilesBundle/Resources/js/print-vectortile.js \ - -o application/mapbender/src/Mapbender/VectorTilesBundle/Resources/js/print-vectortile.js - +RUN ./bootstrap FROM base-container AS mapbender From 68a70a553dc037b28ce4c6defb5e96d39ee88db7 Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Tue, 17 Mar 2026 15:39:02 +0100 Subject: [PATCH 4/6] change Dockerfile to use php 8.4 base image & remove mapbender/mapbender file replacement workarounds --- Dockerfile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index a6ee8dded..f61cfc945 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ RUN docker-php-ext-install curl gd intl mbstring zip bz2 xml pdo_sqlite ldap RUN docker-php-ext-install opcache # Stage: runtime base (no -dev packages, only runtime shared libs) -FROM php:8.3-apache AS base-container +FROM php:8.4-apache AS base-container ENV APACHE_DOCUMENT_ROOT=/var/mapbender/application/public ENV API_UPLOAD_DIR=/var/mapbender/application/uploads/ @@ -32,12 +32,12 @@ COPY --from=php-ext-builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d # Install only runtime libraries (no -dev / header packages) RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ - libcurl3-gnutls \ + libcurl3t64-gnutls \ libgd3 \ - libicu72 \ - libzip4 \ + libicu76 \ + libzip5 \ libonig5 \ - libldap-2.5-0 \ + libldap2 \ unzip \ openssl \ curl \ @@ -95,7 +95,7 @@ FROM base-container AS mapbender-puppeteer RUN apt-get update && apt-get install -y --no-install-recommends \ nodejs \ - libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgdk-pixbuf-xlib-2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget \ + libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libgdk-pixbuf-xlib-2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget \ && rm -rf /var/lib/apt/lists/* COPY --from=mapbender-puppeteer-build /usr/local/lib/node_modules/ /usr/local/lib/node_modules/ From a7c99d685719fb2d623cf3697305d2270ba1fdd8 Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Tue, 17 Mar 2026 15:44:21 +0100 Subject: [PATCH 5/6] Refactor Docker build workflow to use matrix strategy for mapbender and mapbender-puppeteer targets --- .github/workflows/docker-build.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 804c17251..3207ac2ae 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -9,6 +9,18 @@ jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + include: + - target: mapbender + tags: | + mapbender/mapbender:latest + mapbender/mapbender:${{ github.ref_name }} + - target: mapbender-puppeteer + tags: | + mapbender/mapbender-puppeteer:latest + mapbender/mapbender-puppeteer:${{ github.ref_name }} + steps: - name: Checkout uses: actions/checkout@v4 @@ -25,12 +37,11 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push Docker image + - name: Build and push Docker image (${{ matrix.target }}) uses: docker/build-push-action@v5 with: context: . + target: ${{ matrix.target }} platforms: linux/amd64,linux/arm64 push: true - tags: | - mapbender/mapbender:latest - mapbender/mapbender:${{ github.ref_name }} + tags: ${{ matrix.tags }} From df384b2472f85b9d668c0acd40527df2c3bcb8df Mon Sep 17 00:00:00 2001 From: Max Tobias Weber Date: Tue, 17 Mar 2026 15:52:49 +0100 Subject: [PATCH 6/6] update dockerignore --- .dockerignore | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.dockerignore b/.dockerignore index 09bc55124..03e0c148f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,24 +1,10 @@ -application/public/uploads - -!application/public/uploads/mapbender_user -!application/public/uploads/mapbender_user_basic -*/config/parameters.yaml */vendor *.tar.gz *.rpm *.deb -local.properties -/nbproject/private/ -testresults # IDEA Project Files .idea/ - -# Composer asset components -application/public/components/ - -application/mapbender - # Distribution files dist @@ -26,7 +12,3 @@ dist # Git .git - -# Docker build helpers (config files are COPYed explicitly) -docker/distroless-fs -