【さくらのVPS】Rocky LinuxにLaravelを構築する方法|Apache・PHP-FPMで公開するまで

Laravelで作成したWebシステムをインターネット上に公開する場合、VPSを利用すれば自由度の高いサーバー環境を構築できます。

この記事では、さくらインターネットの「さくらのVPS」へRocky Linuxをインストールし、Apache・PHP-FPM・Laravelを動作させるまでの手順を紹介します。

今回は次のような環境を想定します。

  • さくらのVPS
  • Rocky Linux 10
  • Apache
  • PHP 8.3
  • PHP-FPM
  • Laravel 13
  • Composer
  • MySQLまたはMariaDB
  • 独自ドメイン

LaravelをローカルPCで開発していて、「実際のVPSへアップロードして公開したい」という方にも参考になる構成です。


さくらのVPSでLaravelを動かす構成

今回構築するイメージは次のとおりです。

インターネット
      ↓
独自ドメイン
      ↓
さくらのVPS
      ↓
Rocky Linux
      ↓
Apache
      ↓
PHP-FPM
      ↓
Laravel
      ↓
MySQL / MariaDB

LaravelではWebサーバーのDocumentRootを、Laravelプロジェクト直下ではなく、

public

ディレクトリに設定することが重要です。

例えばLaravelを、

/var/www/example

へ配置した場合、ApacheのDocumentRootは、

/var/www/example/public

とします。

Laravel公式ドキュメントでも、公開ディレクトリをLaravelのpublicへ向けることが推奨されています。


1. さくらのVPSを契約する

まず、さくらのVPSを用意します。

Laravelの小規模なWebアプリケーションや検証環境であれば、最初から非常に大きなサーバーを契約する必要はありません。

ただし、

  • Laravel
  • Apache
  • PHP-FPM
  • MySQL
  • Node.js
  • npm build

などを同一サーバーで利用することを考えると、ある程度メモリに余裕を持たせると管理しやすくなります。

VPS作成時にはOSとしてRocky Linuxを選択します。

さくらのVPSではRocky Linux 9だけでなくRocky Linux 10も提供されています。


2. SSHでVPSへ接続する

Rocky Linuxをインストールしたら、SSHで接続します。

さくらのVPSの標準Rocky Linuxでは、管理用ユーザーとして、

rocky

が用意されています。

Windows PowerShell、Windows Terminal、WSL、macOSなどから次のように接続します。

ssh rocky@VPSのIPアドレス

例えば、

ssh rocky@192.0.2.10

です。

初回接続時にはSSHホストキーの確認が表示されるため、内容を確認して接続します。


3. Rocky Linuxをアップデートする

最初にOSを最新版へ更新します。

sudo dnf update -y

必要であれば再起動します。

sudo reboot

再起動後、再びSSH接続します。

さくらインターネットの公式マニュアルでも、VPS作成後にはセキュリティアップデートを行うことが推奨されています。


4. Apacheをインストールする

Laravelを公開するWebサーバーとしてApacheを使用します。

sudo dnf install httpd -y

Apacheを起動します。

sudo systemctl start httpd

OS起動時にもApacheが自動起動するように設定します。

sudo systemctl enable httpd

状態を確認します。

sudo systemctl status httpd

次のように、

active (running)

となっていればApacheは起動しています。


5. ファイアウォールでHTTP・HTTPSを許可する

Rocky Linuxではfirewalldを使用できます。

状態を確認します。

sudo systemctl status firewalld

起動していない場合は、

sudo systemctl enable --now firewalld

を実行します。

HTTPを許可します。

sudo firewall-cmd --permanent --add-service=http

HTTPSも許可します。

sudo firewall-cmd --permanent --add-service=https

設定を反映します。

sudo firewall-cmd --reload

確認します。

sudo firewall-cmd --list-all

Rocky Linuxではfirewalldが標準的なファイアウォール管理方法として利用されています。

なお、さくらのVPS側でもパケットフィルターを設定している場合は、

SSH
HTTP
HTTPS

について必要な通信が許可されていることを確認してください。


6. PHPをインストールする

Laravel 13ではPHP 8.3以上が必要です。

Rocky Linux 10ではAppStreamからPHP 8.3系が提供されているため、通常は標準リポジトリからインストールできます。

まずPHPをインストールします。

