Laravel on Ubuntu — PHP最大フレームワークのLEMP環境完全構築

Laravel on Ubuntu — PHP最大フレームワークのLEMP環境完全構築 開発環境

「LaravelをUbuntu上で動かしたい」という方に向けて、Nginx・MySQL・PHP(LEMP)スタックをゼロから構築してLaravelを実際に表示させるまでの全手順を、本当にコマンドを動かして取得した実出力とともに解説します。

結論から言うと、Ubuntu 24.04 LTS なら PPA(サードパーティリポジトリ)を一切足さず、apt だけで LEMP + Laravel が動きます。本記事の検証では composer create-project laravel/laravel で入る最新の Laravel が 13.15.0 で、これは "php": "^8.3"(PHP 8.3 以上)を要求します。Ubuntu 24.04 標準の php8.3 はちょうど 8.3.6 なので、要件をそのまま満たせるのが大きな強みです。

本記事のコマンドと出力は、Ubuntu 24.04 公式 Docker イメージ(24.04.4 LTS / aarch64)で実際に LEMP を組み、Laravel を migrate して Nginx + PHP-FPM で配信し、ブラウザで表示するところまで実行して取得しました(2026-06-14 計測)。

この記事のポイント

  • Ubuntu 24.04 LTS なら apt install php8.3 だけで PHP 8.3.6 が入る(PPA不要)
  • LEMP スタック(Nginx 1.24.0 / MySQL 8.0.46 / PHP 8.3.6 / Composer 2.7.1)が apt で一括構築できる
  • composer create-project laravel/laravel で入る最新版は Laravel 13.15.0、必須PHPは ^8.3(8.2ではなく8.3)
  • Laravel 必須拡張(bcmath / curl / mbstring / pdo_mysql / tokenizer / xml / zip など)は php8.3 一式の apt インストールで全部揃う
  • Ubuntu 22.04 は既定PHPが8.1で、php8.3 すら既定リポジトリに無いため Laravel 13 には ppa:ondrej/php の追加が必須

目次

  1. 前提環境
  2. LEMP スタックとは
  3. apt で入る実バージョンと Laravel 13 の要件
  4. 手順1:システムを更新する
  5. 手順2:Nginx をインストールする
  6. 手順3:MySQL をインストール・初期設定する
  7. 手順4:PHP 8.3 と Laravel必須拡張をインストールする
  8. 手順5:Composer をインストールする
  9. 手順6:Laravel プロジェクトを作成する
  10. 手順7:Nginx 仮想ホストを設定する
  11. 手順8:MySQL データベースとユーザーを作成する
  12. 手順9:.env を設定して migrate する
  13. 動作確認
  14. よくあるエラーと解決策
  15. まとめ

前提環境

  • OS:Ubuntu 24.04 LTS(Noble Numbat)。本記事の検証は公式 Docker イメージ ubuntu:24.04(実体は 24.04.4 LTS / aarch64)で実施
  • 実行環境:VPS または実機(VPSなら東京リージョンが遅延の面で有利です)
  • sudo 権限のあるユーザーアカウント(コンテナ検証では root で実行)

比較のために Ubuntu 22.04 LTS(ubuntu:22.04 / 実体 22.04.5 LTS / Jammy Jellyfish)でも同じ apt-cache policy を実行し、パッケージバージョンの差を実測しています。

Ubuntu 22.04 を使っている場合は注意

Ubuntu 22.04 LTS の既定 PHP は 8.1(候補 2:8.1+92ubuntu1)で、php8.2 / php8.3 は既定リポジトリに存在しません(後述の実測で確認)。最新の Laravel 13 は PHP 8.3 以上が必須なので、22.04 では ppa:ondrej/php を追加して PHP 8.3 を入れる手順が増えます。これから環境を作るなら Ubuntu 24.04 LTS の方が圧倒的にスムーズです。

Ubuntu 22.04 vs 24.04 のLaravel関連パッケージ apt候補バージョン差(実測)
Ubuntu 22.04 vs 24.04 のLaravel関連パッケージ apt候補バージョン差(実測)

LEMP スタックとは

LEMP とは次の4つのソフトウェアの頭文字を組み合わせた言葉です。

  • Linux — OS(今回は Ubuntu 24.04)
  • Enginx — Webサーバー(「エンジンエックス」と読む)
  • MySQL — データベース
  • PHP — サーバーサイドスクリプト言語

