Ubuntu + Nginx + Laravelの環境構築方法
- 作成日 2026.03.27
- その他
UbuntuにLaravelを本番寄りの形で配置する場合、最初に揃えるべきものは4つある。Nginx、PHP-FPM、Composer、そしてLaravel本体。ここで大事なのは「とりあえず表示できる」状態で終わらせず、public 配下を正しく公開し、.env、APP_KEY、権限、Nginx設定、PHP-FPM連携まで一通り揃えること。Laravelは php artisan serve だけでも動くが、実際の運用ではNginxとPHP-FPMで処理する構成が基本になるため、最初からその形で組んでおくと後の移行が楽になる。
- 1. 最初に準備するもの
- 2. Ubuntuを最新状態にする
- 3. Nginxをインストールする
- 4. PHPと必要拡張をインストールする
- 5. Composerをインストールする
- 6. Laravelプロジェクトを作成する
- 7. .envとAPP_KEYを整える
- 8. storageとbootstrap/cacheの権限を整える
- 9. Nginx用のserver blockを作る
- 10. PHP-FPMソケットの場所を確認する
- 11. Nginx設定を有効化する
- 12. PHP-FPMの状態を確認する
- 13. データベース設定を整える
- 14. 設定変更後はキャッシュを意識する
- 15. 動作確認とログ確認
- 16. よくあるエラーと発生条件
- 17. まとめ
最初に準備するもの
最低限必要になるのは次の通り。
・Ubuntuサーバー
・sudo権限を持つユーザー
・インターネット接続
・Laravelを配置するドメインまたはIPアドレス
・必要に応じてMySQLやMariaDBなどのDBサーバー
初心者がつまずきやすいのは、サーバーにログインした直後の状態で「何が入っていて何が入っていないか」を把握せずに進めてしまうこと。まずは土台を揃える。
Ubuntuを最新状態にする
最初にパッケージ情報を更新し、既存パッケージもアップデートしておく。ここを飛ばすと依存関係で詰まりやすい。
sudo apt update
sudo apt upgrade -y
発生しやすいエラー条件は、
・別のapt処理が動いている
・sudo権限が無い
・古いパッケージ情報のままで依存解決に失敗する
といったもの。
Nginxをインストールする
Laravelのフロント側でHTTPリクエストを受けるWebサーバーとしてNginxを入れる。
sudo apt install -y nginx
インストール後、起動状態を確認する。
sudo systemctl status nginx
自動起動も有効にしておく。
sudo systemctl enable nginx
ブラウザでサーバーのIPアドレスにアクセスし、Nginxの初期画面が出ればここまでは成功。
発生しやすい問題は、
・80番ポートが既に他サービスに使われている
・ファイアウォールでHTTPが閉じている
・Nginx自体は入ったが起動していない
というケース。
PHPと必要拡張をインストールする
LaravelはPHPフレームワークなので、PHP本体と必要拡張を揃える。Nginx環境では php-fpm も必要。
sudo apt install -y php php-fpm php-cli php-common php-mbstring php-xml php-bcmath php-curl php-zip php-mysql unzip curl git
インストール後はPHPのバージョン確認をする。
php -v
よくあるエラー条件は、
・PHP本体だけで拡張が足りない
・php-fpm が入っていない
・複数バージョンのPHPが混在していて、CLIとFPMで違うものを見ている
というもの。
Composerをインストールする
Laravelの作成と依存関係管理にはComposerが必要。まだ入っていない場合は次の手順で入れる。
cd ~
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php composer-setup.php
php -r “unlink(‘composer-setup.php’);”
sudo mv composer.phar /usr/local/bin/composer
インストール確認。
composer –version
発生しやすいエラー条件は、
・ネットワーク制限でインストーラ取得失敗
・PHP拡張不足でComposerが警告を出す
・/usr/local/bin への移動権限が無い
といったケース。
Laravelプロジェクトを作成する
Composerを使ってLaravelプロジェクトを作る。配置先は /var/www 配下にまとめると管理しやすい。
cd /var/www
sudo composer create-project laravel/laravel myapp
作成後、所有者を現在の実行ユーザーに寄せる。
sudo chown -R $USER:$USER /var/www/myapp
プロジェクトへ移動する。
cd /var/www/myapp
ここでの発生しやすい問題は、
・Composerの途中失敗で vendor が不完全
・配置先ディレクトリへの書き込み権限が無い
・/var/www 配下に root 所有で作って後から編集できなくなる
というもの。
.envとAPP_KEYを整える
Laravelでは .env と APP_KEY が揃っていないと正しく動かない。通常は .env が生成されるが、無ければ .env.example をコピーする。
cp .env.example .env
php artisan key:generate
これで APP_KEY が生成される。
発生しやすいエラー条件は、
・.env が無い
・APP_KEYが空のまま
・権限不足で .env に書き込めない
といったケース。
storageとbootstrap/cacheの権限を整える
Laravelはログ、キャッシュ、セッション、compiled viewなどで storage と bootstrap/cache に書き込む。ここが書けないと500エラーの温床になる。
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
発生しやすい問題は、
・ブラウザでは500エラーしか出ない
・ログが書けず原因が追えない
・デプロイ直後にだけ動かない
という権限系の不具合。
Nginx用のserver blockを作る
Laravelは public ディレクトリを公開ルートにする必要がある。Nginx設定ではここを間違えやすい。
新しい設定ファイルを作る。
sudo nano /etc/nginx/sites-available/myapp
内容は次のような基本形にする。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/myapp/public;
index index.php index.html;
access_log /var/log/nginx/myapp_access.log;
error_log /var/log/nginx/myapp_error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
ここで最も注意すべきなのは、root が /public になっていること。
Laravelプロジェクト直下を公開すると、.env や内部ファイルが見えてしまう危険がある。
PHP-FPMソケットの場所を確認する
Nginx設定の fastcgi_pass は、サーバー上のPHP-FPMソケットに合わせる必要がある。
環境によっては php8.3-fpm.sock のようにバージョン付きになることもあるため、実際のソケット名を確認して合わせる。
ls /run/php/
たとえば次のような出力なら、設定もそれに合わせる。
php8.3-fpm.pid
php8.3-fpm.sock
その場合、Nginx設定は次のようにする。
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
発生しやすいエラー条件は、
・Nginxは起動するがPHPだけ502 Bad Gateway
・ソケットパスが実際と違う
・PHP-FPMサービス自体が起動していない
というもの。
Nginx設定を有効化する
作成したserver blockを有効化し、設定テストを行ってからNginxを再起動する。
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
もし初期のdefault設定が邪魔になるなら無効化する。
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
nginx -t でOKが出るまでは再読み込みしない方が安全。
PHP-FPMの状態を確認する
Nginxとの連携で問題があるときは、PHP-FPM側も確認する。
sudo systemctl status php-fpm
もしバージョン付きサービスなら次のように確認する。
sudo systemctl status php8.3-fpm
自動起動も有効にしておく。
sudo systemctl enable php-fpm
発生しやすい問題は、
・PHPは入っているがFPMが停止している
・CLI版だけ使えてWebでは動かない
・Nginx側の設定は正しいのにFPMが落ちている
といった状態。
データベース設定を整える
LaravelでDBを使うなら .env の接続設定を揃える。MySQLを使う場合の基本形は次の通り。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myapp_user
DB_PASSWORD=secret
設定後はマイグレーションを実行する。
php artisan migrate
発生しやすいエラー条件は、
・DB自体が存在しない
・ユーザー権限不足
・パスワード不一致
・.env を変えたのに設定キャッシュが古い
といったもの。
設定変更後はキャッシュを意識する
.env や設定ファイルを変えたのに反映されない場合は、設定キャッシュを疑う。
まずはクリアする。
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
必要なら再生成する。
php artisan config:cache
本番では特に「設定は直したのに挙動が変わらない」という問題が起きやすい。
動作確認とログ確認
ここまで終わったら、ブラウザでドメインまたはIPアドレスにアクセスしてLaravelの画面が出るか確認する。
もし500や502が出る場合は、次のログを見る。
tail -n 100 /var/log/nginx/myapp_error.log
tail -n 100 /var/www/myapp/storage/logs/laravel.log
502ならNginx⇔PHP-FPM、500ならLaravel内部、404ならNginxの root や try_files を疑うと切り分けしやすい。
よくあるエラーと発生条件
Ubuntu + Nginx + Laravel構築でよくある問題は次の通り。
・502 Bad Gateway
発生条件:PHP-FPM停止、ソケットパス不一致、権限問題
・500 Internal Server Error
発生条件:APP_KEY未設定、storage権限不足、DB接続失敗
・404 Not Found
発生条件:Nginxのrootが public になっていない、server_name不一致
・Permission denied
発生条件:storage や bootstrap/cache の権限不足
・反映されない
発生条件:設定キャッシュ、Nginx再読み込み忘れ、古い .env のまま
初心者は「画面に出たエラー番号」で全部同じように見がちだが、502、500、404で疑う場所はかなり違う。
まとめ
Ubuntu + Nginx + Laravelの構築では、
・Ubuntu更新
・Nginx導入
・PHP-FPM導入
・Composer導入
・Laravel作成
・APP_KEY生成
・Nginxで public を公開
・PHP-FPMソケット設定
・権限調整
・DB設定
という順で進めると整理しやすい。
特に重要なのは、Laravelの公開ディレクトリを必ず public にすること、storage と bootstrap/cache の権限を整えること、そして 500/502/404 の違いを意識してログを見ること。
ここまで一通り揃っていれば、Ubuntu上でのLaravel運用の土台として十分使いやすい環境になる。
-
前の記事
UbuntuでLaravelのパーミッション設定(権限エラー対策) 2026.03.26
-
次の記事
記事がありません
コメントを書く