# syntax=docker/dockerfile:1.7 FROM composer:2 AS vendor WORKDIR /app COPY composer.json composer.lock ./ RUN composer install \ --no-dev \ --prefer-dist \ --no-interaction \ --no-progress \ --no-scripts COPY . . RUN composer dump-autoload --optimize --no-dev \ && php artisan package:discover --ansi FROM node:20-alpine AS frontend WORKDIR /app COPY --from=vendor /app /app RUN npm ci && npm run build FROM php:8.2-apache AS runtime ENV APACHE_DOCUMENT_ROOT=/var/www/html/public RUN apt-get update \ && apt-get install -y --no-install-recommends \ libonig-dev \ libsqlite3-dev \ libzip-dev \ unzip \ && docker-php-ext-install \ mbstring \ opcache \ pdo_mysql \ pdo_sqlite \ zip \ && a2enmod expires headers rewrite \ && rm -rf /var/lib/apt/lists/* WORKDIR /var/www/html COPY --from=vendor /app /var/www/html COPY --from=frontend /app/public/build /var/www/html/public/build COPY docker/apache/000-default.conf /etc/apache2/sites-available/000-default.conf COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini COPY docker/entrypoint.sh /usr/local/bin/app-entrypoint RUN chmod +x /usr/local/bin/app-entrypoint \ && mkdir -p storage/framework/cache/data storage/framework/sessions storage/framework/views bootstrap/cache \ && chown -R www-data:www-data storage bootstrap/cache EXPOSE 80 ENTRYPOINT ["app-entrypoint"] CMD ["apache2-foreground"]