FROM node:20-alpine AS node-build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM php:8.2-cli-alpine AS composer COPY --from=composer:2 /usr/bin/composer /usr/bin/composer WORKDIR /app COPY composer.json composer.lock ./ RUN composer install --no-dev --optimize-autoloader --no-scripts \ --ignore-platform-req=ext-gd \ --ignore-platform-req=ext-zip COPY . . RUN composer install --no-dev --optimize-autoloader \ --ignore-platform-req=ext-gd \ --ignore-platform-req=ext-zip FROM php:8.2-fpm-alpine AS ext-builder RUN apk add --no-cache \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ libzip-dev \ icu-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ pdo_mysql \ gd \ zip \ intl \ bcmath FROM php:8.2-fpm-alpine AS runtime RUN apk add --no-cache \ libpng \ libjpeg-turbo \ freetype \ libzip \ icu-libs \ mariadb-client \ su-exec COPY --from=ext-builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ COPY --from=ext-builder /usr/local/etc/php/conf.d/docker-php-ext-*.ini /usr/local/etc/php/conf.d/ RUN addgroup -g 1001 -S app && adduser -S app -u 1001 -G app WORKDIR /var/www/html COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/docker-entrypoint.sh COPY --chown=app:app . . COPY --from=composer --chown=app:app /app/vendor ./vendor COPY --from=node-build --chown=app:app /app/public/build ./public/build ENTRYPOINT ["docker-entrypoint.sh"] CMD ["php-fpm"]