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通りの方法がある。
基本的には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/public
をlaravel
に移動・変更する。
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
ディレクトリーの公開方法を整理した。
最後にそれぞれの方法の利点と欠点を以下にまとめた。
方法 | 利点 | 欠点 |
---|---|---|
ドキュメントルートの指定 | 設定が簡単 | 管理者権限が必要 |
index.php の修正 | ユーザー権原で可能 サーバーの設定から独立 シェル操作が不要 | 開発ソースの修正が必要 |
シンボリックリンクの作成 | ユーザー権原で可能 | シェル操作が必要 |
大きく3種類の方法を整理した。どれも一長一短あるが,柔軟性から基本的には3番目のシンボリックリンクの作成がベストだろう。
レンタルサーバーで,シェル操作ができない場合,コマンドの実行に抵抗がある場合などは2番目のindex.php
の修正もありだ。
VPSで管理者権限がある場合,どの方法も選択でき,唯一1番目のドキュメントルートの指定ができる。公開ディレクトリーを明確に分離できるので,この場合も3番目のシンボリックリンクの作成で対応したほうがいいと思った。
今回整理した方法で実際にLaravelでWebアプリケーションを公開してみよう。