レンタルサーバーとクラウドサーバーで異なるpublic/ディレクトリの役割の違い
はじめに
Webアプリを本番環境にデプロイする際、HerokuやAWS EC2などのクラウドサーバーでは何も問題なく動くのに、レンタルサーバーにアップロードするとなぜか動かないことがありました。そこから調べてみるとシンボリックリンクが関係していることが分かりました。
この記事では、Laravelのpublicディレクトリが必要な理由と、なぜレンタルサーバーでシンボリックリンクが必要になるのかについて説明します。
この記事で学べること
- Laravelにおけるpublic/ディレクトリの役割とその理由
- クラウドサーバーとレンタルサーバーでのデプロイの違い
- シンボリックリンクの使い方と意味
対象者
- Laravelをレンタルサーバーで運用したい方
- Laravelの構造を理解したい初心者エンジニア
- Webサーバーの設定とLaravelの関係を知りたい方
用語解説
シンボリックリンクとは
シンボリックリンク(symbolic link)とは、他のファイルやディレクトリへの「参照ポインタ」です。
ln -s /path/to/target /path/to/link
これを使うことで、Webサーバーが固定されたディレクトリしか見れない場合でも、あたかもそこにファイルがあるように見せることができます。
ドキュメントルートとは
Webサーバーがリクエストに対して最初に探しに行くディレクトリのことです。
たとえば、https://example.com/index.html にアクセスがあったときに、index.html を探しに行く場所がドキュメントルートです。
結論
- クラウドサーバーでは、ドキュメントルートを
public/
に設定できる - レンタルサーバーでは、ドキュメントルートが固定(例:
~/public_html
)で、Laravelのpublic/
を直接使えない - そのため、
public_html
→laravel/public
へのシンボリックリンクが必要になる
public/
ディレクトリの役割
Laravelの構造とLaravelではセキュリティの観点から、Webからアクセスされるべきファイルをpublic/
フォルダに隔離しています。
- index.php(アプリのフロントコントローラ)
- CSS / JS / 画像などのアセットファイル
逆に、app/
や routes/
、.env
などの機密情報を含むファイルはWebから直接アクセスできない位置に配置されています。
理由
Laravelアプリ全体に外部から直接アクセスできる構造だと、機密ファイルが流出する危険性があります。
そのため、Webサーバーのドキュメントルート(public フォルダ)を明示的に指定するのが大前提となっています。
クラウドサーバーの場合
特徴
- NginxやApacheの設定ファイル(例:nginx.conf, httpd.conf)を自由に書き換え可能
- ドキュメントルートを
/var/www/html/laravel-app/public
のように自由に設定できる
その結果
-
public/
をそのままルートとしてWebサーバーが参照できる - Laravelアプリ本来の構成を変更せずに安全に動作させられる
- シンボリックリンクを作成しなくとも公開可能
レンタルサーバー(例:お名前.com)の場合
特徴
- Webサーバーの設定に制限がある(ApacheやNginxの設定変更が不可)
- ドキュメントルートが
~/public_html
などで固定されている
そのままLaravelアプリを配置する場合
-
routes/web.php
や.env
などに外部からアクセス可能になってしまう… - セキュリティリスクが非常に高く、推奨されない
対処法
- Laravelアプリ全体を
~/laravel
などの安全な位置に設置 -
~/public_html
にシンボリックリンクを作成:
ln -s ~/laravel/public ~/public_html
- Webサーバーからは
~/public_html
以下のみが見える → 安全に運用可能
まとめ
項目 | クラウドサーバー | レンタルサーバー |
---|---|---|
Webサーバー設定 | 基本的に変更可能 | 固定・制限あり |
ドキュメントルート |
public/ に設定可 |
public_html に固定 |
Laravel構成の保持 | そのままで問題なし | シンボリックリンクが必要 |
セキュリティ | 高く保てる | 設定ミスで危険 |
おわりに
私も最初はクラウドサーバーでスムーズにデプロイ出来たことが、レンタルサーバーではなぜかうまくいかずに戸惑いました。調べてみると、レンタルサーバー環境は制限もありますが、こうした知識を身につけて設定すれば、Laravelでも十分に安全な本番運用ができることが分かりました。
この記事が、レンタルサーバーでLaravelアプリを動かそうとしている方の参考になれば幸いです。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion