# Use the RoadRunner image as a base for the first stage FROM ghcr.io/roadrunner-server/roadrunner:2025.1.6 AS roadrunner # Use the official Composer image as the base for the library stage FROM siteworxpro/composer AS library # Add Composer configuration files to the working directory ADD composer.json composer.lock ./ # Install PHP dependencies, ignoring platform requirements and excluding development dependencies RUN composer install --optimize-autoloader --ignore-platform-reqs --no-dev # Use the official PHP CLI image with Alpine Linux for the second stage FROM siteworxpro/php:8.5.1-cli-alpine AS php ARG KAFKA_ENABLED=0 ARG USER=appuser ARG UID=1000 # Move the production PHP configuration file to the default location RUN mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \ && apk add libpq-dev linux-headers --no-cache \ && docker-php-ext-install pdo_pgsql sockets pcntl \ && rm -rf /var/cache/apk/* RUN if [ "$KAFKA_ENABLED" -eq 1 ] ; then \ echo "Kafka support enabled" ; \ apk add autoconf g++ librdkafka-dev make --no-cache ; \ pecl install rdkafka && docker-php-ext-enable rdkafka ; \ apk del autoconf g++ make ; \ else \ echo "Kafka support disabled" ; \ exit 0 ; \ fi # Set the working directory to /app WORKDIR /app # Copy the RoadRunner binary from the first stage to the second stage COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr # Copy the installed PHP dependencies from the library stage COPY --from=library /app/vendor /app/vendor # Copy the RoadRunner configuration file and source ADD src src/ ADD generated generated/ ADD protos protos/ ADD server.php cli.php grpc-worker.php .rr.yaml config.php ./ EXPOSE 9501 9001 # Create a non-root user and set ownership of the /app directory RUN if [ ! $UID -eq 0 ] ; then addgroup -g $UID $USER && adduser -D -u $UID -G $USER $USER && chown -R $USER:$USER /app ; fi USER $USER HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \ CMD curl -f http://localhost:9501/healthz || exit 1 # Entrypoint command to run the RoadRunner server with the specified configuration ENTRYPOINT ["rr", "serve"] CMD ["-c", ".rr.yaml", "-s"]