# docker/common/php-fpm/Dockerfile # Stage 1: Build environment and Composer dependencies FROM php:8.4-fpm AS builder # Install system dependencies and PHP extensions required for Laravel + MySQL/PostgreSQL support RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ unzip \ libpq-dev \ libonig-dev \ libssl-dev \ libxml2-dev \ libcurl4-openssl-dev \ libicu-dev \ libzip-dev \ && docker-php-ext-install -j"$(nproc)" \ pdo_mysql \ pdo_pgsql \ pgsql \ opcache \ intl \ zip \ bcmath \ soap \ && pecl install redis \ && docker-php-ext-enable redis \ && apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Arbeitsverzeichnis WORKDIR /var/www # Kompletten Code kopieren (für composer-Skripte wie artisan package:discover) COPY . /var/www # Composer installieren und Dependencies holen RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && composer install --no-dev --optimize-autoloader --no-interaction --no-progress --prefer-dist # Stage 2: Development image (einziger Runtime-Stage) FROM builder AS development # Xdebug / Dev-Settings ARG XDEBUG_ENABLED=true ARG XDEBUG_MODE=develop,coverage,debug,profile ARG XDEBUG_HOST=host.docker.internal ARG XDEBUG_IDE_KEY=DOCKER ARG XDEBUG_LOG=/dev/stdout ARG XDEBUG_LOG_LEVEL=0 # User/Group-IDs für die Rechte-Synchronisierung ARG UID=1000 ARG GID=1000 USER root # Xdebug konfigurieren, falls aktiviert RUN if [ "${XDEBUG_ENABLED}" = "true" ]; then \ pecl install xdebug && \ docker-php-ext-enable xdebug && \ { \ echo "xdebug.mode=${XDEBUG_MODE}"; \ echo "xdebug.idekey=${XDEBUG_IDE_KEY}"; \ echo "xdebug.log=${XDEBUG_LOG}"; \ echo "xdebug.log_level=${XDEBUG_LOG_LEVEL}"; \ echo "xdebug.client_host=${XDEBUG_HOST}"; \ echo "xdebug.start_with_request=yes"; \ } >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ; \ fi # User/Gruppe anlegen (oder existierende Gruppe wiederverwenden) RUN if getent group "${GID}" >/dev/null; then \ group_name="$(getent group "${GID}" | cut -d: -f1)"; \ useradd -m -u "${UID}" -g "${GID}" -s /bin/bash www; \ else \ groupadd -g "${GID}" www && \ useradd -m -u "${UID}" -g www -s /bin/bash www; \ group_name=www; \ fi \ && sed -i "s/user = www-data/user = www/g" /usr/local/etc/php-fpm.d/www.conf \ && sed -i "s/group = www-data/group = ${group_name}/g" /usr/local/etc/php-fpm.d/www.conf # Arbeitsverzeichnis WORKDIR /var/www # neuen Entry-Point für Dev-Container verwenden COPY ./docker/php-fpm/entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh # Zurück auf unprivilegierten User USER www ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] EXPOSE 9000 CMD ["php-fpm"]