# Dockerfile für PHP-FPM FROM php:8.4-fpm AS base # System-Abhängigkeiten: Werden selten geändert, daher ein eigener Layer RUN apt-get update && apt-get install -y \ git \ unzip \ libzip-dev \ zip \ libpng-dev \ libjpeg-dev \ libfreetype6-dev \ libwebp-dev \ libavif-dev \ libxpm-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN docker-php-ext-configure gd \ --with-freetype \ --with-jpeg \ --with-webp \ --with-avif \ --with-xpm \ && docker-php-ext-install -j$(nproc) gd RUN docker-php-ext-install -j$(nproc) \ zip \ pdo \ pdo_mysql \ opcache \ pcntl \ posix \ shmop RUN pecl install apcu \ && docker-php-ext-enable apcu # Composer installieren RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/composer # Installiere Xdebug nur im Entwicklungsmodus ARG ENV=prod RUN if [ "$ENV" = "dev" ]; then \ pecl install xdebug \ && docker-php-ext-enable xdebug; \ fi WORKDIR /var/www/html # Kopiere composer.json COPY composer.json ./ # Kopiere composer.lock falls vorhanden (robuste Lösung) COPY composer.loc[k] ./ # Falls keine composer.lock existiert, erstelle eine leere um Layer-Caching zu ermöglichen RUN [ ! -f composer.lock ] && touch composer.lock || true # Remove potentially corrupted composer.lock and install dependencies RUN rm -f composer.lock && \ if [ "$ENV" = "prod" ]; then \ composer install --no-dev --no-scripts --no-autoloader --optimize-autoloader; \ else \ composer install --no-scripts --no-autoloader; \ fi # Kopiere PHP-Konfigurationen COPY docker/php/php.common.ini /usr/local/etc/php/php.common.ini COPY docker/php/php.${ENV}.ini /usr/local/etc/php/php.ini # Wenn dev, kopiere auch xdebug-Konfiguration RUN if [ "$ENV" = "dev" ]; then \ mkdir -p /usr/local/etc/php/conf.d/; \ fi COPY docker/php/xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini # Kopiere den Rest des Projekts COPY . . # Optimiere Autoloader RUN composer dump-autoload --optimize # <<--- ALLE zusätzlichen System-Dateien und chmod noch als root! COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh RUN chmod +x /usr/local/bin/docker-entrypoint.sh # Danach erst den Nutzer wechseln! RUN groupadd -g 1000 appuser && useradd -u 1000 -g appuser -m appuser RUN chown -R appuser:appuser /var/www/html USER appuser RUN mkdir -p /var/www/html/cache && \ chown -R 1000:1000 /var/www/html/cache && \ chmod -R 775 /var/www/html/cache ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] CMD ["php-fpm"]