前回ではNodeアプリケーションをEC2インスタンスへデプロイしましたが、今回はlaravelで作成したアプリケーションをデプロイしていきます。
はじめに
▼環境
- Windows PC
- Vs code
- AWSアカウント
- composer version 2.6.5
ステップ1: Laravelプロジェクトをローカル環境に作成
コマンドプロンプトで任意のディレクトリを指定し、Laravelプロジェクト作成コマンドを入力する。プロジェクト作成まで数分時間がかかることがあります。
※composerをインストールしていない人は、こちらからダウンロードしてください
composer create-project --prefer-dist laravel/laravel プロジェクト名
しばらくするとプロジェクト作成が完了するので、下記と同じように表示されます。
その後、作成したプロジェクトをvs codeで開きます。
ステップ2: Laravelを起動させるための準備
1.必要なパッケージをインストール
composer install
を実行し、vendor
フォルダを作成
composer install
2. アプリケーションキーの生成
php artisan key:generate
3. 簡単なルーティングの設定
routes/web.phpを開き、以下を追加します。
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return "<h1>Hello Wolrd!</h1>";
});
3. .envファイル設定
ローカル開発環境では、.envファイルにデータベースの設定を行っていなくても動作することができますが、本番環境でLaravelアプリケーションを動作させるには、データベースの設定が必要になります。
作成したデータベースの情報を.envファイルに書き込んでください。
※ここではデータベースの作成は行いません。また次の機会で解説していこうと思います。
4. ローカルサーバーを起動
アプリケーションをテストするためにサーバーを起動
php artisan serve
起動をし、http://127.0.0.1:8000
にアクセスし、'Hello World!'が表示されます。
ステップ3: 環境設定とデプロイ
ローカル環境に作成したアプリケーションをデプロイするためにEC2インスタンスを準備します。
1. EC2インスタンスを作成する
インスタンスの作成はこちらで説明をしているので、わからない人はご覧ください。
インスタンスの作成後、SSHでログインを行なってください。詳しくはこちら
2. 必要なパッケージのインストール
①apacheのインストール
apacheはnginx同様、Webサーバーを構築するためのソフトウェアです。
apacheをインストール後、起動をします。
sudo dnf install httpd
sudo systemctl start httpd
apacheを起動後、作成したインスタンスのパブリックIPにアクセスします。
②PHPとcomposerをインストールする
composer
はLaravelアプリケーションの依存パッケージをインストールするのに使用します。
# PHPと必要なパッケージをインストール
sudo dnf install php php-cli php-json php-common php-mbstring php-zip php-xml php-curl unzip -y
# Composerのインストーラーをダウンロード
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# インストーラーの実行
php composer-setup.php
# インストーラーの削除
php -r "unlink('composer-setup.php');"
# Composerをグローバルに移動
sudo mv composer.phar /usr/local/bin/composer
③データベース接続用のクライアントをインストール
#PHPアプリケーションからMariaDBに接続できるようになる
# MySQLクライアントとPHPのMySQLドライバーをインストール
sudo dnf install mariadb105 php-mysqlnd -y
# PHPを再起動
sudo systemctl restart php-fpm
3. ファイル転送ソフトを準備する
今回は、FileZillaを使用してデプロイしていきます。FileZillaとはサーバー内にファイルをアップロードするためのファイル転送ソフト(FTPソフト)です。
FileZillaのダウンロードはこちらから行なってください。
インストール後、FileZillaを起動させてください。
起動後、赤く囲っている箇所をクリックします。
クリックすると、下記の画像のように表示されます
プロトコル: SFTPを選択
ホスト: 作成したインスタンスのパブリックIPv4アドレス
ログオンタイプ: 鍵ファイル
鍵ファイル: 鍵ファイルのパス
下記画像のようにすべて選択できたら、接続ボタンをクリックします
接続が完了すると、下記画像のように表示されます。
今回は/var/www/html/プロジェクト
にアプリケーションをアップロードしていきます。
EC2インスタンスのデフォルトの権限設定は root ユーザーになっているので権限を変更していきます。
4. 権限の変更
FilezillaのログインをEC2インスタンスのec2-userユーザー
で行っているため、そのユーザーに適切な権限を与える必要があります。
/var/www/html
の権限を確認してみましょう。
EC2インスタンスにログインをし、コマンドを実行します。
ls -ld /var/www/html
コマンドを実行すると下記のように表示されるかと思います。
drwxr-xr-x. 2 root root 6 Jul 30 14:58 /var/www/html
こちらは、/var/www/html
はrootユーザーが所有していて所有者には読み書きの権限があるが、グループやその他のユーザーには読み取りと実行の権限しかないという意味になります。
-
d
: ディレクトリ (directory) を表す -
rwx
: 所有者 (root ユーザー) に対する読み取り、書き込み、実行の権限を示す -
r-x
: グループに対する読み取りと実行の権限を示す -
r-x
: その他のユーザーに対する読み取りと実行の権限を示す -
root
: このディレクトリの所有者が root ユーザーであることを示す -
root
: このディレクトリの所有グループが root グループであることを示す
FilezillaでのログインをEC2インスタンスのec2-userユーザーでおこなっているので、ec2-userに権限を与えます。一般的なWebサーバの構成では、Webコンテンツを管理するユーザーをapacheグループに所属させることが一般的なので、apacheグループにec2-userを追加します。
#ec2-userをapacheグループに追加
sudo usermod -a -G apache ec2-user
#/varディレクトリとその下にあるすべてのファイルとディレクトリ(-R オプション)の所有者をec2-userに、所有グループをapacheに変更
sudo chown -R ec2-user:apache /var/www/html
もう一度/var/www/html
の権限を確認すると、ec2-userユーザーが所有者にapacheが所有グループに変更されていることが確認できます。
ls -ld /var/www/html
drwxr-xr-x. 2 ec2-user apache 6 Jul 30 14:58 /var/www/html
5. アプリケーションをデプロイする
権限をec2-userに変更できたので、FillZillaを使用してインスタンスにアプリケーションをデプロイしていきます。
/var/www/html
ディレクトリに移動し、laravel-practice
というフォルダを作成します。
作成できたら、ローカル環境で作成したアプリケーションをアップロードしていきます。
vendor
フォルダ以外すべてアップロードしてください。
アップロードしたいフォルダを選択し右クリックをするとuploadボタンが表示されるのでそちらをクリックします。
すべてのアップロードできたら、FileZillaは閉じてしまって大丈夫です。
5. Apacheの設定ファイルを編集する
最後に、Apacheの設定ファイルを編集します。
インスタンスにログインをし、以下コマンドを実行します。
sudo nano /etc/httpd/conf.d/laravel.conf
コマンドを事項するとテキストエディタが起動するので、下記を貼り付けます。
-
serverName
: インスタンスのIPアドレス -
DocumentRoot
: Laravel アプリケーションのドキュメントルートは/public
になる
<VirtualHost *:80>
ServerName 3.112.203.23
DocumentRoot /var/www/html/laravel-practice/public
<Directory /var/www/html/laravel-practice/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
設定ファイルを編集し、保存をしたらapacheを再起動させます。
sudo systemctl restart httpd
最後に、composer installを実行し、vendorフォルダを作成を行います。
[ec2-user@ip-172-31-47-86 laravel-practice]$ composer install
6.動作確認
デプロイが完了したらしっかりと動作しているか確認を行います。
パブリックIPアドレスにアクセスを行い、下記画像と同じように表示されていれば正常にlaravelアプリケーションが起動できています。
おわりに
最後までご覧いただきありがとうございました!