1. fyui_001

    Posted

    fyui_001
Changes in title
+Golang製PHPアプリケーションサーバRoadRunnerを試す
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,126 @@
+# アプリケーションサーバーの新潮流
+
+昨今のPHP界隈では、[Swoole](https://www.swoole.co.uk/)に代表されるように、よくあるApache+mod_phpやPHP-FPMによる従来の構成と異なる実行方法を持つPHPのためのHTTPサーバまたはアプリケーションサーバが少しずつ注目を集めるようになっています。
+
+# RoadRunner
+
+RoadRunnerもそんな新興のアプリケーションサーバの1つで、Go言語で書かれています。 HTTPのリクエストを前段のGoのHTTPハンドラがさばき、ロードバランサ/プロセスマネージャがPHPのWorkerにリクエストを割り振るという構成になっています。
+
+通常のHTTPサーバだけでなく、RoadRunnerによる[gRPCサーバ](https://github.com/spiral/php-grpc)の実装も公開されており、PHPの新しい可能性を見せてくれています。
+
+# RoadRunnerを試す
+
+RoadRunnerはLaravelもサーポートしており、Laravel用のパッケージも開発されているので
+
+今回は[これ](https://github.com/fyui001/laravel-admin-sample)をベースにRoadRunner実装していきたいと思います。
+
+## RoadRunnerのインストール
+
+まずは下記コマンドでパッケージのインストールを行います。
+
+```shell
+# roadrunner
+composer require spiral/roadrunner "^1.8"
+# roadrunner-laravel
+composer require spiral/roadrunner-laravel "^3.4"
+```
+
+次に、下記コマンドを実行してパッケージ構成ファイル(./config/roadrunner.php)を作ります。
+
+```shell
+php artisan vendor:publish --provider='Spiral\RoadRunnerLaravel\ServiceProvider' --tag=config
+```
+
+## .rr.ymlの作成
+
+roadrunnerの設定ymlファイルを書きます。
+
+80番ポートで起動するように設定します。
+
+```yml
+env:
+ APP_REFRESH: true
+http:
+ address: 0.0.0.0:80
+ http2:
+ enabled: true
+ h2c: true
+ maxConcurrentStreams: 128
+ workers:
+ command: 'php ./vendor/bin/rr-worker'
+static:
+ dir: public
+reload:
+ interval: 1s
+ patterns: [ '.php' ]
+ services:
+ http:
+ dirs: [ '' ]
+ recursive: true
+```
+
+## 諸々の微修正
+
+logging.php
+
+```php
+'stdout' => [
+ 'driver' => 'monolog',
+ 'handler' => StreamHandler::class,
+ 'with' => [
+ //php://stdoutにするとエラーになってコケるのでphp://stderrに変える
+ 'stream' => 'php://stderr',
+ ],
+ 'level' => 'debug',
+],
+```
+
+composer.jsonにscriptを追加する。
+
+```json
+"scripts": {
+ "roadrunner:dev": [
+ "composer dump-autoload",
+ "./rr serve -v -d"
+ ],
+ "roadrunner:prod": [
+ "./rr serve"
+ ],
+ "roadrunner:setup": [
+ "rr get-binary"
+ ],
+ }
+```
+
+startup.shに起動コマンドを乗せる
+
+```shell
+# roadrunner
+composer roadrunner:setup
+chmod +x rr
+composer roadrunner:dev
+```
+
+これで大体の設定は完了しました。
+
+# 起動してみる
+
+以下の手順で起動させます。
+
+```shell
+cp docker-compose.example.yml docker-compose.yml
+
+docker-compose up -d
+```
+
+無事に起動できました。
+
+<img width="1631" alt="スクリーンショット 2020-11-27 12.59.30.png (168.6 kB)" src="https://img.esa.io/uploads/production/attachments/13671/2020/11/27/54828/d039de94-d605-434d-b87c-607d5bf78ae4.png">
+
+
+# まとめ
+
+今回はGolangで作られたPHPのweb・アプリケーションサーバーを使った。サンプルを作ってみました。
+おもしろいですが、不安定なのでプロダクション環境ではあまり使うのはおすすめできないですね。
+
+