# Build stage FROM php:5.6-fpm-alpine as composer # Install system dependencies and PHP extensions required for Composer RUN apk add --no-cache \ git \ curl \ zip \ unzip \ libmcrypt \ libmcrypt-dev \ zlib-dev \ libzip-dev \ autoconf \ make \ gcc \ g++ \ && docker-php-ext-install mcrypt mbstring zip \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && composer self-update --1 ENV COMPOSER_ALLOW_SUPERUSER=1 WORKDIR /app COPY composer.* ./ # Install dependencies with Composer (optimize later after full copy) RUN composer config platform.php 5.6.40 \ && composer install --prefer-dist --no-dev --no-scripts --no-autoloader # Copy the rest of the application and optimize autoload COPY . . RUN composer dump-autoload --optimize --no-dev --classmap-authoritative # Production stage FROM php:5.6-fpm-alpine # Install runtime dependencies & build PHP extensions RUN apk add --no-cache \ nginx \ curl \ libpng \ libjpeg-turbo \ freetype \ libzip \ libmcrypt \ zlib \ && apk add --no-cache --virtual .build-deps \ autoconf make gcc g++ \ libpng-dev libjpeg-turbo-dev freetype-dev libzip-dev libmcrypt-dev zlib-dev \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j"$(nproc)" gd pdo pdo_mysql zip mcrypt mbstring opcache \ && docker-php-ext-enable mcrypt \ && apk del .build-deps \ && php -m | grep -i mcrypt # Configure PHP for production RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" \ && 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.interned_strings_buffer=8" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.max_accelerated_files=4000" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.revalidate_freq=60" >> /usr/local/etc/php/conf.d/opcache.ini \ && echo "opcache.fast_shutdown=1" >> /usr/local/etc/php/conf.d/opcache.ini WORKDIR /var/www # Copy vendor & app code from build stage COPY --from=composer /app/vendor ./vendor COPY . . # Set appropriate permissions and create required directories RUN chown -R www-data:www-data storage bootstrap \ && mkdir -p /run/php \ && chown www-data:www-data /run/php \ && php artisan key:generate || true # Healthcheck (FPM listens on 9000; adjust as needed if behind nginx) HEALTHCHECK --interval=30s --timeout=5s CMD php -m > /dev/null || exit 1 EXPOSE 9000 CMD ["php-fpm"]