FROM dunglas/frankenphp:php8.4 ARG USER=app ARG UID=1000 ARG GID=1000 ENV XDG_CONFIG_HOME=/home/${USER}/.config RUN apt update && apt install -y nginx git curl zip unzip supervisor libpq-dev libzip-dev libicu-dev; \ curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh; \ bash nodesource_setup.sh; \ apt install nodejs; \ pecl install xdebug; \ install-php-extensions pdo_pgsql; \ install-php-extensions zip; \ install-php-extensions bcmath; \ install-php-extensions intl; \ install-php-extensions xdebug; \ install-php-extensions pcntl; \ apt clean; \ rm -rf /var/lib/{apt,dpkg,cache,log}/; \ apt clean autoclean; \ apt autoremove --yes WORKDIR /app COPY --from=composer:lts /usr/bin/composer /usr/local/bin/composer COPY composer.json composer.lock ./ RUN composer install --no-dev --prefer-dist --no-autoloader --optimize-autoloader && rm -rf /root/.composer/cache/* COPY ./ ./ RUN groupadd -g ${GID} ${USER}; \ useradd -m -u ${UID} -g ${GID} ${USER}; \ setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp; \ mkdir -p /home/${USER}/.config; \ chown -R ${UID}:${GID} /data/caddy; \ chown -R ${UID}:${GID} /config/caddy; \ chown -R ${UID}:${GID} /app; \ chown -R ${UID}:${GID} /home/${USER}; USER ${USER} RUN composer dump-autoload; \ npm install; \ npm run build; \ npm cache clean --force; \ rm -rf node_modules; \ rm -rf /tmp/* /var/tmp/* EXPOSE 80 ENTRYPOINT ["php", "artisan", "octane:frankenphp", "--port=80"]