sudo dnf install php php-cli php-fpm php-mysqlnd php-mbstring php-xml php-bcmath php-gd php-curl php-opcache php-zip -y

バージョンを確認します。

php -v

例えば、

PHP 8.3.x

と表示されれば問題ありません。

LaravelではPHP本体だけではなく、XML、Mbstring、PDOなど複数のPHP Extensionが必要になります。


7. PHP-FPMを起動する

PHP-FPMを起動します。

sudo systemctl start php-fpm

自動起動も設定します。

sudo systemctl enable php-fpm

状態を確認します。

sudo systemctl status php-fpm
active (running)

となっていれば正常です。

Apacheについても再起動しておきます。

sudo systemctl restart httpd

8. Composerをインストールする

LaravelではComposerを使用してPHPライブラリを管理します。

Composer公式インストーラーを利用してインストールします。

Composerをインストールした後、

composer --version

で確認します。

例えば、

Composer version 2.x.x

のように表示されれば利用できます。

サーバーへ既存Laravelプロジェクトを配置する場合は、

composer install

を使用します。

本番環境では通常、

composer install --no-dev --optimize-autoloader

とします。

これにより開発用パッケージを除外し、本番環境向けにオートローダーを最適化できます。


9. Laravelを配置する

今回は、

/var/www/example

へLaravelを配置する例とします。

ディレクトリへ移動します。

cd /var/www

GitHubなどから取得する場合は、

sudo git clone https://github.com/ユーザー名/リポジトリ名.git example

とします。

移動します。

cd /var/www/example

Composerを実行します。

composer install --no-dev --optimize-autoloader

10. .envファイルを作成する

Laravelの環境設定ファイルを作成します。

cp .env.example .env

編集します。

vi .env

本番環境では例えば次のように設定します。

APP_NAME="Example"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://example.com

重要なのが、

APP_DEBUG=false

です。

本番環境で、

APP_DEBUG=true

にすると、エラー発生時に内部情報などが表示される可能性があります。

アプリケーションキーを生成します。

php artisan key:generate

11. データベースを設定する

MySQLまたはMariaDBを用意したら、.envへ接続情報を設定します。

例えば、

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=example
DB_USERNAME=example_user
DB_PASSWORD=********

とします。

設定後、Laravelから接続できるか確認します。

php artisan migrate

正常にマイグレーションできればLaravelとデータベースの接続は完了です。


12. Laravelのディレクトリ権限を設定する

Laravelでは、

storage
bootstrap/cache

へWebサーバーから書き込める必要があります。

Laravel公式ドキュメントでも、この2つのディレクトリに対してWebサーバープロセスが書き込みできる必要があるとされています。

Apacheユーザーへ権限を設定する場合は、環境に合わせて例えば次のように設定します。

sudo chown -R apache:apache /var/www/example/storage
sudo chown -R apache:apache /var/www/example/bootstrap/cache

さらに、

sudo chmod -R 775 /var/www/example/storage
sudo chmod -R 775 /var/www/example/bootstrap/cache

を設定します。

プロジェクト全体に、

chmod -R 777

を設定する方法は避けましょう。


13. ApacheのVirtualHostを設定する

LaravelをApacheから表示できるようにVirtualHostを設定します。

例えば、

sudo vi /etc/httpd/conf.d/example.conf

を作成します。

内容は次のようにします。

<VirtualHost *:80>

    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example/public

    <Directory /var/www/example/public>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/example-error.log
    CustomLog /var/log/httpd/example-access.log combined

</VirtualHost>

ポイントは、

DocumentRoot /var/www/example/public

です。

Laravelプロジェクトの、

/var/www/example

をDocumentRootにしてはいけません。

必ず、

/var/www/example/public

をWeb公開ディレクトリにします。


14. Apacheの設定を確認する

Apache設定ファイルに間違いがないか確認します。

sudo apachectl configtest

次のように表示されれば問題ありません。

Syntax OK

Apacheを再起動します。

sudo systemctl restart httpd

15. Laravelの画面を確認する

ブラウザから、

http://example.com

へアクセスします。

Laravelの画面が表示されれば基本的な構築は完了です。

もし、

500 Internal Server Error

が発生した場合は、Laravelログを確認します。

tail -f /var/www/example/storage/logs/laravel.log

Apache側のログも確認します。

sudo tail -f /var/log/httpd/example-error.log

この2つを見ると、Laravel本体の問題なのかApache側の問題なのかを切り分けやすくなります。


