# Build stage FROM php:8.3-fpm-alpine AS builder # Install system dependencies RUN apk add --no-cache \ libpng-dev \ oniguruma-dev \ libxml2-dev \ zip \ unzip # Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd opcache # Install Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /var/www/html # Copy composer files COPY composer.json composer.lock ./ # Install dependencies (no dev) RUN composer install --no-dev --no-scripts --no-autoloader --prefer-dist # Copy application COPY . . # Generate optimized autoloader RUN composer dump-autoload --optimize --classmap-authoritative # Production stage FROM php:8.3-fpm-alpine # Install runtime dependencies RUN apk add --no-cache \ libpng-dev \ oniguruma-dev \ libxml2-dev \ nginx \ supervisor # Install PHP extensions RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd opcache WORKDIR /var/www/html # Copy application from builder COPY --from=builder /var/www/html . # Copy nginx config COPY docker/nginx/backend.conf /etc/nginx/http.d/default.conf # Copy supervisord config COPY docker/backend/supervisord.conf /etc/supervisor/conf.d/supervisord.conf # Configure PHP-FPM RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.memory_consumption=128" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.max_accelerated_files=10000" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.validate_timestamps=0" >> /usr/local/etc/php/conf.d/opcache.ini # Set permissions RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache # Expose port 80 EXPOSE 80 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]