AWS ec2 デプロイ laravel8 php8 mysql8

ほぼ受け売りです。
参考:
[公式](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html#prepare-lamp-server)
[LaravelをAWSのEC2へデプロイする手順](https://qiita.com/masataka715/items/6e46f1f5e53bdff6cd3d#2-5-composer%E8%87%AA%E8%BA%AB%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
[laravelをAWS EC2にデプロイする](https://qiita.com/nakm/items/0bcc6564538a0604b2ce#laravel%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A7composer-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

##インバウンド HTTP (ポート 80) 接続をインスタンスに許可するセキュリティルールを追加していない場合には、ルールを追加する。
[公式](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html#prepare-lamp-server)の最初のほうに書かれてあるのを参考に。
##php8.0をインストール

```
sudo amazon-linux-extras install -y php8.0

sudo yum install  php-mbstring php-openssl php-xml unzip
```

##Apacheのインストール

```
sudo yum install -y httpd
```
設定

```
wabサーバの起動
sudo service httpd start

システムがブートするたびにapacheが起動するよう設定
sudo chkconfig httpd on

有効か確認
chkconfig --list httpd
```

ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。
Apacheの初期画面が表示されれば成功です。

ec2-user アカウントがこのディレクトリで複数のファイルを操作することを許可するには、ディレクトリの所有権とアクセス許可を変更する必要があります。

```
ec2-userをapacheグループに追加
sudo usermod -a -G apache ec2-user

いったんログアウトして、再度ログイン
exit

/var/www とそのコンテンツのグループ所有権を apache グループに変更
sudo chown -R ec2-user:apache /var/www

グループに、/var/wwwの書き込み許可追加
sudo chmod 2775 /var/www

/var/www とサブディレクトのディレクトリ許可を変更
find /var/www -type d -exec sudo chmod 2775 {} \;

/var/www とサブディレクトリのファイル許可を変更
find /var/www -type f -exec sudo chmod 0664 {} \;
```
##MYSQL8インストール

```
既存でインストールされている邪魔者を削除
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql

リポジトリのインストール
sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

MYSQLのインストール
cd /usr/lib64
sudo ln libsasl2.so.3 libsasl2.so.2
sudo  yum clean all
sudo yum -y install mysql-community-server mysql-devel

MYSQLの起動
sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service

初期パスワードに確認
sudo cat /var/log/mysqld.log | grep 'temporary password'

パスワード変更
sudo mysql_secure_installation

再起動
sudo systemctl restart mysqld.service
```



##gitをインストール

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

パスを通す
sudo mv composer.phar /usr/local/bin/composer
```



##composer自身のインストール

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

composerコマンドのパスを通す
sudo mv composer.phar /usr/local/bin/composer

パス確認（/usr/local/bin/composerと表示されればOK）
which composer
```





##Laravelプロジェクトをgit clone

```
sudo yum install git
cd /var/www
git clone [URL]
```

 Apacheの設定変更
http.confファイルのDocumentRootの変更
Laravelでは、プロジェクト内のpublicディレクトリをドキュメントルートに指定する必要がある

```
sudo vi /etc/httpd/conf/httpd.conf
```

キーボードで「i」を押して入力状態にする
DocumentRoot "/var/www/html"の箇所をDocumentRoot "/var/www/プロジェクト名/public"に変更


http.confファイルに以下のDirectoryを追加（.htaccessの有効化）

```
<Directory /var/www/プロジェクト名/public>
 AllowOverride All
</Directory>
```

Escキーを押して次のコマンドを入力（画面左下に入力中のコマンドが表示される）

```
:wq
```


Apacheの設定変更後は、再起動。

```
sudo service httpd restart
```


##パッケージのインストール

```
cd /var/www/[プロジェクトのフォルダ名]

composer.jsonファイルがない場合
composer init

vendorディレクトリが生成される
composer install
```


Laravelプロジェクトの設定

```
sudo chmod -R 777 /var/www/[プロジェクト名]/storage
sudo chmod -R 775 /var/www/[プロジェクト名]/bootstrap/cache
```


config, routeのキャッシュクリア
だいたいなんかエラー出たら、これ打っときゃ直る。

```
php artisan config:cache
php artisan route:cache
```


.envの設定
git cloneしたLaravelプロジェクトには.envファイルがないので、
composer insatallで作成された、.env.exampleを使用する

```
cp .env.example .env
vi .env

APP_URL=http://IPアドレス ←サーバーのIPにする

DB_CONNECTION=mysql
DB_HOST=←RDSのエンドポイント
DB_DATABASE=データベース名
DB_USERNAME=RDS作成時のユーザ名
DB_PASSWORD=設定したパスワード
```

キーを作成し、キャッシュをクリアする

```
php artisan key:generate
php artisan config:clear
```

後は煮るなり焼くなり