ホーム > Laravel > LaravelプロジェクトをAWS EC2にデプロイする方法【Amazon Linux 2023版】
Laravel

LaravelプロジェクトをAWS EC2にデプロイする方法【Amazon Linux 2023版】

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

関連動画

質問やフィードバック

この記事や動画に関する質問やフィードバックあれば、動画のコメント欄にてお気軽にコメントしてください。

Laravel プロジェクトを AWS EC2 にデプロイする方法について、Amazon Linux 2023 など新しいバージョン構成でやってみました。

使っているもののバージョンなど

  • Amazon Linux 2023
  • Laravel 11
  • PHP 8.3
  • Node.js LTS
  • Apache 2.4
  • AWS EC2
  • AWS RDS

EC2 インスタンスを起動する

AWS コンソールにいき、左上の検索バーに「EC2」と入力すれば出てきます。

ダッシュボード右上のオレンジ色のボタン、インスタンスを起動を押します。

EC2

設定の入力

()の中は今回の実装で、自分が入力した内容です

名前:任意(laravel-deploy)

Amazon マシンイメージ:Amazon Linux 2023 AMI

インスタンスタイプ:t2.micro(無料枠)

キーペア:空白

セキュリティグループ:セキュリティグループを作成、SSH トラフィックを許可(自分の IP)、HTTPS トラフィックを許可、HTTP トラフィックを許可

ストレージ:8GiB gp3

他変更なし

インスタンスを起動ボタンを押す

キーペアの作成モーダルが出る:新しいキーペアの作成、キーペア名:任意(laravel-deploy)

インスタンスを起動ボタンを押す。

以上で、インスタンスが立ち上がります。

補足

キーペアは、この後のやり方では不要です。

自分の PC のターミナルで EC2 に接続する際に、キーペアは必要で、インスタンスコネクトでやる場合には不要です。

EC2 インスタンスコネクトを使う

インスタンスコネクトの IP を許可

EC2 インスタンスコネクトを使って、EC2 上でコマンドを打てるようにします。

IP 制限がかかっているため、インスタンスコネクトが使えるように、許可します。

インバウンドルールの編集、

  1. タイプ: SSH
  2. IP: 3.112.23.0/29
  3. ポート範囲: 22

を追加します。

リージョンによって IP が違うかもしれない。検証中は東京リージョンです。

インスタンスコネクトで接続

EC2 のダッシュボードに接続というボタンがあるので押す

タブの一番左に、EC2 Instance Connectというのがあるので押して、オレンジの接続ボタンを押す

成功すると、以下の画像のような画面になります。

コマンドで必要なものをインストール

sudo dnf update -y
sudo dnf install -y php8.3
php -v
sudo dnf install -y php-mysqlnd

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer -V

sudo dnf install -y git
git -v

sudo dnf -y localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf -y install mariadb105

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts

以上のコマンドで、

  • PHP
  • Composer
  • git
  • mysql
  • Node.js

が使えるようになりました。

ちなみに、mysql はコマンドで RDS のサーバーに接続できるようになっただけなので、mysql -vなどのコマンドはエラーになります。

GitHub のリポジトリからクローン

EC2 での作業

cd ~/.ssh
ssh-keygen -t rsa -b 4096

質問が出るので、

  1. 空白で enter
  2. 任意のパスワード (password)
  3. 確認で同じパスワード (password)

と進めます。すると、2つの鍵が生成されるので、公開鍵の内容をコピーします。

以下のコマンドで表示された文字列(公開鍵)をコピーします。

cat id_rsa.pub

GitHub 上での作業

リポジトリのページにいきます。

settings

  1. Settings
  2. Deploy keys
  3. Add deploy key

と進みます。

deploy keys

  1. Title は任意 (EC2)
  2. Key に、公開鍵の文字列をペースト
  3. Add Key ボタンを押して保存

EC2 に戻って接続

ssh -T git@github.com

質問を聞かれるので、

  1. yes
  2. password(鍵を作った際に入力したパスワード)

リポジトリをクローンする

cd /var/www/html
sudo chmod 0777 /var/www/html
git clone URL

URL の部分は、

github clone

アパッチの設定を変更する

念の為バックアップの作成

sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup20241111

vim コマンドで設定ファイルを編集

sudo vim /etc/httpd/conf/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

に変更します。

Vim の操作方法、a: インサートモード、ESC: インサートモード解除、:wq 保存

変更が完了したら、アパッチを再起動して反映させます。

sudo systemctl restart httpd

Laravel プロジェクト

プロジェクトのディレクトリに移動してコマンドを打ちます。

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

この状態で、パブリック IP に接続すると、DB 関連のエラーが出ると思います。

データベースサーバーに接続し、データベースを作成

AWS RDS で新規作成する

AWS の管理画面で、

  1. RDS
  2. データベースの作成

とページを移動。データベースの作成画面では、以下の部分だけ変更してます。

  1. 標準作成
  2. MySQL
  3. 無料利用枠
  4. DB インスタンス 無料枠の micro のもの
  5. DB インスタンス識別子:任意(laravel-deploy)
  6. マスターパスワード:任意(password)
  7. マスターパスワードを確認:上と同じにする(password)

DB インスタンスの初期選択が、項目3で選んだものによって変わるため注意してください。

以上で、データベースが作成されるのですが、管理画面に表示される

RDSのエンドポイントをコピーしておきます。

EC2 上でデータベースを作成

mysql コマンドで RDS で作成したデータベースサーバーに接続します

mysql -h laravel-deploy.c0l60w30treo.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p

laravel-deploy.c0l60w30treo.ap-northeast-1.rds.amazonaws.comの部分は、さきほどコピーしたRDSのエンドポイントです。

adminの部分はマスターユーザーです。

接続できたら、

CREATE DATABASE laravel_deploy;
show databases;

データベースを作成しました。laravel_deployという名前のデータベースができています。

Laravel プロジェクトの.env 修正

sudo vim .env
DB_CONNECTION=mysql
DB_HOST=laravel-deploy.c0l60w30treo.ap-northeast-1.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=laravel_deploy
DB_USERNAME=admin
DB_PASSWORD=password

DB_HOSTは、RDSのエンドポイントです。

DB_DATABASEは、CREATE DATABASE で作ったデータベース名。

DB_USERNAME,DB_PASSWORDはマスターユーザーとマスターパスワードです。

コマンドでマイグレーションを実行。うまくいけば接続完了です。

php artisan migrate

以上で、データベースに接続が完了します。

あとは Vite など使っている人は必要に応じてビルドしてください。

npm install
npm run build

まとめ

Amazon Linux 2023 で Laravel プロジェクトをデプロイしてみました。

必要なコマンドを列挙しているだけなので、情報抜けているところもあると思います。

動画を確認するか、コメントしてくれれば返信できると思いますのでお気軽に聞いてください。

参考

チュートリアル: Amazon EC2 インスタンスでの Node.js のセットアップ

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

フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。