AWS

PHP7.4+Laravel6のプロジェクトをAWS EC2にデプロイする

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

AWS の EC2 に、PHP7.4、Laravel6 のプロジェクトをデプロイする方法をまとめました。PHP のバージョンを指定した各種コマンドを載せているので、他バージョンの人にも参考になる記事なっていると思います。

EC2 を作成し、接続する

EC2 インスタンスを作成する

まず、AWS のコンソールに入ってください。

EC2 の項目から、インスタンスの画面にいってください。

右上にインスタンスを起動というのがあるので、そこをクリックします。

AmazonLinux を選択します。

posts/EC2

この AmazonLinux を選択します。

インスタンスはなんでも良いのですが、無料枠で使える

「t2.micro」を選択します。

(無料枠で使えるインスタンスは記事のときと変更されている可能性がありますので注意してください)

ステップ5まではデフォルトの設定のまま進めます。

ステップ6でセキュリティグループの作成をする

セキュリティグループの名前はなんでも良いです。

インバウンドの「HTTP」を追加します。

security-group

これで EC2 は OK です。

起動します。

起動する時、「キーペアの作成」を求められるので key を作成する

自由に key の名前を指定して作成してください。

key は、EC2 に接続するために必要になります。「SSH 接続」などと呼ばれます。

自分で管理しやすいところにフォルダを用意して、その中に保存してください。

EC2 の SSH 接続する

起動し終わると、インスタンスの詳細画面に「接続」というボタンがアクティブになるので、それを押します。

すると、3つコマンドが表示されています。

ターミナルを開きます。

ターミナルで、先ほど保存した鍵のフォルダへ移動します。

MAC だと、Finder でフォルダを開いたら、ターミナルにドラッグアンドドロップすると階層が分かるのでオススメです。

cd /移動したいフォルダの階層

そしたら、3つのコマンドのうち、一番上にある

chmod 400 ????.pem

のコマンドを打ちます。

このコマンドは、権限変更で EC2 に入るために必要になります。

次に3つ目のコマンドを打ちます。

ssh -i "????.pem" ec2-user@?????.ap-northeast-1.compute.amazonaws.com

このコマンドを打てば、EC2 の中に入れるはずです。

ここで入れない原因として一番多いのは、ターミナルコマンドを打つ時のフォルダ階層が間違っている可能性が高いです。

必ず、鍵ファイルを保存したフォルダの階層でコマンドを打つようにしてください。

PHP7.4 をインストールしていく

ひたすらコマンドを打っていきます。

PHP7.4 のインストール、apache のインストール、mysql のインストールまでやります。

sudo amazon-linux-extras install epel
sudo yum clean metadata
sudo yum install -y epel-release
sudo rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install --enablerepo remi -y php74-php
sudo ln -sf /usr/bin/php74 /usr/bin/php
sudo yum install --enablerepo remi -y php74-php-mbstring
sudo yum install --enablerepo remi -y php74-php-dom
sudo yum install --enablerepo remi -y php74-php-gd
sudo yum install --enablerepo remi -y php74-php-intl
sudo yum install --enablerepo remi -y php74-php-pdo
sudo yum install --enablerepo remi -y php74-php-mysql
sudo yum install -y mod_ssl
sudo yum install -y httpd
httpd -v
sudo systemctl start httpd
sudo systemctl enable httpd
sudo yum install mysql

composer をインストールする

まず、このコマンドを打ちます。権限系のコマンドになります。

sudo chown ec2-user:ec2-user /var/www/html

そしたら、https://getcomposer.org/download/

Composer の公式サイトのコマンドを丸っとコピーしてください。

コマンドもアップデートされていくので、公式からコピーすることをオススメします。

composer

画像の四角枠の中の 4 行を丸っとコピーして貼り付けて実行すると composer がインストールされます。

インストールした composer を次のコマンドで移動させたら準備万端です。

sudo mv composer.phar /usr/local/bin/composer
composer -v

composer のバージョンが表示されたら OK です。

Github と SSH 接続をする

コマンドを打って、git をインストールします。

sudo yum install git

Github と SSH 接続をするための鍵を EC2 の~/.ssh フォルダに作成し、保存します。

cd ~/.ssh
ls
ssh-keygen -t rsa

3つ目のコマンドを打つと、入力が求められる

github(自由です。鍵の名前なので、今回は github と名前をつけました)

*パスワード

と入力してください。github という名前の鍵が生成されます。

そしたらパブリックキーの中身をコピーします。

cat github.pub

このコマンドを打つとファイルの中身が表示されるのでそれをコピーしてください。

GitHub のリポジトリの管理ページへ移動します。

Settings⇨DeployDeploy Keys

github

スクリーンショットの右側にある、add Deploy key を押します。

Title⇨ 自由です(今回は、「EC2」とします)

Key⇨ 先ほどコピーした鍵の中身を貼り付けます。

AddKey を押せば OK です。

