t-podcast/docker/php/Dockerfile

66 lines
2.7 KiB
Docker

FROM php:8.3-fpm
# Systempakete
RUN apt-get update && apt-get install -y \
git unzip libzip-dev libicu-dev libpng-dev libonig-dev libxml2-dev netcat-openbsd \
libjpeg62-turbo-dev libfreetype6-dev libwebp-dev libssl-dev locales rsync curl ffmpeg \
&& docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \
&& docker-php-ext-install -j"$(nproc)" intl zip pdo_mysql gd bcmath opcache pcntl exif \
&& rm -rf /var/lib/apt/lists/*
# --- NEU: Node.js & NPM installieren ---
# Wir nutzen das offizielle NodeSource Setup Script für Version 20 (LTS)
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs
# Redis-Extension
RUN pecl install redis && docker-php-ext-enable redis
# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# PHP Produktionseinstellungen
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
&& { \
echo "opcache.enable=1"; \
echo "opcache.enable_cli=1"; \
echo "opcache.memory_consumption=256"; \
echo "opcache.interned_strings_buffer=16"; \
echo "opcache.max_accelerated_files=20000"; \
echo "opcache.validate_timestamps=1"; \
echo "opcache.revalidate_freq=1"; \
echo "opcache.fast_shutdown=1"; \
echo "opcache.jit=0"; \
} >> "$PHP_INI_DIR/php.ini"
RUN echo "upload_max_filesize=2048M" >> /usr/local/etc/php/conf.d/uploads.ini \
&& echo "post_max_size=2048M" >> /usr/local/etc/php/conf.d/uploads.ini
RUN echo "memory_limit=1024M" >> /usr/local/etc/php/conf.d/memory.ini
# PHP-FPM Tuning
RUN mkdir -p /usr/local/etc/php-fpm.d \
&& echo "[www]" > /usr/local/etc/php-fpm.d/www.conf \
&& echo "user = www-data" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "group = www-data" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "listen = 9000" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm = dynamic" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm.max_children = 16" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm.start_servers = 4" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm.min_spare_servers = 4" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm.max_spare_servers = 8" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "pm.max_requests = 500" >> /usr/local/etc/php-fpm.d/www.conf \
&& echo "catch_workers_output = yes" >> /usr/local/etc/php-fpm.d/www.conf
# --- RECHTE-FIX: Auf 1000 anpassen ---
# Wir stellen sicher, dass www-data exakt deine Host-UID/GID 1000 bekommt
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
RUN groupadd -f docker && usermod -aG docker www-data
WORKDIR /var/www/html
RUN mkdir -p /var/www/.npm && chown -R 1000:1000 /var/www/.npm
# Wir starten als www-data
USER www-data