AWS Laravel 技術情報

EC2にLaravel環境を構築する際の手順メモ

今回は、AWSのEC2にLaravel環境を構築する際の手順を記載していこうと思います。

今回作成する環境

まず、今回作成する環境は以下となります。

項目設定内容
OSAmazon Linux 2023
WebサーバーApache
DBAurora Serverless v2 (MySQL 互換)
PHP8.x(Amazon Linux公式)
Node.js8.x

EC2で構築するOSは Amazon Linux にしております。

Ubuntuで作成している方も多いかと思います。
確かにUbuntuのメリットも多いですね。

Ubuntuのメリット

  • Laravelの公式のセットアップはUbuntu
  • Ubuntuは色々な情報も検索であがってきやすい
  • 開発環境(ローカルのDocker環境とか)もUbuntuだったりする事が多い

以上のように、Ubuntuも色々とメリットが多いと思うのですが、EC2で作成するのは本番環境や本番環境相当のテスト環境となるかと思います、そして実際に動作する環境は何よりも速度重視かと思います。

AWS環境に最適化された軽量OSである方がメリットが高いと判断しました。
(Amazon LinuxだろうがUbuntuだろうが、別にプログラム・コーディング内容が変わる訳でもないので)

他はありきたりなものですかね、DBはRDSでもいいのですが、今回はせっかくなのでAuroraの Serverless v2 (MySQL 互換)で環境構築してみました。

必要なパッケージのインストール

システムの更新

まず最新の状態にOSを更新。
・・・まあ、AWSで構築直後に実行しても特に何も更新はされませんでしたが、一応マナーですよね。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo dnf update -y
sudo dnf update -y
sudo dnf update -y

Apache, PHP, MySQL, Node.js, Composer のインストール

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo dnf install -y httpd mariadb105-server php-cli php-mbstring php-xml php-pdo php-mysqlnd unzip git --allowerasing
sudo dnf install -y httpd mariadb105-server php-cli php-mbstring php-xml php-pdo php-mysqlnd unzip git --allowerasing
sudo dnf install -y httpd mariadb105-server php-cli php-mbstring php-xml php-pdo php-mysqlnd unzip git --allowerasing

php-fpmのインストール

Amazon Linux 2023 では mod_php が無いため、Apache(httpd)と連携するには php-fpm が必要なのでインストールします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo dnf install -y php-fpm
sudo dnf install -y php-fpm
sudo dnf install -y php-fpm

起動・自動起動設定

php-fpm を起動 、自動起動するように設定します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable php-fpm
sudo systemctl start php-fpm
sudo systemctl enable php-fpm sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl start php-fpm

Node.js(Vite用, 18.x)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo dnf install -y nodejs
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

確認

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
node -v
npm -v
node -v npm -v
node -v
npm -v

以下みたいに表示されればOK

$ node -v
v18.20.6
$ npm -v
10.8.2

Composer のインストール

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -sS https://getcomposer.org/installer | php
curl -sS https://getcomposer.org/installer | php
curl -sS https://getcomposer.org/installer | php

確認

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo mv composer.phar /usr/local/bin/composer
composer -V
sudo mv composer.phar /usr/local/bin/composer composer -V
sudo mv composer.phar /usr/local/bin/composer
composer -V

以下みたいに表示されればOK。

