Amazon Linux2 ec2にphp7.4 +laravel7+mysql8.0環境構築

# 概要
Amazon Linux2 ec2インスタンスに接続し、ec2-userの状態でphp7.4、laravel7、mysql8.0をインストールし環境構築します。
途中、必要に応じてapache、php-fpm、git、bitbucket、phpmyadminのインストール、設定も行っていますがこちらは必須ではありません。

なお、Amazon Linux ec2インスタンスに接続した後、yumコマンドがうまく実行できない場合はAWS VPCのポリシーの編集が必要な場合がありますので注意してください。その場合、VPC から Amazon Linux AMI リポジトリをホストする S3 バケットへのトラフィックを許可する必要があります。
詳細は、[AWS公式ドキュメント](https://aws.amazon.com/jp/amazon-linux-ami/faqs/)を参照してください。

```
{
"Statement": [
   {
      "Sid": "Amazon Linux AMI Repository Access",
      "Principal": "*",
      "Action": [
         "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
         "arn:aws:s3:::packages.*.amazonaws.com/*",
         "arn:aws:s3:::repo.*.amazonaws.com/*"
      ]
   }
]
}
```

# php7.4 install
最新版のphp7.4をインストールします。
リポジトリのおいてある場所は、都度最新版のURLから取得するようにしてください。

```
   sudo amazon-linux-extras install epel
   sudo yum install epel-release
   sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
   sudo yum install -y php74 php74-php php74-php-fpm
   sudo ln -s /usr/bin/php74 /usr/bin/php
   php -v
```

# php.ini symbolic link
上記でインストールした場合、php.iniの場所は/etc直下には存在しません。
今後の使い勝手を良くするためにシンボリックリンク設定を行います。

```
   sudo find / -name php.ini
   ln -s /etc/opt/remi/php74/php.ini /etc/php.ini
   sudo ln -s /etc/opt/remi/php74/php.ini /etc/php.ini
```

# apache & php-fpm start
php-fpmが必要な場合のみ実施します。

```
   sudo systemctl enable httpd.service
   sudo systemctl start httpd.service
   sudo systemctl status httpd.service
   sudo systemctl enable php74-php-fpm.service
   sudo systemctl start php74-php-fpm.service
   sudo systemctl status php74-php-fpm.service
```

# composer install
```
   php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
   php composer-setup.php
   rm composer-setup.php
   mv composer.phar /usr/local/bin/composer
   sudo mv composer.phar /usr/local/bin/composer
   composer 
```

# sshd setting
ssh接続の設定が必要な場合のみ実施します。

```
   sudo vi /etc/ssh/sshd_config
   sudo chkconfig --list
   sudo service sshd restart
```

# laravel install
```
   sudo yum install php74-php-pecl-zip
   composer global require laravel/installer
```

# git install & ssh-key generate & git clone from bitbucket
gitを利用する場合に実施します。

```
   sudo yum install git
   git --version
```

また、bitbucketを利用する場合、以下の流れで設定していきます。

```
   ssh-keygen
   eval `ssh-agent`
   ssh-add ~/.ssh/id_rsa
   cat ~/.ssh/id_rsa.pub
   ssh -T git@bitbucket.org
   git clone git@bitbucket.org:xxxxxxx/xxxxxxx.git
```

# laravel project create
```
  cd /var/www/html/xxxx
  sudo yum install php74-php-mbstring
  sudo yum install php74-php-xml
  sudo yum install php74-php-bcmath
  composer create-project --prefer-dist laravel/laravel .
  sudo chmod -R 777 storage
  sudo chmod -R 777 bootstrap/cache
```

# git push
```
  git add .
  git commit -m "laravel7 installed"
  git remote add origin git@bitbucket.org:xxxxxxx/xxxxxxx.git
  git push origin master
  git config --global user.name "xxxxxxx"
  git config --global user.email "xxxxxxx"
```

# apache document root setting
Document Rootを変更したい場合、実施します。
laravelにアクセスする場合、/var/www/html/xxxx/publicを設定します。

```
  sudo vi /etc/httpd/conf/httpd.conf
```
```httpd.conf
  DocumentRoot "/var/www/html/xxxx/public"
```
```
  sudo service httpd restart
```

# mysql8.0 install & start
最新のmysql8.0をインストールします。
リポジトリの場所は、[こちら](https://dev.mysql.com/downloads/repo/yum/)で確認してください。

```
  sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm -y
  yum install mysql-community-server
  sudo yum install mysql-community-server
  mysql --version
  sudo systemctl start mysqld.service
  sudo systemctl enable mysqld.service
```

# mysql8.0 setting
```
  sudo grep 'temporary password' /var/log/mysqld.log
  mysql_secure_installation
```

# phpmyadmin install
最新のphpmyadminをインストールしたい場合、実施します。
ダウンロードのURLは、[こちら](https://www.phpmyadmin.net/)で確認してください。サイト右上にある「Download x.x.x」のリンクアドレスをコピーして利用する。

```
  cd /var/www/html
  wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
  unzip phpMyAdmin-5.0.2-all-languages.zip
  mv phpMyAdmin-5.0.2-all-languages phpmyadmin #リネームは各自の環境に合わせて設定
  rm -rf phpMyAdmin-5.0.2-all-languages.zip
  sudo yum install php74-php-mysqlnd
```

# apache setting for phpmyadmin

```
  sudo vi /etc/httpd/conf/httpd.conf #Alias、バーチャルホスト設定など、各自の環境に合わせて設定
  sudo service httpd configtest
  sudo service httpd restart
```

上記の状態でもphpmyadminの使用は可能ですが、warningが出ているため以下で解消します。

```
  cd /var/www/html/phpmyadmin
  mkdir tmp
  sudo chmod -R 777 tmp
  cp -a config.sample.inc.php config.inc.php
  vi config.inc.php
```

```config.inc.php
  $cfg['blowfish_secret'] = 'ここに32文字以上の文字列を設定して保存';
```

# access phpmyadmin
<img width="985" alt="スクリーンショット 2020-04-16 1.28.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59118/dc3c46bc-b2bb-b61b-7ec9-eb52d189f301.png">

# laravel setting for mysql connetion
laravelからmysqlに接続できるように、.envファイルを編集します。

```/var/www/html/xxxx/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=mysqlユーザ名
DB_PASSWORD=mysqlパスワード
```

# access laravel
<img width="988" alt="スクリーンショット 2020-04-14 3.43.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59118/32b4c2fb-e092-55b5-1fca-dca3c0ee275e.png">