1. fyui_001

    No comment

    fyui_001
Changes in body
Source | HTML | Preview
@@ -1,126 +1,127 @@
# アプリケーションサーバーの新潮流
昨今の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・アプリケーションサーバーを使った。サンプルを作ってみました。
おもしろいですが、不安定なのでプロダクション環境ではあまり使うのはおすすめできないですね。
+## 参考文献
+https://nextat.co.jp/staff/archives/235