Amazon LinuxにLaravelをインストールし動かす

# はじめに
いろいろ参考にしながらLaravelをAmazon Linux上で動くようにしたのでそのまとめです。
参考にさせて頂いた皆様、ありがとうございます。

# この記事でやること
- Amazon Linuxインストール
- Apacheインストール
- php５６インストール
- MySQLインストール
- Laravelインストール（※既にHomesteadで開発したものを転送する前提です）

# 構成
- Apache2.4
- php5.6
- MySQL5.7
- Laravel5.4

# 詳細
## Amazon Linuxインストール
AWSのページからインスタンス作ってちゃっちゃとインストールします

## yumアップデート
お決まり

```console:console
$ sudo yum update -y
```

## Apache2.4インストール

```console:console
$ sudo yum install -y httpd24
```

## php5.6インストール
とりあえず参考にさせて頂いたところに従いインストールします

```console:console
$ sudo yum -y install php56 php56-devel php56-mbstring php56-mcrypt php56-mysqlnd php56-pdo
$ sudo yum -y install php-pear
$ sudo yum -y install git
$ sudo yum -y install zlib-devel
$ sudo yum -y install gcc
```

## composerインストール

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

### インストールしたcomposerを移動

```console:console
$ sudo mv composer.phar /usr/local/bin/composer
$ sudo chown root:root /usr/local/bin/composer
```

## タイムゾーン設定をAsia/Tokyoに変更

```console:console
$ sudo cp -p /etc/php.ini /etc/php.ini.`date '+%Y%m%d'`
$ sudo sed -i -e 's/;date.timezone =/date.timezone = \"Asia\/Tokyo\"/g' /etc/php.ini
$ grep date.timezone /etc/php.ini
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"
```

## Apache起動

```console:console
$ sudo service httpd start
```

### 自動起動設定

```console:console
$ sudo chkconfig httpd on
```

ここで例のApacheのデフォルトページが見れるか確認します。
見れたら次へ

## MySQL5.7インストール

```console:console
$ sudo yum install -y mysql57-server
```

### 起動と、自動起動設定
だんだんめんどくなってきました。

```console:console
$ sudo service mysqld start
$ sudo chkconfig mysqld on
```

### mysqlのデータベースとユーザー作成

```console:console
$ mysql -u root

mysql> CREATE DATABASE hoge_db;
mysql> CREATE USER 'fuga_name'@'localhost' IDENTIFIED BY 'fuga_passwd';
mysql> GRANT ALL PRIVILEGES ON hoge_db.* TO 'name'@'localhost';
mysql> FLUSH PRIVILEGES;
```

## Laravelインストール
私の場合は既にHomesteadで開発を行っていたので、そのディレクトリをまるごと転送しました。

### .envの編集
サーバー環境に合わせて.envを編集します。

```text:.env
APP_URL=http://www.example.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=hoge_db
DB_USERNAME=fuga_name
DB_PASSWORD=fuga_passwd
```

### migrationでテーブル作る

```console:console
$ php artisan migrate
```

## VirtualHost設定
ここでエントリポイントを設定するので、Laravelのpublicフォルダを当てるようにします。

```console:console
$ cd /etc/httpd/conf.d/
$ sudo vi vhost.conf
```

```text:vhost.conf
<VirtualHost *:80>
    DocumentRoot /var/www/laravel_hoge/public

    <Directory "/var/www/laravel_hoge/public">
        Options Indexes FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

## アクセス権付与
### wwwグループを追加してec2-userを所属させる

```console:console
$ sudo groupadd www
$ sudo usermod -a -G www ec2-user
$ exit
```

再度ログインしグループが追加されているか確認

```console:console
$ groups
```


### /var/www以下の所有者を変更する

```console:console
$ sudo chown -R root:www /var/www
```

### パーミッション変更

```console:console
$ sudo chmod 2775 /var/www
$ find /var/www -type d -exec sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;
```

### Laravelの特定のディレクトリのパーミッションも変更

```console:console
$ sudo chmod -R 777 laravel_hoge/storage
$ sudo chmod -R 775 laravel_hoge/bootstrap/cache
$ sudo chown -R root:www /var/www
```

これで一旦完了です

# トラブル系
## Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
migration時に発生したエラー
MySQLを当初5.6を入れていたのですが、5.6だと表題のエラーが出ます。
私の場合、MySQL5.7をインストールすることで解決しました。


# 参考
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html
https://qiita.com/na0AaooQ/items/e9b782be01ce6946d7e8#11-composer%E3%81%A7laravel%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6laravel%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99
https://qiita.com/beer_geek/items/6e4264db142745ea666f
https://qiita.com/daichi87gi/items/f9dac6cd8acc3ad4330d
https://qiita.com/atto/items/e1effd28c212c3829cb0