[Laravel/Docker]php-fpmでlaravelを実行するワンライナー

カテゴリ: Docker, Laravel, PHP

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
Amazonでポイントを賢くGETする方法
Amazonギフト券チャージ で最大2.5%もお得!
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。