Apache の代わりに Nginx を使うのが LEMP の特徴です。Nginx は静的ファイルを直接返し、PHP の処理だけを PHP-FPM(FastCGI Process Manager)にソケット経由で渡します。この組み合わせが Laravel 本番環境の事実上の標準です。実際に本記事の最後では、Nginx が PHP-FPM 経由で Laravel を配信し HTTP 200 を返す様子を、ブラウザのスクリーンショットで確認します。

apt で入る実バージョンと Laravel 13 の要件

まず「Ubuntu 24.04 の apt で何が入るのか」を実測しました。ubuntu:24.04 コンテナで実際に各パッケージをインストールし、--version を叩いた結果が次の通りです。

Ubuntu 24.04 で apt から入るLEMPスタックの実バージョン(実測)
Ubuntu 24.04 で apt から入るLEMPスタックの実バージョン(実測)
コンポーネント コマンド出力(実測) aptパッケージ版数
Nginx nginx/1.24.0 (Ubuntu) 1.24.0-2ubuntu7.11
PHP PHP 8.3.6 (cli) (built: May 25 2026) 8.3.6-0ubuntu0.24.04.9
MySQL mysql Ver 8.0.46 8.0.46-0ubuntu0.24.04.2
Composer Composer version 2.7.1 2.7.1-2

ここで一番大事な実測ポイントです。composer create-project laravel/laravel で作られる最新の Laravel は、2026-06-14 時点で Laravel Framework 13.15.0 でした。作成された composer.json を覗くと、要求PHPは次のようになっています。




ubuntu@linuxlab: /var/www/myapp
$ php artisan –version
Laravel Framework 13.15.0
$ php -r “echo json_decode(file_get_contents(‘composer.json’))->require->php;”
^8.3
$ php -r “echo json_decode(file_get_contents(‘vendor/laravel/framework/composer.json’))->require->php;”
^8.3

「Laravelは PHP 8.2 以上」は少し古い情報です

Laravel 11 の時代は最低 PHP 8.2 でしたが、現在 composer create-project で入る Laravel 13 は "php": "^8.3" を要求します。つまり PHP 8.2 では composer create-project が依存解決でこけます。Ubuntu 24.04 の既定 php8.3(8.3.6)はこの ^8.3 要件をちょうど満たすので、何も足さずに通ります。逆に Ubuntu 22.04 の php8.1 では完全に要件外です。

手順1:システムを更新する

まずパッケージリストを更新します。apt update を忘れると古いインデックスのままになり、意図しない版が入ることがあるので必ず先に実行してください。




ubuntu@linuxlab: ~
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-updates InRelease
Reading package lists… Done
$ sudo apt upgrade -y
Reading package lists… Done
Building dependency tree… Done

手順2:Nginx をインストールする

Ubuntu 24.04 の公式リポジトリには Nginx 1.24.0 が含まれています。apt install nginx 一発で完結します(実測ではパッケージ版 1.24.0-2ubuntu7.11 が入りました)。




ubuntu@linuxlab: ~
$ sudo apt install -y nginx
Setting up nginx-common (1.24.0-2ubuntu7.11) …
Setting up nginx (1.24.0-2ubuntu7.11) …
$ nginx -v
nginx version: nginx/1.24.0 (Ubuntu)
$ sudo systemctl enable –now nginx

VPS や実機では、ブラウザで http://<サーバーIP>/ にアクセスして「Welcome to nginx!」が出ればOKです。ファイアウォール(ufw)が有効なら HTTP/HTTPS を許可しておきます。




ubuntu@linuxlab: ~
$ sudo ufw allow ‘Nginx Full’
Rule added
Rule added (v6)

手順3:MySQL をインストール・初期設定する

Ubuntu 24.04 のリポジトリには MySQL 8.0.468.0.46-0ubuntu0.24.04.2)が含まれています。




ubuntu@linuxlab: ~
$ sudo apt install -y mysql-server
Setting up mysql-server-8.0 (8.0.46-0ubuntu0.24.04.2) …
Setting up mysql-server (8.0.46-0ubuntu0.24.04.2) …
$ sudo systemctl enable –now mysql
$ mysql –version
mysql Ver 8.0.46 for Linux on aarch64 ((Ubuntu))

