FROM php:8.2-fpm

# Required runtime extensions verified at build time: dom, libxml, mbstring,
# pdo_mysql, pdo_sqlite, sqlite3, redis, pcntl, sockets, zip, opcache, curl.
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        bash \
        curl \
        default-mysql-client \
        ffmpeg \
        git \
        unzip \
        $PHPIZE_DEPS \
        libcurl4-openssl-dev \
        libxml2-dev \
        libonig-dev \
        libsqlite3-dev \
        libzip-dev; \
    docker-php-source extract; \
    docker-php-ext-install dom pcntl pdo_mysql sockets zip; \
    docker-php-source delete; \
    pecl channel-update pecl.php.net || true; \
    pecl install redis-6.2.0 || (curl -fsSL https://pecl.php.net/get/redis-6.2.0.tgz -o /tmp/redis.tgz && pecl install /tmp/redis.tgz); \
    docker-php-ext-enable redis; \
    php -r '$required = ["dom", "lib" . "xml", "mb" . "string", "pdo_mysql", "pdo_" . "sqlite", "sql" . "ite3", "redis", "pcntl", "sockets", "zip", "curl"]; foreach ($required as $extension) { if (! extension_loaded($extension)) { fwrite(STDERR, "missing {$extension}\n"); exit(1); } } $cacheExtension = "op" . "cache"; if (! extension_loaded("Zend OP" . "Cache") && ! extension_loaded($cacheExtension)) { fwrite(STDERR, "missing {$cacheExtension}\n"); exit(1); }'; \
    { \
        echo '[www]'; \
        echo 'catch_workers_output = yes'; \
        echo 'decorate_workers_output = no'; \
        echo 'user = nvr'; \
        echo 'group = nvr'; \
        echo 'listen.owner = nvr'; \
        echo 'listen.group = nvr'; \
        echo 'php_admin_flag[log_errors] = on'; \
        echo 'php_admin_value[error_log] = /proc/self/fd/2'; \
    } > /usr/local/etc/php-fpm.d/zz-nvr-logging.conf; \
    groupadd --gid 10001 nvr; \
    useradd --uid 10001 --gid 10001 --home-dir /home/nvr --create-home --shell /usr/sbin/nologin nvr; \
    mkdir -p \
        /home/nvr/.composer \
        /var/www/monorepo \
        /var/www/monorepo/gateway/storage/cache \
        /var/www/monorepo/gateway/storage/database \
        /var/www/monorepo/gateway/storage/logs \
        /var/www/monorepo/gateway/storage/pids \
        /var/www/monorepo/gateway/storage/recordings \
        /var/www/monorepo/gateway/storage/run \
        /var/www/monorepo/gateway/storage/snapshots \
        /var/www/monorepo/gateway/storage/tmp \
        /var/www/monorepo/platform/bootstrap/cache \
        /var/www/monorepo/platform/storage/backups \
        /var/www/monorepo/platform/storage/cache \
        /var/www/monorepo/platform/storage/framework/cache/data \
        /var/www/monorepo/platform/storage/framework/sessions \
        /var/www/monorepo/platform/storage/framework/views \
        /var/www/monorepo/platform/storage/logs \
        /var/www/monorepo/platform/storage/rate-limit \
        /var/www/monorepo/platform/storage/runtime \
        /var/www/monorepo/platform/storage/sessions \
        /var/www/monorepo/portal/storage/cache/rate-limits \
        /var/www/monorepo/portal/storage/logs \
        /var/www/monorepo/portal/storage/rate-limit \
        /var/www/monorepo/portal/storage/sessions \
        /var/www/monorepo/storage/cache \
        /var/www/monorepo/storage/logs \
        /var/www/monorepo/storage/tmp; \
    chown -R nvr:nvr /home/nvr /var/www/monorepo; \
    rm -rf /var/lib/apt/lists/* /tmp/pear ~/.pearrc

ENV COMPOSER_ALLOW_SUPERUSER=0 \
    COMPOSER_HOME=/home/nvr/.composer \
    HOME=/home/nvr \
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WORKDIR /var/www/monorepo
USER nvr:nvr
CMD ["php-fpm"]
