AWS EC2 + nginx + PHP7 + Laravel5 で環境構築 

# LaravelをAWSで使うことになった
LaravelをAWSで動かせるかを確認しておけとのこと。
備忘録的なことも含めてメモしておく。

# 今回の環境
- AWS EC2 Amazon Linux2
- nginx 1.12
- PHP 7.2
- Laravel 5.5

# AWSにSSH接続
EC2でインスタンスを生成します。
今回選んだサーバーの種類
**Amazon Linux 2 AMI (HVM), SSD Volume Type**

SSH接続する！

```
$ ssh -i ~/.ssh/[SHHキー.pem] ec2-user@[ドメイン名かIPアドレス(パブリック DNS (IPv4))]
```

インスタンスの再起動でIPアドレスが変わるので気をつけよう。固定したい場合にはElastic IPで出来る

# nginxのインストール
yumでのインストールを試みたが...`amazon-linux-extras`使えと。

`amazon-linux-extras`はあらかじめAWSでインストールされているソフトウェアを起動させることで簡単に利用できるシステム。以下のようなソフトが用意されている。

```
$ amazon-linux-extras 
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
 13  ruby2.4                  available    [ =2.4.2  =2.4.4 ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14 ]
 16  php7.1                   available    [ =7.1.22  =7.1.25 ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14 ]
 18  libreoffice              available    [ =5.0.6.2_15  =5.3.6.1 ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1 ]
 21  mate-desktop1.x          available    [ =1.19.0  =1.20.0 ]
 22  GraphicsMagick1.3        available    [ =1.3.29 ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38 ]
 24  epel                     available    [ =7.11 ]
 25  testing                  available    [ =1.0 ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    [ =1.8.0_192  =1.8.0_202 ]
 28  firecracker              available    [ =0.11 ]
 29  golang1.11               available    [ =1.11.3 ]
 30  squid4                   available    [ =4 ]
 31  php7.3                   available    [ =7.3.2 ]
 32  lustre2.10               available    [ =2.10.5 ]
```

amazon-linux-extrasを使っていく

```
$ sudo amazon-linux-extras install nginx1.12
```

# PHPのインストール
同様にamazon-linux-extrasでPHPをインストールしていく


```
 15  php7.2            available         
　　　　　　　[ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14 ]  
 16  php7.1                   available    [ =7.1.22  =7.1.25 ]  
 31  php7.3                   available    [ =7.3.2 ]
```

3種類あった。今回は7.2バージョンを選択。

```
$ sudo amazon-linux-extras install php7.2
```

# まずはphpinfo()が動いているか確かめよう
ディレクトリを作ってコードを書く。phpならなんでもいい。
で、やること3つ

#### HTTPトラフィックの許可
AWS EC2の使っているインスタンスのセキュリティグループを探す
↓
下の方にあるタブからインバウンドを探す
↓
ブラウザから今回はアクセスできるようにするためHTTPを追加
[ 編集 → ルールの追加 → HTTPを選んで決定（他の設定はとりあえず放置で） ]
#### nginxのドキュメントルート設定
`vi /etc/nginx/nginx.conf`で中身を編集

``` /etc/nginx/nginx.conf
 server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /; ##ここを編集
```

好きな場所にIPでアクセスした時に参照するディレクトリーを設定
今回はルートディレクトリにします。

#### nginxとphp-fpmの開始
nginxの設定を変えたので再起動。php-fpmも再起動しとく
起動してなかったら起動する。

```
$ service nginx restart(start)　もしくは　$ systemctl restart(start) nginx
$ service php-fpm restart(start)　もしくは　$ systemctl restart(start) php-fpm

動いているかの確認には
$ service nginx status　もしくは　$ systemctl status nginx
```

IP[xx.xx.xxx]/phpinfoのパス
ex)127.0.0.1/var/www/phpinfo/info.php にアクセス
しっかり表示されたらlaravelのインストールに移っていく

## composerのインストール
PHPのライブラリ管理のためのcomposerをインストールする。

```
$ curl -sS https://getcomposer.org/installer | php

All settings correct for using Composer
Downloading...

Composer (version 1.8.4) successfully installed to: //composer.phar
Use it: php composer.phar
```
このままだとカレントディレクトリにcomposer.pharファイルがあるのでパスが通っている場所に移動

```
$ echo $PATH
```
パスの通っているところを確認

通っているところにcomposerと言うファイル名で移動

```
$ mv composer.phar /usr/bin/composer
```

ディレクトリーに入れてそちらにパスを通す方法でもおk。
binの中にcomposerディレクトリは必要ないのでくれぐれも作らないように

起動確認

```
$ composer

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.8.4 2019-02-11 10:52:10
```

# laravelのインストール
インストールする時にmb-stringとmb-pdoが欲しい
よく分からないから先人に習ってインストール
もし余計なものが入ってるのがわかる人がいたら教えて欲しいです！

```
$ yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
```

laravelのプロジェクトを置くディレクトリに移動

今回はsiteと言う名前のlaravelプロジェクトを作る

```
$ composer create-project --prefer-dist laravel/laravel site "5.5.*"
```

多分出来てる。welcomeページ表示までのいくつかの設定を最後にする。

# laravelの初期設定

#### laravelプロジェクト内のComposerのアップデート
php-mbstring, php-pdo, php-xmlが必要。よく分からんから先人に習う

```
yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-xml
```

で、アップデート

```
$ composer update
****
****
Package manifest generated successfully. # これでてたらおk
```


#### APP_KEYの設定
.envファイルのセキュリティの為のKEYを入れてあげる。composerでインストールするとあらかじめ入っているらしいが、一応やって置くに越したことはない。

```
$ php artisan key:generate
Application key [base64:sJQq984xxxxxxxx7PnJmiaRCBn0N5GwNtbU0lcq8Yc=] set successfully.
```
laravelのコマンドartisanが動くかチェック。なんでもいいけど、今回はわかりやすいrouteでの警告を受けます。

```
$ php artisan route
                                   
  Command "route" is not defined.  
                                   
  Did you mean one of these?       
      route:cache                  
      route:clear                  
      route:list                   
```                                  
artisanが動いて上のように出ればおk。ここでエラーが出た場合は、laravelのセットアップが上手くいってません。composer周りの設定が足りていない可能性が高いです。

#### nginxからの権限を許可する

storageの権限を許可する。

```
$ chmod -R 777 storage/
```
<font color="LightCoral">-R</font>はディレクトリ配下全てのオプション。
これを忘れて苦しんだので忘れないように...

# アクセス
ルートにlaravelのpublicを設定してあればIPアドレスにアクセスすればおk！
無事滞りなく行けばこんなページが表示されるはず！

![スクリーンショット 2019-04-05 13.12.54.png](https://qiita-image-store.s3.amazonaws.com/0/234194/9ab2d66b-1acb-f8d2-d716-4d84b757b505.png)

# 終わりに
結構環境構築で引っかかったところが多かったので同じような人がいれば参考にして欲しい。

おわり