PHP7.4+Laravel6のプロジェクトをAWS EC2にデプロイする
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
目次
AWS の EC2 に、PHP7.4、Laravel6 のプロジェクトをデプロイする 方法をまとめました。PHP のバージョンを指定した各種コマンドを載せているので、他バージョンの人にも参考になる記事なっていると思います。
EC2 を作成し、接続する
EC2 インスタンスを作成する
まず、AWS のコンソールに入ってください。
EC2 の項目から、インスタンスの画面にいってください。
右上にインスタンスを起動というのがあるので、そこをクリックします。
AmazonLinux を選択します。
この AmazonLinux を選択します。
インスタンスはなんでも良いのですが、無料枠で使える
「t2.micro」を選択します。
(無料枠で使えるインスタンスは記事のときと変更されている可能性がありますので注意してください)
ステップ5まではデフォルトの設定のまま進めます。
ステップ6でセキュリティグループの作成をする
セキュリティグループの名前はなんでも良いです。
インバウンドの「HTTP」を追加します。
これで 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 の公式サイトのコマンドを丸っとコピーしてください。
コマンドもアップデートされていくので、公式からコピーすることをオススメします。
画像の四角枠の中の 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
スクリーンショットの右側にある、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 をコピーします。
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 ファイルのコピーを作成しました。 それでは、ファイルを編集していきます。
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 のインスタンス詳細ページに戻ります。
そこに「オープンアドレス」という表示があって、それをクリックしたらそのインスタンスのアドレスに接続できます。
一応、画像を貼っておきます。
これを開くと、https アドレスなので、まだその設定をしていないので、http にアドレスを変更してください。
Laravel の Home が表示されました!!!
皆さんもうまくいきましたか?
RDS でデータベースを構築する
RDS のダッシュボードに入る
AWS の RDS のダッシュボードに入ってください。
リージョンが、東京リージョンになっているか確認してください
RDS の新規作成をする
RDS は、無料枠で使えるものがあります。
以下は、AWS のコンソール上でやることです。
-
無料枠を選択します。
-
<マスターユーザー名>を入力(管理者 id)
-
<マスターパスワード>を入力
-
パスワードを確認
-
MySQL を選択する
-
<最初のデータベース名>を入力する
-
セキュリティグループを新規作成
-
セキュリティグループのインバウンドに、タイプ「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 のインストールをこの後する必要がある
はずなので注意してください。
それでは以上です。