FROM composer:2 AS builder WORKDIR /app COPY composer.json composer.lock ./ RUN composer install \ --no-dev \ --no-scripts \ --no-interaction \ --optimize-autoloader \ --prefer-dist \ --ignore-platform-reqs COPY . . RUN composer dump-autoload --optimize --no-dev --ignore-platform-reqs FROM dunglas/frankenphp:php8.4-alpine COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions \ && apk add --no-cache git curl \ && install-php-extensions \ pdo_mysql \ redis \ bcmath \ gd \ intl \ zip \ opcache \ pcntl \ sockets \ exif RUN deluser www-data 2>/dev/null || true \ && delgroup www-data 2>/dev/null || true \ && addgroup -g 1000 www-data \ && adduser -u 1000 -G www-data -s /bin/sh -D www-data WORKDIR /var/www/html COPY --from=builder --chown=www-data:www-data /app . RUN mkdir -p storage/logs storage/framework/cache storage/framework/sessions \ storage/framework/views bootstrap/cache \ && chown -R www-data:www-data storage bootstrap/cache \ && chmod -R 775 storage bootstrap/cache COPY docker/app/php.ini /usr/local/etc/php/conf.d/zz-app.ini USER www-data EXPOSE 80 CMD ["php", "artisan", "octane:start", "--server=frankenphp", "--host=0.0.0.0", "--port=80", "--admin-port=2019", "--workers=auto"]