EC2にLaravel+MySQL環境構築

# はじめに

EC2にLaravelをインストールし、
すでに作成済み（githubやcodecommitなど）のプロジェクトを展開する方法です。

※バージョンなどは古い場合があります。

# 開発環境作成

#### 必要なものをインストール
ec2-userで作業します。

 **httpd** をインストール。

```
$ sudo yum -y install httpd
```

 **git** をインストール。

```
$ sudo yum -y install git
```

 **PHP** をインストール。（バージョンは任意）

```
$ sudo amazon-linux-extras enable php7.4 -y
```

```
$ sudo yum clean metadata
```

```
$ sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
```

問題なくインストールされているか確認。

```
$ php -v
```

<br>
<br>

 **composer** をインストール。

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

パスを通す。

```
$ sudo mv composer.phar /usr/bin/composer
```

インストールされているか確認。

```
$ composer --version
```

<br>
<br>

#### サーバーにMySQLが必要な場合

 **MySQL** (DB)をインストールのためリポジトリ準備。

```
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
```

新しいGPGキーをインポートしてから、MySQLをインストールする

```
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
```


 **MySQL** をインストール。

```
$ sudo yum -y install mysql-server
```

 **MySQL** を起動。

```
$ sudo systemctl start mysqld
```

 **MySQL** の状態を確認。

```
$ systemctl status mysqld
```

ルートユーザーのパスワード確認。

```
$ sudo less /var/log/mysqld.log
```

```
(ログの一部に以下のような記述)
A temporary password is generated for root@localhost: XXXXXXXXXXXX
```

XXXXXXXXXXXXがルートユーザーのパスワードなのでメモしておく。

 **MySQL** へ接続する。

```
mysql -u root -p
```

パスワードを求められるので先ほどメモしたものを入力する。

ルートユーザーのパスワードを変更する。

```
ALTER USER 'root'@'localhost' identified BY '【新しいパスワード】';
```

パスワードポリシーは:大文字、小文字、*を含む8文字以上。

ユーザーを作成する。

```
CREATE USER  '【ユーザー名】'@'localhost' IDENTIFIED BY '【パスワード】';
```

権限を付与する。

```
GRANT ALL ON *.* to '【ユーザー名】'@'localhost' WITH GRANT OPTION;
```

```
flush privileges;
```

新しいユーザーでログインできるか確認。

データベースを作成する。

```
create database 【データベース名】;
```

mysqlをログアウトする。

<br>
<br>

#### プロジェクトフォルダ作成
ec2-userで開発環境フォルダ作成します。

```
$ sudo mkdir /var/www/project/
```

他のユーザーもこのフォルダへ作成できるよう権限を書き換えます。

```
$ sudo chmod 777 /var/www/project/
```

フォルダへ移動します。

```
$ cd /var/www/project/
```

 **GitHub・CodeCommit** のソースを **git clone** する。

```
$ git clone 【githubやcodecommitで取得したHTTPSのクローン】 .
```
最後にドットを入れるとディレクトリの中身をクローンできる。

storage配下のアクセス権限を変更する。(Laravelの場合)

```
$ ​chmod 777 storage -R
```

 **composer install** の実行。

```
$ composer install
```

 **.env** ファイルの作成。
※.env.sampleがある場合。

```
$ cp .env.example .env
```

ファイルを編集。

```
$ vi .env
```

DB、smtp、AWS関連のキー情報などの設定。

```
APP_NAME=（任意の名前）
APP_ENV=local（本番ならproduction）
APP_KEY=
APP_DEBUG=true(開発以外ならfalse)
APP_URL=http://example.com(アプリのURL)

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=【データベース名】
DB_USERNAME=【作成したユーザー名】
DB_PASSWORD=【パスワード】

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
(省略)
```

APP_KEY作成(PJ直下で実行)

```
$ php artisan key:generate
```

DBを最初に作成するときのみ。

```
$ php artisan migrate
```

ここで接続できているか確認できる。

<br>
<br>

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

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

ドキュメントルートをlaravelの`index.php`がある`/public`に変更します。

```linux:httpd.conf
(中略)

DocumentRoot "/var/www/project/public"

(中略)
```
※DocumentRootは自身のディレクトリ構成に合わせてください

 **httpd** を起動する。

```
$ sudo systemctl start httpd.service
```

**httpd**の状態確認

```
$ sudo systemctl status httpd.service
```

runningになっていればOK

IPアドレスでアプリが作動すれば完了です！！
この時点ではHTTP通信のみのためブラウザにIPを入れてそのまま
確認はできません！
ちゃんと`http://`としてください。

あとはRoute53でAレコード登録したりALBを挟んだりしてください＾＾