AmazonLinux2 Laravel 環境構築 メモ

## 今回の環境

- EC2:Amazon Linux2
- PHP 7.3
- Composer
- Laravel Framework 6.17.1

## 初期設定

パッケージのアップデート～タイムゾーンの更新まで

[AWS EC2 + Amazon Linux2 + 初期設定やってみた メモ](https://qiita.com/thfree0119/items/489a14e1c3f93b083274)

## Apacheインストール

毎度おなじみ「Apache」さん

```:インストール
$ sudo yum install httpd
```

```:Apache起動
$ sudo systemctl start httpd
```

```:起動確認
$ sudo systemctl status httpd
```

Active: active (running) みたいなのが出ればよし

```:システム起動時に起動する設定
$ sudo systemctl enable httpd
```

Windowsで言うところのスタートアップみたいな

```:上記設定の確認
$ sudo systemctl is-enabled httpd
```

enabled って出ればOK


調べていたら「Nginx」っていうのもあったのでそのうち触ってみたい
※ [ApacheとNginxについて比較](https://qiita.com/kamihork/items/49e2a363da7d840a4149)

## PHPインストール

```:インストール
$ sudo amazon-linux-extras install php7.3
```

```:バージョンの確認
$ php -v

PHP 7.3.14 (cli) (built: Feb 21 2020 01:59:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
```

```:インストールされたモジュールの確認
$ sudo yum list php* | grep php7.3
```

```:関連モジュールのインストール
$ yum install php-xml php-mbstring php-dom php-zip
```

次のどれかが無かったらインストール
ないとLaravelのインストール時やプロジェクト作成時にコケるらしい。

- php-xml
- php-mbstring 
- php-dom
- php-zip

## PHPの設定

こちらを参考に

[AmazonLinux2でLaravelの開発環境構築](https://qiita.com/h19e/items/02d1301d4fdd8dfa88ac#php%E3%81%AE%E8%A8%AD%E5%AE%9A)
[nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する](https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc)

```:設定ファイルを開く
$ sudo vi /etc/php.ini
```

開いたら次のように修正

```php.ini
# HTTPヘッダにPHPのバージョンを記載しない(セキュリティ的に)
# expose_php = On
expose_php = Off

# メモリ上限を引き上げる(結構デフォルトのメモリは少なめ)
# memory_limit = 128M
memory_limit = 256M


# POST送信の許容サイズを引き上げる
# post_max_size = 8M
post_max_size = 16M

# アップロードファイルの許容サイズを引き上げる
# upload_max_filesize = 2M
upload_max_filesize = 16M

# timezoneの設定
# date.timezone =
date.timezone = Asia/Tokyo
```

```:php-fpmの再起動(php.iniの設定を反映させるため)
$ sudo systemctl restart php-fpm
```

## Laravel プロジェクトの作成

[Laraveインストール　AmazonLinux2](https://mtaryo.hatenablog.com/entry/2018/09/29/112702)

```:compoerインストール
$ curl -sS https://getcomposer.org/installer | php

# Pathの通っている/usr/binに移動させる
$ mv composer.phar /usr/local/bin/composer
```

これでcompoerを使う準備ができた。
さっそくプロジェクトを作っていこう。

「/var/www/html」あたりにプロジェクトを作るか！
と思ったらエラーになるので、今回は他のところに作ります。
※どうしても作成したい場合は権限をいじってね

```:作業フォルダの作成と移動
$ mkdir ~/html
$ cd ~/html
```

```:Laravelプロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel blog
```

※ VSCodeのRemote-SSHを使って操作していますが、プロジェクト作成時に処理落ちすることがあります。

```:プロジェクトの更新
$ cd ~/html/blog
$ composer update
```

```:権限周りの変更
$ cd ~
$ chmod -R 775 ~
$ chmod -R 775 ~/html
$ chmod -R 777 ~/html/blog/bootstrap/cache
$ chmod -R 777 ~/html/blog/storage
```

### Laravel のバージョン確認
プロジェクトフォルダで次のコマンド

```:バージョン確認コマンド
$ cd ~/html/blog/
$ php artisan -V
```

## Apacheの設定

```:conf作成
$ sudo vi /etc/httpd/conf.d/xxxxx.conf
```

※「xxxxx.conf」は任意の名前です。

```xxxxx.conf
DocumentRoot /home/ec2-user/html/blog/public
<Directory /home/ec2-user/html/blog/public>
    #.htaccessを利用可能にする
    AllowOverride All

    #アクセス許可
    Require all granted
</Directory>
```

これを書き込んで保存

## 確認

http://xx.xx.xx.xx/

サーバーアドレスをブラウザで叩いて動作確認
demo画面が表示されたらOK

![laravel_demo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353569/2c4be96f-a8a8-b53e-81e6-5fa5da5a4416.png)

## MySql5.6 インストール

```:リポジトリの追加
$ sudo yum install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
```

Amazon Linux2 さんにはMySql 5.6がいないのでリポジトリを追加してあげる

```:リポジトリの切り替え
$ sudo yum-config-manager --disable mysql57-community
$ sudo yum-config-manager --enable mysql56-community
```
追加したリポジトリのデフォルトは5.7なので
次の状態にする。

- 5.7を無効
- 5.6を有効

```:インストールから起動まで
$ sudo yum -y install mysql-community-server
$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld
```

上から順にこんな感じの設定

- インストール
- サービス自動起動有効
- サービス起動

```:起動確認
$ sudo systemctl status mysqld
```

確認はApacheの時と同じく
Active: active (running) みたいなのが出ればよし

```:初期設定
mysql_secure_installation
```

「Enter current password for root (enter for none): 」
訳：rootの現在のパスワード入れてね！

無いのでそのままEnter
あとは全部「y」でOK

## チュートリアルの紹介

環境設定後はチュートリアルをやりたい人（私）用にチュートリアルをいくつか見つけてきました。

- [はじめてのLaravelアプリケーションガイド](https://qiita.com/Fendo181/items/dece727ea402552fee19)
- [Laravel5.4でシンプルなCMSを作るチュートリアル](https://www.webopixel.net/php/1259.html)
- [入門Laravelチュートリアル (1) イントロダクションと環境構築](https://www.hypertextcandy.com/laravel-tutorial-introduction)