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クローンに必要な、公開鍵認証を設定します
設定は以下の記事を参考ください
クローン実行
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構築から公開までの手順
DBの設定については、以下の記事でまとめているので参考ください
■EC2へDB(MySQL)を構築する場合
■RDB構築する方法
Discussion