LoginSignup
4
2

laravel sail環境は、シングルプロセスです!

Posted at

Laravelで、かんたんに Docker化できる 「Sail」とは

便利なのですが、まずはSailとはなにかを説明します。

Laravel Sail は、Laravel アプリケーションのための軽量な Docker 開発環境です。Sail を使用すると、Docker コンテナの複雑さを抽象化し、Laravel アプリケーションの開発とテストを容易にします。

  1. php
  2. db ( mysqlやmariadbなど)

この2つがセットアップされます。

ここで注意しておきたいのは、webサーバー(nginx とか apacheとか)が存在しません。
実は、PHPにはビルトインウェブサーバーが存在しています。
php.net ビルトインウェブサーバー

PHPのドキュメントにもありますが
このウェブサーバーは単一のシングルスレッドプロセスしか実行しないので、 リクエストがブロックされると、PHP アプリケーションはストールします

ちなみに、以下のコマンドでいつでもWEBサーバーが動きます。

php run serve

Laravel Sail の基本的なセットアップ手順 (すでにプロジェクトがある場合)

Laravel Sail のセットアップ

  1. Laravel インストーラのインストール

Laravel インストーラを使って新しいプロジェクトを作成する場合は、まずインストーラをインストールする必要があります。

terminal
composer require laravel/sail --dev

これで sailは ./vendorに配置される。

Docker 環境の起動

Sail を使用して Docker コンテナを起動します。

./vendor/bin/sail up -d

アプリケーションのアクセスできることを確認

ブラウザで http://localhost

bash
php artisan sail:install

## 以下のDBなどから選択できます。 複数選ぶときは、カンマ区切りで

Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] mariadb
  [3] redis
  [4] memcached
  [5] meilisearch
  [6] minio
  [7] mailhog
  [8] selenium

以上でインストールされます。
docker-compose.yml
が作成されます。

で、ここからが本題です。

認証のリクエストしたら、その中で自分自身を呼び出すようなコーディングしていた場合ですね。
このときもう一つプロセスが立ち上がろうとしていますが、PHPのドキュメントにもあるように、ストール(停止)します。
応答なしとなります。

ここが一番時間がかかりました。ストールするとなんにもエラーログもなんにも出ないです。ストールの怖いところです。

$http = new GuzzleHttp\Client;

$response = $http->post('http://docker.host.internal/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => '2',
        'client_secret' => 'WJFDwSKZBJHoScIfs7WSj4gSsLtV9LU5fmLRK5p8',
        'username' => 'admin@example.com',
        'password' => 'password',
        'scope' => '',
    ],
]);

var_dump(json_decode((string) $response->getBody(), true));

なにか回避方法はないのか?と調べてましたが、ありません。
PHPのドキュメントには、「ビルトインウェブサーバーに実験的にマルチプロセス対応を行っている」という記載があるので、近い将来には実装されるかもしれませんね。

結論、これは、sailでは不可能となります。

素直に、php / nginx という環境にしましょう。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2