Forwarded from The Dragon Code News (Andrey Helldar)
Laravel Octane для тех, кто хочет быстро вкатиться, но не знает с чего начать

Возникла необходимость запустить вышеупомянутый сервис с RoadRunner на одном из проектов, и чтобы не ходить вокруг да около, прилагаю процесс в "сухом" виде:

При разработке под Windows нужно обязательно войти в подсистему Linux (wsl или в контейнер виртуализации), так как под самим Windows запустить RoadRunner можно, но вот Laravel Octane - нет. Причина в использовании функций сигналов, отсутствующих в Windows. Дальше для всех одинаково.



1. Устанавливаем зависимости:

composer require laravel/octane spiral/roadrunner spiral/roadrunner-cli spiral/roadrunner-http


2. Выполняем консольную команду php artisan octane:install выбирая следующие пункты:
2.1. Which app? roadrunner
2.2. Download binary? Yes

Всё. Октан готов к работе. Можете запускать консольную команду php artisan octane:start --watch и наслаждаться им.

Но есть один нюанс, во всяком случае под Windows. Запуская октан в wsl, он не будет сохранять состояние приложения и при каждом обновлении страницы будет его заново инициализировать. Решение очень простое - нужно указать количество воркеров для работы, например, один:

php artisan octane:start --worker=1


Всё. Теперь октан будет гарантированно запоминать состояние. Но есть, опять же, нюанс - если к этой команде добавить параметр --watch, то она упадёт.

Для сравнения, загрузка страницы со списком товаров из базы при старте через artisan serve и с БД в докер-контейнере, занимает у меня около 150-300 мс. Сервис, запущенный из wsl отдаёт данные за 5-7 секунд. Laravel Octane справляется за 41 мс.

Также можно дополнить блок scripts в файле composer.json:

{
    "scripts": {
        // ...
        "post-install-cmd": [
            "@roadrunner"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force",
            "@php artisan vendor:publish --tag=telescope-assets --ansi --force",
            "@roadrunner"
        ],
        "octane": [
            "Composer\\Config::disableProcessTimeout",
            "@php artisan octane:start --watch --workers=1"
        ],
        "roadrunner": [
            "rm -f rr",
            "@php vendor/bin/rr get-binary -o linux"
        ]
    }
}


После этого, при вызовах команд composer install и composer update октан будет автоматически обновляться.

Учтите, что обновление происходит путём скачивания zip архива при помощи curl без пробрасывания авторизационного токена, установленного в Composer, поэтому чревато схватить ошибку 403 API rate limit exceeded.


И вторая команда - composer octane вместо запуска самого октана.

Всё 🙂