AWSのEC2を立ち上げてLaravelのログイン機能を動かすまで

EC2インスタンス立ち上げから Laravel が動くまで何度も同じところでハマる。

#編集履歴
 2018.03.12

 - コマンドラインの実行権限の表記が曖昧過ぎたので書き直しました。表記方法の間違いなどあればご指摘いただけますと幸いです。


#EC2インスタンスを立ち上げる
###①IAMユーザーでログインしてインスタンスを作成します
 - 無料枠の **Amazon Linux AMI 2016.09.1 (HVM), SSD Volume Type** の **t2.micro** を選びます。

###②Elastic IPを取得してインスタンスに関連付けます
 - Elastic IP を取得したら必ず関連付けて下さい。無駄なコストが発生してしまいます！

###③SSH接続でログインします

#インスタンスの初期設定
###EC2のタイムゾーン設定
```
// 一応元ファイルは残しておきます
[ec2-user ~]$ sudo cp /etc/localtime /etc/localtime.org
[ec2-user ~]$ sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
```

#LAMP環境とついでにphpMyAdminのインストール

　~~[AWSのEC2にLAMP環境とついでにphpMyAdminをインストールする手順](http://qiita.com/atto/items/1359f8fe1a0e8fc1ff4d)~~

投稿時はチュートリアルでうまくいかなかった部分もあったのですが今は
【[チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html)】に
完璧にまとまってますw（2018.03.12）

#Apacheの設定

###① **\*.conf** の設置
ここからはApache の設定ファイルをしていきます。
`/etc/httpd/conf/httpd.conf` の最後に

``` /etc/httpd/conf/httpd.conf
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
```

とあり、初期状態でカスタム用の `ほにゃらら.conf` を受け入れてくれます。
今回はこれを利用して `/etc/httpd/conf.d/custom.conf` で設定していきます。

```
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
```
※nanoを使うのは僕の好みですので、エディターはお好きなものをお使いください。

###②エラーログファイルの場所を変更する
ログを見るためにいちいちウィンドウを切り替えたりするのは面倒です。
なので、吐き出されたエラーログファイルを簡単にDLできるよう、 `/var/www/log` あたりに吐き出すようにしています。（しなくてもいいです。）

```
[ec2-user ~]$ sudo mkdir /var/www/log
```
``` /etc/httpd/conf.d/custom.conf
# エラーログ
ErrorLog "/var/www/log/error_log"

# アクセスログ
<IfModule log_config_module>
    CustomLog "/var/www/log/access_log" combined
</IfModule>
```

###③読み込む php.ini の場所を変更する
ログ同様、php.iniも編集するたびにターミナルでやるのは面倒です。
なので、 `/var/www/config` （例）とかに設置することにします。（しなくてもいいです。）

- デフォルトの `php.ini` をコピーします。

```
[ec2-user ~]$ sudo mkdir /var/www/config
[ec2-user ~]$ sudo cp /etc/php.ini /var/www/config/php.ini
```
- `php.ini` の参照先を変更します。

``` /etc/httpd/conf.d/custom.conf
PHPIniDir "/var/www/config/"
```
- ここまで出来たら一度Apacheを再起動します。

```
[ec2-user ~]$ sudo service httpd restart
```

###④ハロワついでに **phpinfo** を確認する
Hello World! と出力するだけでは時間が勿体ないので、同時に設定変更の反映を確認します。

```
[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
```

- あなたの Elastic IP を使ってブラウザでアクセスします。 

```
http://【Your Elastic IP】/phpinfo.php
```
ちゃんと表示されて、php.ini の読み込み設定が反映されているかどうかもチェックしておきます。（しなくてもいいです。）
![phpinfo02.png](https://qiita-image-store.s3.amazonaws.com/0/133906/da5d530a-3fca-c5c4-167b-4dd9a1527ec8.png)

設定した通り `/var/www/config/php.ini` になっていればOKです。
- phpinfo.php ファイルを削除します。

```
[ec2-user ~]$ rm /var/www/html/phpinfo.php
```


#パーミッション設定
###①**www** グループを追加して **ec2-user** を所属させる
```
[ec2-user ~]$ sudo groupadd www
[ec2-user ~]$ sudo usermod -a -G www ec2-user
[ec2-user ~]$ exit
```
一度ログアウトして再度入り直します

```
[ec2-user ~]$ groups // 確認
```
- ec2-user wheel www と表示されればOKです。

次に /var/www 以下の所有者情報を再帰的に変更します。

```
[ec2-user ~]$ sudo chown -R root:www /var/www
```

###②さらにパーミッションを変更
```
[ec2-user ~]$ sudo chmod 2775 /var/www
[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +
```

ここまでで、ひとまず環境の構築は完了です。
次にフレームワーク**Laravel**をインストールしていきます。

#Laravelインストール
###①その前に色々インストール
 - Composer

```
[ec2-user ~]$ curl -sS https://getcomposer.org/installer | sudo php
    // Downloading...
[ec2-user ~]$ sudo cp composer.phar /usr/local/bin/composer
[ec2-user ~]$ sudo ln -s /usr/local/bin/composer /usr/bin/composer
```

 - 拡張ライブラリ

```
[ec2-user ~]$ sudo yum install -y php56-mbstring php56-pdo php56-mysqlnd
```

###②Laravelプロジェクトの作成
**laravel** をインストールするディレクトリに移動
今回は `/var/www/laravel` にします。

```
[ec2-user ~]$ cd /var/www
[ec2-user www]$ ~/composer.phar create-project --prefer-dist laravel/laravel
```

###③Apacheのドキュメントルートを変更

```
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
```
```custom.conf
# ドキュメントルート
DocumentRoot "/var/www/laravel/public"
```
###④ .htaccess 有効化
- t2.microでは初期状態では `.htaccess` が働きませんので、動くように設定します。

```
[ec2-user ~]$ sudo nano /etc/httpd/conf.d/custom.conf
```
```custom.conf
# .htaccess 有効化
<Directory /var/www/laravel/public>
    AllowOverride All
</Directory>
```

###⑤Apache を再起動
```
[ec2-user ~]$ sudo service httpd restart
```

###⑥パーミッション変更
Laravelではいくつかのディレクトリ以下に書き込み権限が必要となります。

```
[ec2-user ~]$ cd /var/www
[ec2-user www]$ sudo chmod -R 777 laravel/storage
[ec2-user www]$ sudo chmod -R 775 laravel/bootstrap/cache
[ec2-user www]$ sudo chown -R root:www /var/www
```

#Laravelの設定
## .env
順に設定をしていきます。

```
[ec2-user ~]$ cd /var/www/laravel
[ec2-user laravel]$ sudo nano .env
```

データベースにRDSを使っている場合には DB_HOST にエンドポイントを入れます。
このときポート番号も一緒にコピーされてくることがありますが、次の DB_PORT に分けて設定します。

メールサーバーの設定は、gmailではMFA認証の関係か、上手くいきませんでした。
レンタルサーバー等のIMAPメール設定を使って下さい。

## ログイン機能を有効にする
Laravel にはログイン周りの機能が一通り揃っています。
Laravel 5.3 になってその使い方はより柔軟になったように思います。
ログイン周りの機能をとりあえず使うにはたったこれだけでOKです。

```
[ec2-user laravel]$ php artisan make:auth
[ec2-user laravel]$ php artisan migrate
```

## ブラウザで確認する
あなたの Elastic IP を使ってブラウザでアクセスします。 

```
http://**Your Elastic IP**/home
```
このようにログイン画面が表示されたらOKです。
![Laravel.png](https://qiita-image-store.s3.amazonaws.com/0/133906/11ba4f1c-28aa-1c95-5861-e90cd484d889.png)



以上です！