From 1fe08b17f2f168b088a37bd0041d9980ab60e50c Mon Sep 17 00:00:00 2001 From: Joanhey Date: Fri, 8 Aug 2025 10:12:06 +0200 Subject: [PATCH 1/6] [php] Laravel Octane with RoadRunner --- .../PHP/laravel/deploy/roadrunner/.rr.yaml | 15 +++---- .../laravel/deploy/roadrunner/composer.json | 45 ------------------- .../PHP/laravel/laravel-roadrunner.dockerfile | 24 ++++------ 3 files changed, 16 insertions(+), 68 deletions(-) delete mode 100644 frameworks/PHP/laravel/deploy/roadrunner/composer.json diff --git a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml index bd19a378b20..5fa0c769fa4 100644 --- a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml +++ b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml @@ -2,22 +2,21 @@ version: "3" #https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml +#server: +# command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///usr/local/var/run/rr-rpc.sock" +# relay: "unix:///usr/local/var/run/rr-rpc.sock" server: - command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///usr/local/var/run/rr-rpc.sock" - relay: "unix:///usr/local/var/run/rr-rpc.sock" + command: "php artisan octane:roadrunner --server" logs: mode: production level: error http: address: 0.0.0.0:8080 middleware: ["headers"] + headers: + response: + Server: "RoadRunner" pool: #max_jobs: 64 # feel free to change this supervisor: exec_ttl: 60s - headers: - response: - Server: "RoadRunner" - - - diff --git a/frameworks/PHP/laravel/deploy/roadrunner/composer.json b/frameworks/PHP/laravel/deploy/roadrunner/composer.json deleted file mode 100644 index c3528e5e4e3..00000000000 --- a/frameworks/PHP/laravel/deploy/roadrunner/composer.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "laravel/laravel", - "type": "project", - "description": "The Laravel Framework.", - "keywords": [ - "framework", - "laravel" - ], - "license": "MIT", - "require": { - "laravel/framework": "^9", - "nyholm/psr7": "*", - "spiral/roadrunner": "^2.11", - "spiral/roadrunner-laravel": "^5.9" - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "autoload": { - "psr-4": { - "App\\": "app/" - } - }, - "minimum-stability": "dev", - "prefer-stable": true, - "scripts": { - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ], - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate --ansi" - ] - } -} diff --git a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile index 33c7067c7b0..737bf96bad3 100644 --- a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile +++ b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile @@ -1,10 +1,10 @@ -FROM php:8.3-cli +FROM php:8.4-cli RUN docker-php-ext-install pdo_mysql pcntl opcache sockets > /dev/null RUN echo "opcache.enable_cli=1" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini -#RUN echo "opcache.jit=1205" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini -#RUN echo "opcache.jit_buffer_size=128M" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini +RUN echo "opcache.jit=1205" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini +RUN echo "opcache.jit_buffer_size=128M" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini WORKDIR /laravel COPY --link . . @@ -18,21 +18,15 @@ RUN mkdir -p bootstrap/cache \ RUN apt-get update > /dev/null && \ apt-get install -yqq curl unzip > /dev/null -COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer +RUN pecl install protobuf > /dev/null && echo "extension=protobuf.so" > /usr/local/etc/php/conf.d/protobuf.ini -COPY --link deploy/roadrunner/composer.json . -COPY --link deploy/roadrunner/.rr.yaml . +COPY --from=composer/composer:latest-bin --link /composer /usr/local/bin/composer -RUN composer install -a --no-dev --quiet +RUN composer require laravel/octane --update-no-dev --no-scripts --quiet +RUN php artisan octane:install --server="roadrunner" RUN php artisan optimize -# install roadrunner -COPY --from=ghcr.io/roadrunner-server/roadrunner:2023.3 --link /usr/bin/rr /usr/local/bin/rr - -RUN php artisan vendor:publish --provider='Spiral\RoadRunnerLaravel\ServiceProvider' --tag=config -RUN rr -v - EXPOSE 8080 -# CMD bash -CMD rr serve -c .rr.yaml +# https://artisan.page/12.x/ +ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] From b8c3b764981ef07f857b4fdccc690ccab039d824 Mon Sep 17 00:00:00 2001 From: Joanhey Date: Fri, 8 Aug 2025 10:49:30 +0200 Subject: [PATCH 2/6] More max-requests --- frameworks/PHP/laravel/laravel-roadrunner.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile index 737bf96bad3..3b7ad61ec07 100644 --- a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile +++ b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile @@ -29,4 +29,4 @@ RUN php artisan optimize EXPOSE 8080 # https://artisan.page/12.x/ -ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] +ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--workers=auto", "--task-workers=auto", "--max-requests=10000", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] From 95546ab43b892a7c1ae28a2fedeb5e51f1a40186 Mon Sep 17 00:00:00 2001 From: Joanhey Date: Fri, 8 Aug 2025 11:36:02 +0200 Subject: [PATCH 3/6] Bypass Octane and use rr serve --- .../PHP/laravel/deploy/roadrunner/.rr.yaml | 43 ++++++++++++------- .../PHP/laravel/laravel-roadrunner.dockerfile | 3 +- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml index 5fa0c769fa4..317ffb0ea32 100644 --- a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml +++ b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml @@ -1,22 +1,35 @@ -# see https://roadrunner.dev/docs/intro-config +# see https://docs.roadrunner.dev/docs/general/config +# https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml + version: "3" -#https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml -#server: -# command: "php ./vendor/bin/rr-worker start --relay-dsn unix:///usr/local/var/run/rr-rpc.sock" -# relay: "unix:///usr/local/var/run/rr-rpc.sock" -server: - command: "php artisan octane:roadrunner --server" -logs: - mode: production - level: error http: address: 0.0.0.0:8080 - middleware: ["headers"] - headers: - response: - Server: "RoadRunner" pool: - #max_jobs: 64 # feel free to change this + num_workers: 0 + max_jobs: 500 # feel free to change this supervisor: exec_ttl: 60s + headers: + response: + Server: "RoadRunner" + middleware: ["headers"] + +server: + command: "php /laravel/vendor/bin/roadrunner-worker" + #command: "php /laravel/vendor/bin/roadrunner-worker start --relay-dsn unix:///usr/local/var/run/rr-rpc.sock" + #relay: "unix:///usr/local/var/run/rr-rpc.sock" + + env: + - APP_ENV: production + - APP_BASE_PATH: "/laravel" + - LARAVEL_OCTANE: "1" + +rpc: + listen: tcp://127.0.0.1:6001 + +logs: + mode: production + level: error + output: stdout + #encoding: json diff --git a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile index 3b7ad61ec07..9a0c3aed98b 100644 --- a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile +++ b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile @@ -29,4 +29,5 @@ RUN php artisan optimize EXPOSE 8080 # https://artisan.page/12.x/ -ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--workers=auto", "--task-workers=auto", "--max-requests=10000", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] +#ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--workers=auto", "--max-requests=10000", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] +ENTRYPOINT ["/laravel/rr", "serve", "-c", "/laravel/deploy/roadrunner/.rr.yaml"] From d7238fb11aa0f227c721907301f7792440b9bffd Mon Sep 17 00:00:00 2001 From: Joanhey Date: Fri, 8 Aug 2025 12:51:40 +0200 Subject: [PATCH 4/6] Add Octane config to set max_requests to 10.000 --- frameworks/PHP/laravel/config/octane.php | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 frameworks/PHP/laravel/config/octane.php diff --git a/frameworks/PHP/laravel/config/octane.php b/frameworks/PHP/laravel/config/octane.php new file mode 100644 index 00000000000..0d38933a1e9 --- /dev/null +++ b/frameworks/PHP/laravel/config/octane.php @@ -0,0 +1,8 @@ + [ + 'max_requests' => 10000, // Reload workers after requests + ], +]; + From 3ccef7c8b0e4b9ac46b440946d3c1c029bc18c3b Mon Sep 17 00:00:00 2001 From: Joanhey Date: Fri, 8 Aug 2025 12:59:26 +0200 Subject: [PATCH 5/6] Max jobs 0 --- frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml index 317ffb0ea32..e1b9eaa98e9 100644 --- a/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml +++ b/frameworks/PHP/laravel/deploy/roadrunner/.rr.yaml @@ -7,7 +7,7 @@ http: address: 0.0.0.0:8080 pool: num_workers: 0 - max_jobs: 500 # feel free to change this + max_jobs: 0 supervisor: exec_ttl: 60s headers: From 805117be6b62930566d33fc13b9b90ab14da7d7a Mon Sep 17 00:00:00 2001 From: Joan Miquel Date: Tue, 12 Aug 2025 18:08:08 +0200 Subject: [PATCH 6/6] Small change to rerun CI --- frameworks/PHP/laravel/laravel-roadrunner.dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile index 9a0c3aed98b..a32aea19107 100644 --- a/frameworks/PHP/laravel/laravel-roadrunner.dockerfile +++ b/frameworks/PHP/laravel/laravel-roadrunner.dockerfile @@ -31,3 +31,4 @@ EXPOSE 8080 # https://artisan.page/12.x/ #ENTRYPOINT ["php", "artisan", "octane:roadrunner", "--host=0.0.0.0", "--port=8080", "--workers=auto", "--max-requests=10000", "--rr-config=/laravel/deploy/roadrunner/.rr.yaml"] ENTRYPOINT ["/laravel/rr", "serve", "-c", "/laravel/deploy/roadrunner/.rr.yaml"] +