composer.jsonにdockerコマンドを書いておくことで、laravelのプロジェクトを(PHPのビルトインサーバではなく)php-fpmを使ってコマンド1つで起動させることができます。
作業手順
まずcomposer.json
に下記の行を追加します。
"scripts": {
...
"php-fpm": [
"docker run --rm --name=php-laravel --volume=$(pwd):/code -p 9100:9000 php:7.4-fpm php-fpm"
]
}
プロジェクトルートでcomposer php-fpm
コマンドを実行するだけで、php-fpm経由でlaravelを起動させることができました。
$ composer php-fpm
> docker run --rm --name=php-laravel --volume=$(pwd):/code -p 9100:9000 php:7.4-fpm php-fpm
[16-Mar-2020 07:43:50] NOTICE: fpm is running, pid 1
[16-Mar-2020 07:43:50] NOTICE: ready to handle connections
起動したphp-fpmは、cgi-fcgi
コマンドで動作確認できます。
$ SCRIPT_NAME=index.php SCRIPT_FILENAME=/code/public/index.php \
REQUEST_METHOD=GET cgi-fcgi -bind -connect 127.0.0.1:9100
X-Powered-By: PHP/7.4.3
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, private
Date: Mon, 16 Mar 2020 07:40:29 GMT
Set-Cookie: XSRF-TOKEN=...
Set-Cookie: laravel_session=...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
...
compooserはデフォルトでタイムアウトが300秒に設定されています。このためcomposer php-fpm
を実行してから5分経つと下記のエラーが出ますが、php-fpm自体は引き続き動作しています。
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "docker run --rm --name=php --volume=$(pwd):/code -p 9100:9000 php:7.4-fpm php-fpm" exceeded the timeout of 300 seconds.
終了させたい場合はstopコマンドを実行します。
docker stop php-laravel
cgi-fcgiコマンドのインストール
cgi-fcgi
コマンドは下記のコマンドでインストールできます。
- macOSの場合
brew install fcgi
- CentOSの場合
sudo yum install fcgi -y
こちらもおススメ