From fe3719530a111a5e254ea4e4f40b506623a9f9fa Mon Sep 17 00:00:00 2001 From: Jeppe B <2jepp9350@gmail.com> Date: Mon, 1 Jun 2026 19:19:01 +0200 Subject: [PATCH] Fix edge gateway PHP image extensions --- .../resources/edge-gateway-agent/Dockerfile.auto-updater | 7 ++++--- .../app/resources/edge-gateway-agent/Dockerfile.edge-agent | 6 +++++- .../app/resources/edge-gateway-agent/Dockerfile.lan-worker | 6 +++++- .../Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php | 7 ++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.auto-updater b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.auto-updater index 47bbd462..b85149bc 100644 --- a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.auto-updater +++ b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.auto-updater @@ -3,9 +3,10 @@ FROM ${BASE_IMAGE} RUN set -eux; \ apt-get update; \ - apt-get install -y --no-install-recommends bash ca-certificates curl docker.io docker-compose; \ - rm -rf /var/lib/apt/lists/*; \ - php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }' + apt-get install -y --no-install-recommends bash ca-certificates curl docker.io docker-compose libcurl4-openssl-dev libsqlite3-dev; \ + docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite; \ + php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }'; \ + rm -rf /var/lib/apt/lists/* COPY auto-updater.php /usr/local/bin/auto-updater.php diff --git a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.edge-agent b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.edge-agent index a888a98d..ab09f969 100644 --- a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.edge-agent +++ b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.edge-agent @@ -2,7 +2,11 @@ ARG BASE_IMAGE=php:8.2-cli-bookworm FROM ${BASE_IMAGE} RUN set -eux; \ - php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }' + apt-get update; \ + apt-get install -y --no-install-recommends libcurl4-openssl-dev libsqlite3-dev; \ + docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite; \ + php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }'; \ + rm -rf /var/lib/apt/lists/* WORKDIR /opt/truckwash-edge-agent diff --git a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.lan-worker b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.lan-worker index 5721d482..e7e916d4 100644 --- a/services/nginx/app/resources/edge-gateway-agent/Dockerfile.lan-worker +++ b/services/nginx/app/resources/edge-gateway-agent/Dockerfile.lan-worker @@ -2,7 +2,11 @@ ARG BASE_IMAGE=php:8.2-cli-bookworm FROM ${BASE_IMAGE} RUN set -eux; \ - php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }' + apt-get update; \ + apt-get install -y --no-install-recommends libcurl4-openssl-dev libsqlite3-dev; \ + docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite; \ + php -r 'foreach (["curl", "sqlite3"] as $extension) { if (!extension_loaded($extension)) { fwrite(STDERR, "Missing PHP extension: {$extension}\n"); exit(1); } }'; \ + rm -rf /var/lib/apt/lists/* WORKDIR /opt/truckwash-edge-agent diff --git a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php index 08c52553..8ea270b9 100644 --- a/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php +++ b/services/nginx/app/tests/Unit/Selfserve/EdgeGatewayUpdateLifecycleTest.php @@ -97,16 +97,21 @@ it('builds the installer around the compose stack artifacts and management polli expect($agentSource)->toContain("'last_transport_error'"); expect($agentSource)->toContain('private function recordTransportFailure(string $context, Throwable $throwable): void'); expect($edgeDockerfileSource)->toContain('FROM ${BASE_IMAGE}'); + expect($edgeDockerfileSource)->toContain('apt-get install -y --no-install-recommends libcurl4-openssl-dev libsqlite3-dev;'); + expect($edgeDockerfileSource)->toContain('docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite;'); expect($edgeDockerfileSource)->toContain('extension_loaded($extension)'); expect($edgeDockerfileSource)->toContain('Missing PHP extension: {$extension}'); expect($edgeDockerfileSource)->toContain('COPY agent.php /opt/truckwash-edge-agent/agent.php'); expect($workerDockerfileSource)->toContain('FROM ${BASE_IMAGE}'); + expect($workerDockerfileSource)->toContain('apt-get install -y --no-install-recommends libcurl4-openssl-dev libsqlite3-dev;'); + expect($workerDockerfileSource)->toContain('docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite;'); expect($workerDockerfileSource)->toContain('extension_loaded($extension)'); expect($workerDockerfileSource)->toContain('Missing PHP extension: {$extension}'); expect($workerDockerfileSource)->toContain('COPY lan-worker.php /opt/truckwash-edge-agent/lan-worker.php'); expect($autoUpdaterSource)->toContain("'/bin/bash ' . escapeshellarg(\$launcherPath) . ' reconcile 2>&1'"); expect($autoUpdaterDockerfileSource)->toContain('COPY auto-updater.php /usr/local/bin/auto-updater.php'); - expect($autoUpdaterDockerfileSource)->toContain('apt-get install -y --no-install-recommends bash ca-certificates curl docker.io docker-compose;'); + expect($autoUpdaterDockerfileSource)->toContain('apt-get install -y --no-install-recommends bash ca-certificates curl docker.io docker-compose libcurl4-openssl-dev libsqlite3-dev;'); + expect($autoUpdaterDockerfileSource)->toContain('docker-php-ext-install -j"$(nproc)" curl sqlite3 pdo_sqlite;'); expect($autoUpdaterDockerfileSource)->toContain('extension_loaded($extension)'); expect($serviceSource)->not->toContain('node /opt/truckwash-edge-agent/agent.mjs'); });