FROM php:8.4-fpm-alpine

ENV TZ="Europe/Prague" \
    PHP_OPCACHE_ENABLE=1 \
    PHP_OPCACHE_VALIDATE_TIMESTAMPS=0 \
    PHP_OPCACHE_REVALIDATE_FREQ=0 \
    PHP_OPCACHE_MEMORY_CONSUMPTION=192 \
    PHP_OPCACHE_MAX_ACCELERATED_FILES=20000 \
    PHP_OPCACHE_MAX_WASTED_PERCENTAGE=10 \
    PHP_OPCACHE_INTERNED_STRINGS_BUFFER=16 \
    APP_ENV=production \
    APP_DEBUG=false

RUN apk add --no-cache \
    tzdata \
    bash \
    ca-certificates \
    libpq \
    libzip \
    imagemagick \
    imagemagick-dev \
    librsvg \
    freetype \
    libjpeg-turbo \
    libpng \
    icu \
    oniguruma \
    libxml2

RUN apk add --no-cache --virtual .build-deps \
    $PHPIZE_DEPS \
    postgresql-dev \
    libzip-dev \
    freetype-dev \
    libjpeg-turbo-dev \
    libpng-dev \
    icu-dev \
    libxml2-dev \
    linux-headers

RUN docker-php-ext-configure \
    gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
    pdo_mysql \
    pdo_pgsql \
    pgsql \
    zip \
    bcmath \
    soap \
    gd \
    intl \
    bcmath \
    opcache \
    sockets \
    pcntl

RUN pecl install imagick \
 && docker-php-ext-enable imagick

RUN apk del .build-deps

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \
    && echo "date.timezone=${TZ}" > "$PHP_INI_DIR/conf.d/99-timezone.ini"

RUN { \
    echo "memory_limit=256M"; \
    echo "upload_max_filesize=100M"; \
    echo "post_max_size=100M"; \
    echo "realpath_cache_size=4096K"; \
    echo "realpath_cache_ttl=600"; \
} > "$PHP_INI_DIR/conf.d/99-laravel.ini"

RUN { \
    echo "[opcache]"; \
    echo "opcache.enable=${PHP_OPCACHE_ENABLE}"; \
    echo "opcache.enable_cli=0"; \
    echo "opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}"; \
    echo "opcache.revalidate_freq=${PHP_OPCACHE_REVALIDATE_FREQ}"; \
    echo "opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}"; \
    echo "opcache.interned_strings_buffer=${PHP_OPCACHE_INTERNED_STRINGS_BUFFER}"; \
    echo "opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}"; \
    echo "opcache.max_wasted_percentage=${PHP_OPCACHE_MAX_WASTED_PERCENTAGE}"; \
    echo "opcache.save_comments=1"; \
} > "$PHP_INI_DIR/conf.d/10-opcache.ini"