16. Laravelのキャッシュを最適化する

本番環境ではLaravelのキャッシュを有効にします。

まず既存キャッシュを削除します。

php artisan optimize:clear

その後、

php artisan config:cache
php artisan route:cache
php artisan view:cache

を実行します。

または、

php artisan optimize

を使用する方法もあります。

デプロイ後に.envを書き換えたにもかかわらず設定が反映されない場合は、

php artisan optimize:clear

を一度実行してみるとよいでしょう。


17. 独自ドメインをVPSへ向ける

独自ドメインを使用する場合は、DNSにAレコードを設定します。

例えば、

example.com

をVPSのIPアドレス、

192.0.2.10

へ向けます。

DNS設定例は、

種類:A
ホスト名:@
値:VPSのIPアドレス

です。

wwwも使用する場合は、

www

についてもAレコードまたはCNAMEを設定します。

DNSは設定後すぐにすべての環境へ反映されるとは限らないため注意してください。


18. HTTPS化する

本番公開するLaravelサイトではHTTPS化しておきましょう。

一般的にはLet’s Encryptを利用してSSL/TLS証明書を設定できます。

HTTPS設定後、

https://example.com

でLaravelへアクセスできることを確認します。

その後、.envも、

APP_URL=https://example.com

としておきます。


Laravelが表示されない場合のチェックポイント

LaravelをVPSへ構築した際によくあるトラブルをまとめます。

403 Forbidden

ApacheのDocumentRootやDirectory設定を確認します。

<Directory /var/www/example/public>
    AllowOverride All
    Require all granted
</Directory>

また、ファイル・ディレクトリの権限も確認します。


500 Internal Server Error

まずLaravelログを確認します。

tail -f storage/logs/laravel.log

Apacheログも確認します。

sudo tail -f /var/log/httpd/error_log

Laravelのトップページは表示されるがルーティングできない

Apacheで.htaccessが有効になっているか確認します。

AllowOverride All

が必要です。

設定変更後は、

sudo systemctl restart httpd

を実行します。


Permission deniedが発生する

Laravelでは、

storage
bootstrap/cache

の書き込み権限を確認します。

sudo chown -R apache:apache storage
sudo chown -R apache:apache bootstrap/cache

.envを変更しても反映されない

Laravelの設定キャッシュが残っている可能性があります。

php artisan optimize:clear

を実行します。

その後、必要に応じて、

php artisan optimize

を実行します。


本番環境で確認しておきたいセキュリティ設定

VPSはレンタルサーバーと異なり、自分自身でOSやサービスの管理を行う必要があります。

最低限、次の点は確認しておきましょう。

  • rootによるSSHログインを使用しない
  • SSH公開鍵認証を使用する
  • OSを定期的にアップデートする
  • firewalldを有効にする
  • 必要のないポートを開放しない
  • LaravelのAPP_DEBUGをfalseにする
  • .envを外部公開しない
  • MySQLの3306番ポートを不必要にインターネット公開しない
  • HTTPSを使用する
  • 定期的にバックアップを取得する

さくらインターネットでも、VPS構築後は一般ユーザー、公開鍵認証、sudo、ファイアウォール、アップデート、バックアップなどのセキュリティ対策を確認するよう案内しています。


まとめ

今回は、さくらのVPSのRocky LinuxへLaravelを構築し、Apache + PHP-FPM環境で公開する方法を紹介しました。

大まかな流れは、

さくらのVPS作成
       ↓
Rocky Linuxセットアップ
       ↓
Apacheインストール
       ↓
PHP / PHP-FPMインストール
       ↓
Composerインストール
       ↓
Laravel配置
       ↓
.env設定
       ↓
データベース設定
       ↓
Apache VirtualHost設定
       ↓
独自ドメイン設定
       ↓
HTTPS化

となります。

特にLaravelをVPSへ公開する場合、

DocumentRoot → Laravelプロジェクト/public

とすることと、

storage
bootstrap/cache

の権限設定は重要です。

ローカル環境では問題なく動いていたLaravelがVPSでは動作しない場合も、Apacheログと、

storage/logs/laravel.log

を確認すれば、多くの場合は原因を切り分けることができます。

さくらのVPSとRocky Linuxを利用すれば、Laravelを使った業務システムやWebアプリケーションを自由度の高い環境で公開できます。