$ sudo mv composer.phar /usr/local/bin/composer
$ composer -V
Composer version 2.8.6 2025-02-25 13:03:50
PHP version 8.3.16 (/usr/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.

Run the "diagnose" command to get more detailed diagnostics output. というメッセージは、Composer の診断コマンド (composer diagnose) を実行すると、より詳細なシステムの状態や問題点を確認できる という意味で、エラーではなく単なる提案なので、特に問題がなければ無視してOKです。

気になる場合は、下記を実行してチェック結果を見てみましょう。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
composer diagnose
composer diagnose
composer diagnose

Laravel のセットアップ

Laravel 新規プロジェクトの作成

プロジェクト名(myapp)を作成します。
※myappをプロジェクト名に置き換えて利用してください。

それともし、Laravelのバージョンを指定したい場合は、
composer create-project --prefer-dist laravel/laravel=9.5 myapp
なんて指定することができます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd /var/www/html
sudo composer create-project --prefer-dist laravel/laravel myapp
cd /var/www/html sudo composer create-project --prefer-dist laravel/laravel myapp
cd /var/www/html
sudo composer create-project --prefer-dist laravel/laravel myapp

Laravel 権限設定

※myappをプロジェクト名に置き換えて利用してください。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chown -R ec2-user:ec2-user /var/www/html/myapp
cd /var/www/html/myapp
chmod -R 775 storage bootstrap/cache
chown -R apache:apache storage bootstrap/cache
sudo chown -R ec2-user:ec2-user /var/www/html/myapp cd /var/www/html/myapp chmod -R 775 storage bootstrap/cache chown -R apache:apache storage bootstrap/cache
sudo chown -R ec2-user:ec2-user /var/www/html/myapp
cd /var/www/html/myapp
chmod -R 775 storage bootstrap/cache
chown -R apache:apache storage bootstrap/cache

.env 設定 & アプリキー生成

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cp .env.example .env
php artisan key:generate
cp .env.example .env php artisan key:generate
cp .env.example .env
php artisan key:generate

Aurora MySQL(Serverless v2)をセットアップ

Laravel の .env を編集

以下のように記載します。(内容はサンプル)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
DB_CONNECTION=mysql
DB_HOST=your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=admin
DB_PASSWORD=yourpassword
DB_CONNECTION=mysql DB_HOST=your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com DB_PORT=3306 DB_DATABASE=myapp DB_USERNAME=admin DB_PASSWORD=yourpassword
DB_CONNECTION=mysql
DB_HOST=your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=admin
DB_PASSWORD=yourpassword

MySQLへの接続

以下のようにコマンドを実行(内容はサンプル)

  • -h → Aurora のエンドポイント
  • -u → RDS 作成時のマスターユーザー
  • -p → パスワード入力を求められる
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mysql -h your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
mysql -h your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
mysql -h your-aurora-cluster.cluster-xxxx.ap-northeast-1.rds.amazonaws.com -u admin -p

DB作成

DBを作成します(以下のSQLはサンプル)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'admin'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'%';
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'admin'@'%' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'%';
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'admin'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'%';

DBインポート

DBを開発環境からエクスポートしたデータをインポートします。
(以下のSQLはサンプル、SQLのソースファイルとして、ec2-user直下にSQLフォルダを作成して、その中にSQLファイルを配置)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
USE myapp;
source /home/ec2-user/sql/myapp.sql;
USE myapp; source /home/ec2-user/sql/myapp.sql;
USE myapp;
source /home/ec2-user/sql/myapp.sql;

Laravel の メンテナンス

Laravel の package.json を設定

開発環境から、Laravel の package.json を用意します。
(EC2の package.json は、 /var/www/html/myapp に入っているはず)

依存パッケージのインストール

npm install のコマンドを実行して、パッケージをインストールします

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm install
npm install
npm install

他にもプロジェクトで利用しているものがあれば、ここでインストールしておきましょう。

Vite を設定

vite.config.js を編集

開発環境から、Laravel の vite.config.js を置き換えます。
(EC2の vite.config.js は、 /var/www/html/myapp に入っているはず)

Laravel を Apache で動かす

Apache の設定

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo nano /etc/httpd/conf/httpd.conf
sudo nano /etc/httpd/conf/httpd.conf
sudo nano /etc/httpd/conf/httpd.conf

DocumentRoot を変更

プロジェクト名のpublicを指定します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/html/myapp/public"
#DocumentRoot "/var/www/html" DocumentRoot "/var/www/html/myapp/public"
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/html/myapp/public"

AllowOverride All にして .htaccess を使えるようにします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#<Directory "/var/www">
<Directory "/var/www/html/myapp/public">
#AllowOverride None
AllowOverride All
Require all granted
</Directory>
#<Directory "/var/www"> <Directory "/var/www/html/myapp/public"> #AllowOverride None AllowOverride All Require all granted </Directory>
#<Directory "/var/www">
<Directory "/var/www/html/myapp/public">
    #AllowOverride None
    AllowOverride All
    Require all granted
</Directory>

Apache は index.html を探しますが、Laravel は index.php を使うので、それを設定しておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<IfModule dir_module>
#DirectoryIndex index.html
DirectoryIndex index.php index.html
</IfModule>
<IfModule dir_module> #DirectoryIndex index.html DirectoryIndex index.php index.html </IfModule>
<IfModule dir_module>
    #DirectoryIndex index.html
    DirectoryIndex index.php index.html
</IfModule>

Apache を再起動

反映させる為に、Apacheを再起動します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl restart httpd
sudo systemctl restart httpd
sudo systemctl restart httpd

自動起動の設定

ついでにApache(httpd)の 自動起動設定もしておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable httpd
sudo systemctl enable httpd
sudo systemctl enable httpd

ステータス確認

正常に動作しているか、Apacheのステータスも確認しておきます。
(active (running)と表示されていることを確認してください、自動起動設定もenabledになっているはずです)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl status httpd
sudo systemctl status httpd
sudo systemctl status httpd

動作確認

これでブラウザでアクセスすれば、開けるようになっているはずです。

http://[EC2のパブリックIPアドレス]

作業としては以上となります、お疲れさまでした。

補足

Laravel のビルドと動作確認

ビルド環境じゃないかもしれませんが、一応ビルドもできることを確認しておきます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm run build
php artisan serve --host=0.0.0.0 --port=8000
npm run build php artisan serve --host=0.0.0.0 --port=8000
npm run build
php artisan serve --host=0.0.0.0 --port=8000

Amazon公式より

権限まわりの設定をいじっておくと使いやすいです

公式の「Apache ウェブサーバーのファイルアクセス許可を設定するには」のコマンドを実行するのがいいかと思います。
(ec2-user ユーザーを apache グループに追加したり)

株式会社OZでは、他の方達にも有益と思われる情報は、社内ナレッジに留めず、積極的に情報公開するという方針をとっております。
株式会社OZをよろしくお願いします!

-AWS, Laravel, 技術情報
-,

S