GitHub 上での作業は以上となります。

EC2 に戻って、

eval `ssh-agent`
ssh-add ~/.ssh/github
cd /var/www/html

3つのコマンドを打ちます。

2つ目の~/.ssh/github は、鍵の名前を指定しています。今回、github という鍵を作成しているのでこのコマンドになります。

GitHub のリポジトリの管理画面の「Code」から SSH をコピーします。

githubssh

EC2 で

git clone コピーしたやつ

のコマンドを打てば、GitHub からクローンできます。

Laravel の環境を整える

GitHub から無事クローンできたら、Laravel プロジェクトを設定していきます。

まず、クローンした Laravel プロジェクトに移動します。

cd Laravelのプロジェクト

移動できたら、コマンドを打っていきます。

composer install
sudo cp .env.example .env
sudo chmod -R 777 .env
php artisan key:generate
sudo chmod -R 777 storage

このコマンドを打てばとりあえず動くと思います。

.env ファイルは Clone されないので、雛形をコピーして権限を付与します。

key:generate で env ファイルの APP_KEY を作成して、storage に書き込み権限を与えて完成です。

Apache の conf ファイルを編集

最後の項目になります。

ここは、間違えると復元させるのが大変なので、慎重にやりましょう。

アパッチファイルのある場所へ移動します。

cd /etc/httpd/conf/

ファイルを変更するのですが、最初は間違える可能性が高いので(最初じゃなくてもやる方が良いですが)、バックアップファイルを作成します。

sudo cp httpd.conf httpd.conf_bk_20210220
ls

現在の Apatch ファイルのコピーを作成しました。 それでは、ファイルを編集していきます。

Vim の操作方法については、こちらの記事にまとめました

sudo vim httpd.conf

編集する箇所は3箇所

119 行目くらいを

DocumentRoot "/var/www/html"
↓
DocumentRoot "/var/www/html/ララベルのプロジェクト名/public"

131 行目くらいを

<Directory "/var/www/html">
↓
<Directory "/var/www/html/ララベルのプロジェクト名/public">

151 行目くらいを

AllowOverride None
↓
AllowOverride All

に変更します。

変更が終わったら、

アパッチを再起動して、反映させます。

sudo systemctl restart httpd

うまくいっていれば、Laravel の Home が表示されます。

確認してみましょう。

EC2 のインスタンス詳細ページに戻ります。

そこに「オープンアドレス」という表示があって、それをクリックしたらそのインスタンスのアドレスに接続できます。

EC2オープンアドレス

一応、画像を貼っておきます。

これを開くと、https アドレスなので、まだその設定をしていないので、http にアドレスを変更してください。

laravelHome

Laravel の Home が表示されました!!!

皆さんもうまくいきましたか?

RDS でデータベースを構築する

RDS のダッシュボードに入る

AWS の RDS のダッシュボードに入ってください。

リージョンが、東京リージョンになっているか確認してください

RDS の新規作成をする

RDS は、無料枠で使えるものがあります。

以下は、AWS のコンソール上でやることです。

  1. 無料枠を選択します。
  2. <マスターユーザー名>を入力(管理者 id)
  3. <マスターパスワード>を入力
  4. パスワードを確認
  5. MySQL を選択する
  6. <最初のデータベース名>を入力する
  7. セキュリティグループを新規作成
  8. セキュリティグループのインバウンドに、タイプ「MySQL/Aurora」を選択。ソース「カスタム」、EC2 のセキュリティグループを選ぶ

以上でデータベースが準備できました。

Laravel の.env を変更してデータベースに接続できるようにする

DB_CONNECTION=mysql
DB_HOST=<DBインスタンス>
DB_PORT=3306
DB_DATABASE=<最初のデータベース名>
DB_USERNAME=<マスターユーザー名>
DB_PASSWORD=<マスターパスワード>

コマンドで

php artisan clear
php artisan migrate

これでマイグレーションがうまく動けば成功です!

うまくいかなければ、戻って間違っている部分を直してください。

おまけ:EC2 上でデータベースにコマンドで入る

EC2 上でデータベースに入って、作業するときのコマンドです。

mysql -h <DBインスタンス> -P 3306 -u <マスターユーザー名> -p

//<DBインスタンス>は、AWSのダッシュボードのホストからコピーしてください(例:「test-db.????????8o.ap-northeast-1.rds.amazonaws.com」)
//マスターユーザー名は、さきほどデータベースを作成するときに入力した「マスターユーザー名を入力(管理者id)」です。

パスワードの入力を求められるので、さきほど入力したマスターパスワードを入力すると、データベースに入れます。

show databases

このコマンドで、<最初のデータベース名>が見えたら成功です。

まとめ

今回は、Laravel プロジェクトを EC2 にデプロイしました。

Vue などで Laravel-mix を使っているを使っている場合は、

別途 npm インストールできるように、node のインストールをこの後する必要がある

はずなので注意してください。

それでは以上です。