Laravel Octane
Laravel Octaneは、アプリケーションの起動後全ての処理をメモリ上にロードした状態を維持しリクエスト間で使い回すことによって、高速なアプリケーションを提供するツールです。
SwooleやOpenSwooleなどを使った非同期処理のアプリケーションサーバーに載せることができます。またApacheやNginx不要でWebサーバーを建てることができます。
そこで今回はこの「Laravel Octane」をDockerで動かしてみました。
やってみる
ディレクトリ構成
├── octane-server
│ ├── app
│ ├── bootstrap
│ ...
│
└── Dockerfile
とりあえず公式の手順に従ってLaravelのプロジェクトを作成します。
$ composer create-project laravel/laravel octane-server
$ cd octane-server
次にLaravel Octaneのインストール手順に従いcomposerにoctaneを追加します。
$composer require laravel/octane
(実際にはローカルでも試しましたが)Dockerfileをこんな感じで書きました。
FROM php:8.3
RUN apt-get update
RUN pecl install swoole && docker-php-ext-enable swoole
COPY ./octane-server /app
WORKDIR /app
ENV COMPOSER_ALLOW_SUPERUSER=1
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN composer install
RUN php artisan octane:install --server=swoole
RUN docker-php-ext-install pcntl
ENTRYPOINT [ "php", "artisan", "octane:start", "--host", "0.0.0.0"]
1.RUN pecl install swoole && docker-php-ext-enable swoole
Laravel OctaneはFrankenPHP, Swoole, OpenSwoole, RoadRunnerからWebサーバーを選択できます。今回は、たまたまSwooleの本を読んでいたのでSwooleにしました。
SwooleはPHPのPECL拡張なので、インストールと有効化を済ませる必要があります。
PHP official imageを使用したので、提供されるコマンドで有効化します。
2.RUN php artisan octane:install --server=swoole
オプションでswooleを指定します。
3.RUN docker-php-ext-install pcntl
pctnlはPHPのプロセス制御を行う機能で非同期処理の実行に必要なようです。
4.ENTRYPOINT [ "php", "artisan", "octane:start", "--host", "0.0.0.0"]
ENTRYPOINTでサーバーを立ち上げます。Octaneはデフォルトではport8000でサーバーを起動します。ホストは0.0.0.0を指定しないとアクセスできません。
ビルドして立ち上げ、http://127.0.0.1:8000
にアクセスしLaravelの画面が開けると成功です
$ docker build . -t octane-server
$ docker run -p 8000:8000 octane-server
INFO Server running…
Local: http://0.0.0.0:8000
Press Ctrl+C to stop the server
200 GET / .............................................. 21.26 mb 36.45 ms
さいごに
Laravel Octaneは、アプリケーションの起動後全ての処理をメモリ上にロードした状態を> 維持し、リクエスト間で使い回すことによって高速なアプリケーションを提供するツールです。
このような仕組みの関係上、実装上注意する点もありそう(依存注入とOctane)だったり、情報がまだ乏しいのは欠点ですが、Laravelで超高速なサーバーを構築できるのは魅力的だと思いました。
参考資料
以下の記事や書籍を参考にさせていただきました。ありがとうございます。
Swooleで学ぶPHP非同期処理 ~並行処理/並列処理の基礎から実践的な開発手法まで一気にわかる