本番運用するサーバーでは、続けて sudo mysql_secure_installation を実行し、匿名ユーザーの削除・リモートrootログインの禁止・テストDBの削除を「Yes」で進めておくと安全です。

著者アイコン
著者アイコン

Ubuntu の mysql-server は、初期状態だと root が auth_socket 認証になっています。つまり sudo mysql ならパスワードなしで入れます。本記事でも root はこの方式のまま、Laravel 用に専用ユーザーを別途作って使います。

手順4:PHP 8.3 と Laravel必須拡張をインストールする

正直、ここが一番つまずきやすいポイントです。Laravel は bcmathctypecurldomfileinfofilterhashmbstringopensslpcrepdosessiontokenizerxml といった拡張に加え、MySQL を使うなら pdo_mysql、ZIP 解凍に zip が必要です。Ubuntu 24.04 では、これらをまとめて1コマンドで揃えられます。




ubuntu@linuxlab: ~
$ sudo apt install -y \
php8.3 php8.3-fpm php8.3-mysql \
php8.3-mbstring php8.3-xml php8.3-curl \
php8.3-zip php8.3-bcmath
Setting up php8.3-common (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-cli (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-fpm (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-bcmath (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-curl (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-mbstring (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-mysql (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-xml (8.3.6-0ubuntu0.24.04.9) …
Setting up php8.3-zip (8.3.6-0ubuntu0.24.04.9) …

バージョンと必須モジュールを確認します。tokenizerctype は php8.3-cli に標準で同梱されているため、別パッケージは要りません。




ubuntu@linuxlab: ~
$ php8.3 –version
PHP 8.3.6 (cli) (built: May 25 2026 13:12:06) (NTS)
Copyright (c) The PHP Group
$ php8.3 -m | grep -E ‘(bcmath|curl|mbstring|mysql|tokenizer|xml|zip)’
bcmath
curl
mbstring
mysqli
mysqlnd
pdo_mysql
tokenizer
xml
xmlreader
xmlwriter
zip

実測では、Laravel が要求する拡張がすべて php8.3 -m に出てきました(下図)。1コマンドで漏れなく揃うのは Ubuntu 24.04 の地味に大きな利点です。

Laravel必須PHP拡張が php8.3 一式で全て揃うことの実測(php8.3 -m照合)
Laravel必須PHP拡張が php8.3 一式で全て揃うことの実測(php8.3 -m照合)

続いて PHP-FPM を起動します。Laravel を Nginx 経由で動かすには PHP-FPM が動いている必要があります。




ubuntu@linuxlab: ~
$ sudo systemctl enable –now php8.3-fpm
$ ls -l /run/php/php8.3-fpm.sock
srw-rw—- 1 www-data www-data 0 /run/php/php8.3-fpm.sock

この php8.3-fpm.sock が、あとで Nginx の fastcgi_pass から指すソケットです。パスを覚えておいてください。

LEMP構築コマンドログ(Nginx/PHP/MySQL/Composerのバージョン・実測端末)
LEMP構築コマンドログ(Nginx/PHP/MySQL/Composerのバージョン・実測端末)

手順5:Composer をインストールする

Composer は PHP のパッケージマネージャーで、Laravel のインストールに使います。Ubuntu 24.04 の公式リポジトリには Composer 2.7.12.7.1-2)が含まれています。




ubuntu@linuxlab: ~
$ sudo apt install -y composer
Setting up composer (2.7.1-2) …
$ composer –version
Composer version 2.7.1 2024-02-09 15:26:28
著者アイコン
著者アイコン

apt 版の Composer 2.7.1 でも、本記事の検証では Laravel 13.15.0 のインストールが最後まで問題なく通りました。より新しい Composer を使いたい場合は公式インストーラー(curl -sS https://getcomposer.org/installer | php)でも入れられます。

手順6:Laravel プロジェクトを作成する

Composer で Laravel プロジェクトを作成します。今回は /var/www/myapp に作ります。実測では Laravel 13.15.0 が入りました。




ubuntu@linuxlab: /var/www
$ cd /var/www
$ sudo composer create-project laravel/laravel myapp
Creating a “laravel/laravel” project at “./myapp”
Installing laravel/laravel (v13.x.x)
– Installing laravel/framework (v13.15.0): Extracting archive

Application key set successfully.
$ cd myapp && php artisan –version
Laravel Framework 13.15.0
$ sudo chown -R www-data:www-data /var/www/myapp
$ sudo chmod -R 775 storage bootstrap/cache

注意:パーミッション設定は必ず行う

storage/bootstrap/cache/ は Nginx の実行ユーザー(www-data)が書き込めないと、ログ書き込みやキャッシュ生成でエラーになります。chown www-data:www-datachmod 775 を忘れずに設定してください。

手順7:Nginx 仮想ホストを設定する

Nginx に Laravel 用の仮想ホストを追加します。Laravel のドキュメントルートは public/ ディレクトリで、PHP は php8.3-fpm.sock に渡すのがポイントです。

Nginx + PHP-FPM Laravel用仮想ホスト設定(設定例・概念図)
Nginx + PHP-FPM Laravel用仮想ホスト設定(設定例・概念図)



/etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
root /var/www/myapp/public;
index index.php;

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

location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.ht { deny all; }
}

設定を有効化してテストします。nginx -tsyntax is ok / test is successful を返せばOKです(本記事の検証でもこの通り通りました)。




ubuntu@linuxlab: ~
$ sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
$ sudo rm -f /etc/nginx/sites-enabled/default
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

手順8:MySQL データベースとユーザーを作成する

Laravel 用のデータベースとユーザーを作成します。root は auth_socket なので sudo mysql で入れます。




ubuntu@linuxlab: ~
$ sudo mysql
mysql> SELECT VERSION();
8.0.46-0ubuntu0.24.04.2
mysql> CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected
mysql> CREATE USER ‘laravel_user’@’localhost’ IDENTIFIED BY ‘StrongPassword123!’;
Query OK, 0 rows affected
mysql> GRANT ALL PRIVILEGES ON laravel_db.* TO ‘laravel_user’@’localhost’;
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

手順9:.env を設定して migrate する

Laravel の設定ファイル .env にデータベース接続情報を書き込みます。Laravel 13 の初期 .env は SQLite 前提でコメントアウトされているので、MySQL 用に書き換えます。




/var/www/myapp/.env(変更箇所のみ)
APP_NAME=MyApp
APP_ENV=production
APP_DEBUG=false
APP_URL=http://example.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=StrongPassword123!

続けて設定キャッシュと migrate を実行します。実測では、Laravel 13 の初期マイグレーション3本(users / cache / jobs)がすべて MySQL 8.0.46 に対して DONE になりました。Laravel 11 以降はマイグレーションが 0001_01_01_* に統合されている点も実出力から確認できます。




ubuntu@linuxlab: /var/www/myapp
$ php artisan key:generate
INFO Application key set successfully.
$ php artisan migrate –force
INFO Running migrations.
0001_01_01_000000_create_users_table …………. 20.79ms DONE
0001_01_01_000001_create_cache_table …………. 14.34ms DONE
0001_01_01_000002_create_jobs_table ………….. 28.39ms DONE
$ php artisan migrate:status
0001_01_01_000000_create_users_table …….. [1] Ran
0001_01_01_000001_create_cache_table …….. [1] Ran
0001_01_01_000002_create_jobs_table ……… [1] Ran

動作確認

ここまで来たら、Nginx + PHP-FPM 経由で Laravel が表示されるはずです。本記事の検証では、実際に curl で HTTP 200 と Laravel のページ(<title>Laravel</title>)が返ることを確認しました。




ubuntu@linuxlab: /var/www/myapp
$ curl -s -o /dev/null -w ‘%{http_code}\n’ http://localhost/
200
$ curl -s http://localhost/ | grep -o ‘<title>[^<]*</title>’
<title>Laravel</title>

ブラウザでアクセスすると、Laravel のウェルカムページが表示されます。下のスクリーンショットは、実際に ubuntu:24.04 で組んだ Nginx + PHP-FPM + MySQL が配信している画面を Playwright で撮影したものです。右下に v13.15.0 と表示されており、Laravel 13.15.0 が動いていることが分かります。

Nginx+PHP-FPM が配信する Laravel 13.15.0 ウェルカムページ(実ブラウザ撮影)
Nginx+PHP-FPM が配信する Laravel 13.15.0 ウェルカムページ(実ブラウザ撮影)

PHP-FPM が本当に処理しているかは、phpinfo() のページでも確認できます。Server APIFPM/FastCGIPHP Version8.3.6 になっていれば、Nginx → PHP-FPM の連携が成立しています。

Nginx経由のphpinfo:PHP 8.3.6 / Server API = FPM/FastCGI(実ブラウザ撮影)
Nginx経由のphpinfo:PHP 8.3.6 / Server API = FPM/FastCGI(実ブラウザ撮影)

ここまでの構築〜表示までを1枚にまとめた実測サマリが次の図です。

Ubuntu 24.04 のLEMPで Laravel が実際に動いたE2E検証結果(実測)
Ubuntu 24.04 のLEMPで Laravel が実際に動いたE2E検証結果(実測)

本番では info.php を必ず消す

phpinfo() はサーバー構成を丸ごと公開してしまうため、確認が終わったら rm public/info.php で必ず削除してください。本記事では検証目的で一時的に設置しています。

よくあるエラーと解決策

①composer create-project が PHP のバージョンで失敗する

最新の Laravel 13 は "php": "^8.3" を要求します。PHP 8.2 以下の環境では Your requirements could not be resolved といった依存解決エラーで止まります。php -v で 8.3 以上になっているか、複数PHPが入っている場合は php8.3 を明示して実行しているかを確認してください。Ubuntu 22.04 の人は手順前半の PPA 追加(ppa:ondrej/php)が必要です。

②Permission denied(storage/ ・ bootstrap/cache/)

Laravel が storage/bootstrap/cache/ に書き込めないとエラーになります。所有者とパーミッションを設定し直します。




ubuntu@linuxlab: ~
$ sudo chown -R www-data:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache
$ sudo chmod -R 775 /var/www/myapp/storage /var/www/myapp/bootstrap/cache

③502 Bad Gateway

Nginx から PHP-FPM へのソケット接続が失敗しています。PHP-FPM が起動しているか、Nginx 設定の fastcgi_pass が実在のソケットを指しているかを確認します。




ubuntu@linuxlab: ~
$ ls -l /run/php/php8.3-fpm.sock
srw-rw—- 1 www-data www-data 0 /run/php/php8.3-fpm.sock
$ sudo systemctl restart php8.3-fpm

Nginx 設定の fastcgi_pass unix:/run/php/php8.3-fpm.sock; のパスが、上記ファイルと完全に一致しているか確認してください。PHP のマイナーバージョンが違うと php8.2-fpm.sock などになり、ここがズレて 502 になります。

④SQLSTATE[HY000] [2002] 接続できない

Laravel から MySQL へ接続できないエラーです。.envDB_HOSTlocalhost ではなく 127.0.0.1 にすると、ソケットではなく TCP 経由になり安定することが多いです。あわせて作成したユーザー名・パスワード・DB名が .env と一致しているかも確認してください。設定を変えたら php artisan config:clear を忘れずに。

まとめ

Ubuntu 24.04 LTS 上での Laravel LEMP 環境構築を、実測ベースで振り返ります。

  • Ubuntu 24.04 は Nginx 1.24.0・PHP 8.3.6・MySQL 8.0.46・Composer 2.7.1 が apt で完結(PPA不要)
  • composer create-project で入る最新版は Laravel 13.15.0、要求PHPは8.2ではなく8.3(^8.3)
  • Ubuntu 24.04 の php8.3(8.3.6)はこの要件をちょうど満たすが、22.04 の php8.1 では届かず php8.3 も既定リポジトリに無い
  • Laravel 必須拡張は php8.3 一式の apt インストールで全部揃い、php8.3 -m で確認できる
  • Nginx 仮想ホストは root を public、fastcgi_pass を php8.3-fpm.sock に向け、storage と bootstrap/cache の書き込み権限を 775 にするのが要点

VPS 上で本格的に Laravel を運用するなら、東京リージョンがあって遅延が小さい Vultr が個人開発者には扱いやすくおすすめです。1 GBプランから始められます。

VPS 各社の料金・スペック・実測ベンチ比較は、こちらの記事も参考にしてください。

コメント

タイトルとURLをコピーしました