PHP 5.6 + Laravel 5.3用のPHPビルトインサーバ起動スクリプト (php artisan serve)

はじめに
===

Amazon EC2 (Amazon Linux) + PHP 5.6 + Laravel 5.3.11用のPHPビルトインサーバ起動スクリプト、停止スクリプトを作成しましたので以下に記します。

LaravelはPHPビルトインサーバを起動する事で、ApacheがなくてもWebサーバを起動する事が出来ます。Apacheの設定を行わずに、手早くLaravelプロジェクトの表示確認を行いたい便利です。

参考資料
===

PHPのビルトインサーバで動かしたい
http://recipes.laravel.jp/recipe/51

実行環境
===

PHP 5.6 + Laravel 5.3.11環境については、以下の手順で作成したAmazon EC2インスタンス(Amazon Linux)を利用しました。

http://qiita.com/na0AaooQ/items/e9b782be01ce6946d7e8

Laravelプロジェクトとして、/var/www/laravel/exampleapp を作成している前提で説明致します。

```
[ec2-user@example-laravel-server ~]$ cd /var/www/laravel
[ec2-user@example-laravel-server laravel]$ pwd
/var/www/laravel
[ec2-user@example-laravel-server laravel]$
[ec2-user@example-laravel-server laravel]$ laravel new exampleapp
```

```
[ec2-user@example-laravel-server ~]$ cd /var/www/laravel/exampleapp
[ec2-user@example-laravel-server exampleapp]$ pwd
/var/www/laravel/exampleapp
[ec2-user@example-laravel-server exampleapp]$ php artisan --version
Laravel Framework version 5.3.19
[ec2-user@example-laravel-server exampleapp]$ 
```

```
[ec2-user@example-laravel-server ~]$ php -v
PHP 5.6.26 (cli) (built: Oct  6 2016 19:48:12) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
[ec2-user@example-laravel-server ~]$ 
```

Laravel 5.3のPHPビルトインサーバ起動スクリプト作成
===

Laravel 5.3のPHPビルトインサーバ起動スクリプトを作成します。

```
[ec2-user@example-laravel-server ~]$ vi /home/ec2-user/start_laravel.sh
```

```bash:/home/ec2-user/start_laravel.sh
#!/bin/bash

LARAVEL_PROJECT_DIR="/var/www/laravel/exampleapp"
LARAVEL_SERVER_IPADDRESS="0.0.0.0"
LARAVEL_SERVER_PORT="8000"

if [ -d $LARAVEL_PROJECT_DIR ] && [ `ps awux | grep -v grep | grep php | grep $LARAVEL_SERVER_IPADDRESS | wc -l` -eq 0 ] ; then
  echo "start laravel built in server."
  cd $LARAVEL_PROJECT_DIR
  pwd
  php artisan serve --port=$LARAVEL_SERVER_PORT --host=$LARAVEL_SERVER_IPADDRESS &

  sleep 1
  ps awux | grep -v grep | grep php | grep $LARAVEL_SERVER_IPADDRESS
fi 
```

起動スクリプトに実行権限を付けます。

```
[ec2-user@example-laravel-server ~]$ chmod 755 /home/ec2-user/start_laravel.sh
```

Laravel 5.3のPHPビルトインサーバ停止スクリプト作成
===

今度はLaravel 5.3のPHPビルトインサーバの停止スクリプトを作成します。

```
[ec2-user@example-laravel-server ~]$ vi /home/ec2-user/stop_laravel.sh
```

```bash:/home/ec2-user/stop_laravel.sh
#!/bin/bash

LARAVEL_PROJECT_DIR="/var/www/laravel/exampleapp"
LARAVEL_SERVER_IPADDRESS="0.0.0.0"
LARAVEL_SERVER_PORT="8000"

if [ `ps awux | grep -v grep | grep php | grep $LARAVEL_SERVER_IPADDRESS | wc -l` -ge 1 ] ; then
  echo "stop laravel built in server."
  kill `ps awux | grep -v grep | grep php | grep $LARAVEL_SERVER_IPADDRESS | awk '{print $2}'`

  sleep 1
  ps awux | grep -v grep | grep php | grep $LARAVEL_SERVER_IPADDRESS
fi
```

停止スクリプトに実行権限を付けます。

```
[ec2-user@example-laravel-server ~]$ chmod 755 /home/ec2-user/stop_laravel.sh
[ec2-user@example-laravel-server ~]$ 
```

Laravel 5.3のPHPビルトインサーバ起動
===

Laravel 5.3のPHPビルトインサーバ起動スクリプトを実行し、ビルトインサーバを起動してみます。

```
[ec2-user@example-laravel-server ~]$ ps awux | grep -v grep | grep php
[ec2-user@example-laravel-server ~]$ 
[ec2-user@example-laravel-server ~]$ id
uid=500(ec2-user) gid=500(ec2-user) groups=500(ec2-user),10(wheel)
[ec2-user@example-laravel-server ~]$ pwd
/home/ec2-user
[ec2-user@example-laravel-server ~]$
```

```
[ec2-user@example-laravel-server ~]$ /home/ec2-user/start_laravel.sh 
start laravel built in server.
/var/www/laravel/exampleapp
Laravel development server started on http://0.0.0.0:8000/
ec2-user  6325  7.0  3.0 346048 30768 pts/1    S+   22:11   0:00 php artisan serve --port=8000 --host=0.0.0.0
ec2-user  6330  0.0  1.7 334632 17472 pts/1    S+   22:11   0:00 /usr/bin/php-5.6 -S 0.0.0.0:8000 /var/www/laravel/exampleapp/server.php
[ec2-user@example-laravel-server ~]$ 
```

WebブラウザからLaravel 5.3プロジェクトのページを表示出来る事を確認します。

http://EC2インスタンスのIPアドレス:8000/

<img width="853" alt="スクリーンショット 2016-10-23 22.13.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/63647/747eb914-fee3-4b34-734c-9b3cc8f6af3a.png">

Laravel 5.3のPHPビルトインサーバ停止
===

Laravel 5.3のPHPビルトインサーバ停止スクリプトを実行し、ビルトインサーバを停止してみます。

```
[ec2-user@example-laravel-server ~]$ pwd
/home/ec2-user
[ec2-user@example-laravel-server ~]$

[ec2-user@example-laravel-server ~]$ /home/ec2-user/stop_laravel.sh 
stop laravel built in server.
[ec2-user@example-laravel-server ~]$ 
```

```
[ec2-user@example-laravel-server ~]$ ps awux | grep -v grep | grep php
[ec2-user@example-laravel-server ~]$ 
```

***

以上になります。