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」と入力すれば出てきます。
ダッシュボード右上のオレンジ色のボタン、インスタンスを起動を押します。
設定の入力
()の中は今回の実装で、自分が入力した内容です
名前:任意(laravel-deploy)
Amazon マシンイメージ:Amazon Linux 2023 AMI
インスタンスタイプ:t2.micro(無料枠)
キーペア:空白
セキュリティグループ:セキュリティグループを作成、SSH トラフィックを許可(自分の IP)、HTTPS トラフィックを許可、HTTP トラフィックを許可
ストレージ:8GiB gp3
他変更なし
インスタンスを起動ボタンを押す
キーペアの作成モーダルが出る:新しいキーペアの作成、キーペア名:任意(laravel-deploy)
インスタンスを起動ボタンを押す。
以上で、インスタンスが立ち上がります。
補足
キーペアは、この後のやり方では不要です。
自分の PC のターミナルで EC2 に接続する際に、キーペアは必要で、インスタンスコネクトでやる場合には不要です。
EC2 インスタンスコネクトを使う
インスタンスコネクトの IP を許可
EC2 インスタンスコネクトを使って、EC2 上でコマンドを打てるようにします。
IP 制限がかかっているため、インスタンスコネクトが使えるように、許可します。
インバウンドルールの編集、
- タイプ: SSH
- IP: 3.112.23.0/29
- ポート範囲: 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
質問が出るので、
- 空白で
enter
- 任意のパスワード (password)
- 確認で同じパスワード (password)
と進めます。すると、2つの鍵が生成されるので、公開鍵の内容をコピーします。
以下のコマンドで表示された文字列(公開鍵)をコピーします。
cat id_rsa.pub
GitHub 上での作業
リポジトリのページにいきます。
- Settings
- Deploy keys
- Add deploy key
と進みます。
- Title は任意 (EC2)
- Key に、公開鍵の文字列をペースト
- Add Key ボタンを押して保存
EC2 に戻って接続
ssh -T git@github.com
質問を聞かれるので、
- yes
- password(鍵を作った際に入力したパスワード)
リポジトリをクローンする
cd /var/www/html
sudo chmod 0777 /var/www/html
git clone URL
URL の部分は、
アパッチの設定を変更する
念の為バックアップの作成
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 の管理画面で、
- RDS
- データベースの作成
とページを移動。データベースの作成画面では、以下の部分だけ変更してます。
- 標準作成
- MySQL
- 無料利用枠
- DB インスタンス 無料枠の micro のもの
- DB インスタンス識別子:任意(laravel-deploy)
- マスターパスワード:任意(password)
- マスターパスワードを確認:上と同じにする(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 プロジェクトをデプロイしてみました。
必要なコマンドを列挙しているだけなので、情報抜けているところもあると思います。
動画を確認するか、コメントしてくれれば返信できると思いますのでお気軽に聞いてください。