Ubuntu + Nginx + Laravelの環境構築方法

Ubuntu + Nginx + Laravelの環境構築方法

UbuntuにLaravelを本番寄りの形で配置する場合、最初に揃えるべきものは4つある。Nginx、PHP-FPM、Composer、そしてLaravel本体。ここで大事なのは「とりあえず表示できる」状態で終わらせず、public 配下を正しく公開し、.env、APP_KEY、権限、Nginx設定、PHP-FPM連携まで一通り揃えること。Laravelは php artisan serve だけでも動くが、実際の運用ではNginxとPHP-FPMで処理する構成が基本になるため、最初からその形で組んでおくと後の移行が楽になる。

最初に準備するもの

最低限必要になるのは次の通り。
・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では .envAPP_KEY が揃っていないと正しく動かない。通常は .env が生成されるが、無ければ .env.example をコピーする。

cp .env.example .env
php artisan key:generate

これで APP_KEY が生成される。
発生しやすいエラー条件は、
.env が無い
・APP_KEYが空のまま
・権限不足で .env に書き込めない
といったケース。

storageとbootstrap/cacheの権限を整える

Laravelはログ、キャッシュ、セッション、compiled viewなどで storagebootstrap/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の roottry_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
発生条件:storagebootstrap/cache の権限不足
・反映されない
発生条件:設定キャッシュ、Nginx再読み込み忘れ、古い .env のまま
初心者は「画面に出たエラー番号」で全部同じように見がちだが、502、500、404で疑う場所はかなり違う。

まとめ

Ubuntu + Nginx + Laravelの構築では、
・Ubuntu更新
・Nginx導入
・PHP-FPM導入
・Composer導入
・Laravel作成
・APP_KEY生成
・Nginxで public を公開
・PHP-FPMソケット設定
・権限調整
・DB設定
という順で進めると整理しやすい。
特に重要なのは、Laravelの公開ディレクトリを必ず public にすること、storagebootstrap/cache の権限を整えること、そして 500/502/404 の違いを意識してログを見ること。
ここまで一通り揃っていれば、Ubuntu上でのLaravel運用の土台として十分使いやすい環境になる。