Laravelのpublicディレクトリーの公開方法

概要

PHP Laravel (6.x) で開発したWebアプリケーションを公開する際は,「Installation – Laravel – The PHP Framework For Web Artisans」にある通り,publicディレクトリーをWebサーバーのドキュメントルートに指定する。

公式マニュアルでは,「Deployment – Laravel – The PHP Framework For Web Artisans」でNginxでの設定例が書かれている程度で,他に情報はない。

このpublicディレクトリーはLaravelの開発リポジトリーの内部にある。そのため,そのままだと開発リポジトリー内のサブディレクトリーをドキュメントルートに指定することになり,たくさんのファイル・ディレクトリー内に囲まれており紛らわしい

また,レンタル−サーバーなどで自分でドキュメントルートを指定できない場合もあり,この方法は柔軟性に欠ける。

そこで,Laravelでのpublicディレクトリーの公開方法を検討する。具体的には,以下の3通りの方法がある。

Laravelのpublicディレクトリーの公開方法
  1. ドキュメントルートの指定
  2. index.phpの修正
  3. シンボリックリンクの作成

基本的には3のシンボリックリンクの作成を推奨する。

なお,解説手順の中では,例として開発リポジトリーを/var/www/laravel.git,公開ディレクトリーを/var/www/laravelとしている。

1. ドキュメントルートの指定

1番目の方法は公式マニュアルでも書かれている通り,ドキュメントルートでpublicを指定する方法だ。

例えば,Apache HTTP Server (httpd) の場合,httpd.confに以下のようにドキュメントルートを指定する。

DocumentRoot /var/www/laravel.git/public

一番簡単な方法だろう。ただし,この方法はサーバーの全体設定 (httpd.conf) を修正するため,VPSなどで管理者権限を持っている場合にだけ可能となる。

レンタル−サーバーなど一般ユーザー権限しかない場合,実現不可能だ。

また,ディレクトリー構成が気持ち悪かったり,開発ファイルの中に公開ディレクトリーがあることが紛らわしい。

汎用性にも欠けるのであまりオススメしない。

2. index.phpの修正

2番目の方法ではpublic/index.phpを修正する。

index.phpには,パスを参照する以下の2行のコードが存在する。

require __DIR__.'/../vendor/autoload.php';
...
$app = require_once __DIR__.'/../bootstrap/app.php';

ここのパス指定を修正することで,publicディレクトリーだけを別の場所に移動できる。

例えば,index.phpを以下のように修正する。

require __DIR__.'/../laravel.git/vendor/autoload.php';
...
$app = require_once __DIR__.'/../laravel.git/bootstrap/app.php';

そして,以下のコマンドでlaravel.git/publiclaravelに移動・変更する。

cd /var/www/
mv laravel.git/public laravel

これでも問題なく動作する。サーバーの設定に一切依存せずに公開可能なのが利点だ。

代わりに,バージョン管理している開発ソースへの修正が必要な点が欠点となる。

3. シンボリックリンクの作成

3番目の方法では,publicディレクトリーへのシンボリックリンクを作成することで対応する。個人的にベストな方法だと考えている。

例えば,以下のコマンドで/var/www/laravelから/var/www/laravel.gitにシンボリックリンクを作成する。

cd /var/www
ln -fns laravel.git/public laravel

ディレクトリー構成を好きにすることができ,index.phpなど開発ソースを修正する必要もないのが利点だ。

ただし,この方法はサーバーがシンボリックリンクを辿れるようになっている必要がある。

具体的には,httpd.conf.htaccessで以下の指定が必要になる。

Options FollowSymlinks

また,.htaccessで使うにはhttpd.confで以下の指定が必要となる。

AllowOverride Options

ただ,これらの設定はサーバーのhttpd.confデフォルト設定で有効になっていることが多い。

実際,レンタルサーバーのCORESERVERでもおそらく,httpd.confでユーザーディレクトリーに対して,FolloSymlinksが有効になっているようで,問題なく機能した。

ディレクトリー構成の柔軟性と,開発ソースの修正が不要な点から一番最初に検討すべき方法だろう。

結論

Laravelでのpublicディレクトリーの公開方法を整理した。

最後にそれぞれの方法の利点と欠点を以下にまとめた。

publicディレクトリーの公開方法の利点・欠点
方法利点欠点
ドキュメントルートの指定設定が簡単管理者権限が必要
index.phpの修正ユーザー権原で可能
サーバーの設定から独立
シェル操作が不要
開発ソースの修正が必要
シンボリックリンクの作成ユーザー権原で可能シェル操作が必要

大きく3種類の方法を整理した。どれも一長一短あるが,柔軟性から基本的には3番目のシンボリックリンクの作成がベストだろう。

レンタルサーバーで,シェル操作ができない場合,コマンドの実行に抵抗がある場合などは2番目のindex.phpの修正もありだ。

VPSで管理者権限がある場合,どの方法も選択でき,唯一1番目のドキュメントルートの指定ができる。公開ディレクトリーを明確に分離できるので,この場合も3番目のシンボリックリンクの作成で対応したほうがいいと思った。

今回整理した方法で実際にLaravelでWebアプリケーションを公開してみよう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です