ARG PHP_VERSION=8.4 FROM php:${PHP_VERSION}-fpm-alpine # Set working directory WORKDIR /var/www # Install system dependencies RUN apk add --no-cache \ git \ curl \ zip \ unzip \ supervisor \ nginx \ postgresql-dev \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ libwebp-dev \ oniguruma-dev \ libxml2-dev \ linux-headers \ ${PHPIZE_DEPS} # Configure and install PHP extensions RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ && docker-php-ext-install -j$(nproc) \ pdo_pgsql \ pgsql \ mbstring \ exif \ pcntl \ bcmath \ gd \ opcache # Install Redis extension via PECL RUN pecl install redis \ && docker-php-ext-enable redis # Install LibreOffice from community repository RUN apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community \ libreoffice-common \ libreoffice-writer \ libreoffice-calc # Install Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Create system user to run Composer and Artisan Commands RUN addgroup -g 1000 -S www && \ adduser -u 1000 -S www -G www # Copy application files (will be overridden by volume mount in local development) COPY --chown=www:www . /var/www # Copy supervisor configuration COPY docker/supervisor/supervisord.conf /etc/supervisor/supervisord.conf COPY docker/supervisor/conf.d /etc/supervisor/conf.d # Set permissions RUN chown -R www:www /var/www \ && chmod -R 755 /var/www/storage \ && chmod -R 755 /var/www/bootstrap/cache # PHP Configuration for production RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" # Copy PHP custom configuration COPY docker/php/custom.ini $PHP_INI_DIR/conf.d/custom.ini # Configure PHP-FPM to listen on all interfaces (0.0.0.0) instead of just localhost # This is needed for nginx running in a separate container to reach PHP-FPM RUN sed -i 's/listen = 127.0.0.1:9000/listen = 9000/' /usr/local/etc/php-fpm.d/www.conf # Expose port 9000 for PHP-FPM EXPOSE 9000 # Create directories for supervisor logs RUN mkdir -p /var/log/supervisor # Start supervisor (which will manage both PHP-FPM and Laravel queue workers) CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]