🖥️

EC2にLaravelを構築する手順

に公開

EC2(Amazon Linux 2023)に Laravelインストールと構築する手順を解説します。
この記事は開発環境を前提とし、ゴールは静的ページ(例:Hello World)を表示するところ進めたいと思います。

使用技術

  • サーバーOS:Amazon Linux
    • マシンイメージ(AMI):Amazon Linux 2023 AMI
  • Webサーバー:Nginx(1.26.3)
  • PHP: 8.4
  • Composer:2.8.8
  • Laravel: 12.0

サーバー環境の準備とインストール

※サーバーにyumがインストールされている前提で進めます。
(yum は Linux 用のパッケージ管理ツールです)

現在のインストール状況は以下の通りです:

  • yum:インストール済み
  • php:未インストール
  • nginx:未インストール
  • git:未インストール

varディレクトリの配下にwwwディレクトリを作成

sudo mkdir /var/www

システムアップデート(システム全体のパッケージを最新版に更新)

sudo yum clean metadata    # 一旦キャッシュをクリアして
sudo yum update -y         # すべてを最新版に更新

PHP等、Gitインストール

sudo yum install -y php php-cli php-fpm php-pdo php-mysqlnd php-zip php-gd php-mbstring php-xml php-fileinfo php-curl php-json php-tokenizer php-opcache php-bcmath git zip unzip

php -v
# PHP 8.4.5

git -v
# git version 2.47.1

Nginxインストール

sudo yum install -y nginx

nginx -v
# nginx version: nginx/1.26.3

Composerインストール

cd ~

# composer-setup.php というインストール用PHPスクリプトをダウンロード
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# 「~」配下にcomposer-setup.phpにダウンロードされる

# composer.phar という Composer本体(実行可能なPHPアーカイブ)を作成
php composer-setup.php
# 「~」配下にcomposer.pharを生成

# Composer本体をシステムのコマンドとして使えるように移動(Linuxのパスが通っている場所)
sudo mv composer.phar /usr/local/bin/composer
# /usr/local/bin/へcomposerファイルとして移動(/usr/local/binはグローバルコマンド)

# composer コマンドに実行権限を付与
sudo chmod +x /usr/local/bin/composer

# バージョン確認(動作チェック)
composer --version
# Composer version 2.8.8

これでどこからでも、composerコマンドを実行できるようになりました

グループ権限の設定

現在は以下のようなグループ設定。

groups ec2-user
# ec2-user adm wheel systemd-journal

ec2-userに、nginxグループを追加

sudo usermod -aG nginx ec2-user

groups ec2-user
# ec2-user adm wheel systemd-journal nginx

www/配下にプロジェクトをクローンするために、権限を設定

sudo chown ec2-user:nginx /var/www

chmod 775 /var/www
#  0 drwxrwxr-x.  4 ec2-user nginx    33 May  6 05:41 www

Gitクローンに必要な、公開鍵認証を設定します
設定は以下の記事を参考ください
https://zenn.dev/morikuma/articles/304db0b0cb8501

クローン実行

cd /var/www
git clone git@github.com:Githubのユーザー名/プロジェクト名.git

Laravelの設定

ここからLaravelの中の設定を行います
まずは権限設定

# 所有者を ec2-user:nginx に変更(Nginx と ec2-user が両方アクセスできるように)
sudo chown -R ec2-user:nginx プロジェクト名

# storage ディレクトリを書き込み可能に
chmod -R 775 プロジェクト名/storage

# bootstrap/cache も同様に書き込み可能に
chmod -R 775 プロジェクト名/bootstrap/cache

初期セットアップ

cd プロジェクト

# 依存パッケージのインストール
composer install --no-dev --optimize-autoloader

# ストレージとパブリックのシンボリックリンク作成
php artisan storage:link

.envとアプリケーションキーの作成

# .env作成
cp .env.example .env

# アプリケーションキーの生成
php artisan key:generate

vim .env

.envの中身はご自身の値を追記ください

APP_NAME=[サイト名]
APP_ENV=production
APP_KEY=アプリケーションキー設置
APP_DEBUG=false
APP_URL=[サイトURL]

※一応キャッシュクリアとログファイル初期化

# 設定のキャッシュクリア
php artisan config:clear

# アプリケーションのキャッシュクリア
php artisan cache:clear

# storage/logs フォルダを空にする(ログ初期化)
rm -f プロジェクト名/storage/logs/*.log

【参考】Viteを使用している場合

# Node.js 18 をインストール
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs

# Laravel プロジェクトへ移動
cd /var/www/Laravel12_test

# 過去の依存キャッシュを削除(npmの不具合対策)
rm -rf node_modules
rm -f package-lock.json

# 依存パッケージをインストール
npm install

# Vite 本番ビルド
npm run build

Nginxの設定

Nginxの設定を行います

/etc/nginx/conf.d/に、laravel用の設定ファイルを作成し、設定値を記述

sudo touch /etc/nginx/conf.d/laravel.conf
sudo vim /etc/nginx/conf.d/laravel.conf

以下を記述して、[プロジェクト名]部分を自身のプロジェクト名へ

server {
    listen 80;
    server_name _;  
    root /var/www/[プロジェクト名]/public;  #プロジェクトのpublicディレクトリを指定

    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

PHP-FPMの設定

PHP-FPMファイルの設定値を確認

sudo vim /etc/php-fpm.d/www.conf

もし「user」「group」がapacheになっていたら、nginxへ変更する

user = nginx 👈️ 実行ユーザー
group = nginx 👈️ 実行グループ

問題なければ、php-fpmを起動

#php-fpmを起動
sudo systemctl start php-fpm

#更にEC2インスタンスが起動時したら、自動的php-fpmも起動するように開始するよう設定
sudo systemctl enable php-fpm

#php-fpm起動確認
sudo systemctl status php-fpm

以下のようになっていればphp-fpmの設定完了

php-fpmの起動ができたら、nginxも起動しましょう

#nginxを起動
sudo systemctl start nginx

#同様にEC2インスタンスが起動時に自動的起動設定
sudo systemctl enable nginx

#nginx起動確認
sudo systemctl status nginx

アクセス確認

LaravelとNginxの設定が完了しました。
HTMLを作成し、正しくページが反映されるか確認します。

cd /var/www/プロジェクト/public

# hello.html作成
echo "<h1>Hello World</h1>" > hello.html

これで「http://IPアドレス/hello.html」へアクセスすると、、、

表示されましたーーーー!🎉🎉

※確認後はhello.htmlを削除ください

rm /var/www/プロジェクト名/public/hello.html

まとめ

今回は、EC2(Amazon Linux)に Laravel と Nginx をセットアップし、静的ページを表示するところまで解説しました
実務ではさらにデータベースやSSL、セキュリティ対策などの設定が必要になりますが、まずは基本となる構成を一から構築して動かす経験がとても大切だと思います。

この記事が、少しでも皆さんのお役に立てれば嬉しいです

🔗 参考記事

VPCからAWSへデプロイする方法
■LaravelをAWSへデプロイ|VPC・EC2構築から公開までの手順
https://zenn.dev/morikuma/articles/1a947cb8243406

DBの設定については、以下の記事でまとめているので参考ください
■EC2へDB(MySQL)を構築する場合
https://zenn.dev/morikuma/articles/83f988a663f597

■RDB構築する方法
https://zenn.dev/morikuma/articles/2e40770b0e73a0

Discussion