From 4981d9f0601e01b21787759696704a8337bc679f Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Sat, 15 Nov 2025 15:37:39 +0100 Subject: [PATCH] add php to the dockerfile --- Dockerfile | 177 +++++++++++++++++++++++++---------------------------- 1 file changed, 84 insertions(+), 93 deletions(-) diff --git a/Dockerfile b/Dockerfile index b7b941a..92aeed8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,108 +1,99 @@ -# syntax=docker/dockerfile:1.6 + # syntax=docker/dockerfile:1.6 -ARG PHP_VERSION=8.3 -ARG NODE_VERSION=20 + ARG PHP_VERSION=8.3 + ARG NODE_VERSION=20 -################################################################################ -# Node build stage - compile front-end assets -################################################################################ -FROM node:${NODE_VERSION}-bookworm AS node_builder + ################################################################################ + # Composer dependencies (install vendor/) + ################################################################################ + FROM composer:2 AS vendor -WORKDIR /var/www/html - # install PHP CLI for Wayfinder -RUN apt-get update \ - && apt-get install -y --no-install-recommends php-cli php-mbstring php-xml php-curl \ + WORKDIR /var/www/html + + COPY composer.json composer.lock ./ + + RUN composer install \ + --no-dev \ + --no-scripts \ + --no-interaction \ + --prefer-dist \ + --optimize-autoloader \ + --ignore-platform-reqs + + COPY . . + + ################################################################################ + # Node build stage - compile front-end assets (needs PHP + vendor) + ################################################################################ + FROM node:${NODE_VERSION}-bookworm AS node_builder + + WORKDIR /var/www/html + + RUN apt-get update \ + && apt-get install -y --no-install-recommends php-cli php-mbstring php-xml php-curl php-zip \ && rm -rf /var/lib/apt/lists/* -COPY package.json package-lock.json ./ -RUN npm ci --no-audit --prefer-offline + COPY package.json package-lock.json ./ + RUN npm ci --no-audit --prefer-offline -COPY . . -RUN npm run build + COPY . . + COPY --from=vendor /var/www/html/vendor ./vendor -################################################################################ -# Composer dependencies -################################################################################ -FROM composer:2 AS vendor + RUN npm run build -WORKDIR /var/www/html + ################################################################################ + # PHP-FPM runtime image + ################################################################################ + FROM php:${PHP_VERSION}-fpm-bullseye AS app -COPY composer.json composer.lock ./ + ARG UID=1000 + ARG GID=1000 -# Install production dependencies only, skip scripts (they run at runtime) -RUN composer install \ - --no-dev \ - --no-scripts \ - --no-interaction \ - --prefer-dist \ - --optimize-autoloader \ - --ignore-platform-req=ext-intl \ - --ignore-platform-req=ext-pcntl \ - --ignore-platform-req=ext-gd \ - --ignore-platform-req=ext-imagick + ENV APP_ENV=production \ + APP_DEBUG=false \ + PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 -################################################################################ -# PHP-FPM runtime image -################################################################################ -FROM php:${PHP_VERSION}-fpm-bullseye AS app + WORKDIR /opt/app -ARG UID=1000 -ARG GID=1000 + RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + git \ + curl \ + libjpeg62-turbo-dev \ + libpng-dev \ + libfreetype6-dev \ + libzip-dev \ + libonig-dev \ + libicu-dev \ + libxml2-dev \ + libmagickwand-dev \ + unzip \ + nano \ + rsync \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) \ + bcmath \ + exif \ + gd \ + intl \ + opcache \ + pcntl \ + pdo_mysql \ + zip \ + && pecl install redis imagick \ + && docker-php-ext-enable redis imagick \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -ENV APP_ENV=production \ - APP_DEBUG=false \ - PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 + COPY . . + COPY --from=vendor /var/www/html/vendor ./vendor + COPY --from=node_builder /var/www/html/public/build ./public/build -WORKDIR /opt/app + COPY docker/php/php.ini /usr/local/etc/php/conf.d/app.ini + COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini + COPY docker/app/entrypoint.sh /usr/local/bin/app-entrypoint + RUN chmod +x /usr/local/bin/app-entrypoint -# Install system dependencies & PHP extensions -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - git \ - curl \ - libjpeg62-turbo-dev \ - libpng-dev \ - libfreetype6-dev \ - libzip-dev \ - libonig-dev \ - libicu-dev \ - libxml2-dev \ - libmagickwand-dev \ - unzip \ - nano \ - rsync \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install -j$(nproc) \ - bcmath \ - exif \ - gd \ - intl \ - opcache \ - pcntl \ - pdo_mysql \ - zip \ - && pecl install redis \ - && pecl install imagick \ - && docker-php-ext-enable redis imagick \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Copy application source -COPY . . - -# Copy vendor dependencies and build artifacts -COPY --from=vendor /var/www/html/vendor ./vendor -COPY --from=node_builder /var/www/html/public/build ./public/build - -# Copy production php.ini overrides if present -COPY docker/php/php.ini /usr/local/etc/php/conf.d/app.ini -COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini - -# Entrypoint prepares deployment directory on persistent volume -COPY docker/app/entrypoint.sh /usr/local/bin/app-entrypoint -RUN chmod +x /usr/local/bin/app-entrypoint - -EXPOSE 9000 - -ENTRYPOINT ["app-entrypoint"] -CMD ["php-fpm"] + EXPOSE 9000 + ENTRYPOINT ["app-entrypoint"] + CMD ["php-fpm"]