Laravel本番環境の安全なデプロイ設定完全ガイド|安全運用の基本を実務視点で解説
Laravelで開発していると、ローカル環境では快適に動いていたのに、 本番公開した瞬間に「画面真っ白」「エラー大量発生」「設定が反映されない」 みたいな事故に遭遇することがあります。
自分も旅先のカフェでデプロイ作業をしていたとき、 「APP_DEBUG=true」のまま公開してしまい、 サーバーパスやDB情報が表示されて冷や汗をかいた経験があります。
Laravelの本番運用は、単純にサーバへアップロードすれば終わりではありません。 むしろ本番環境こそ、本当の設計力が問われます。
この記事では、Laravel本番環境で必須となる 「安全なデプロイ設定」を、 実務レベルでわかりやすく体系的にまとめます。
Laravel本番環境で最重要となる .env 設定
まず最初に確認したいのが .env 設定です。
Laravel運用の安全性は、ここでかなり決まります。
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
LOG_LEVEL=error
APP_DEBUG=false は絶対に忘れない
本番環境で APP_DEBUG=true のままだと、
例外発生時に以下のような情報が丸見えになります。
- DB接続情報
- サーバパス
- 内部ディレクトリ構成
- 環境変数
つまり、攻撃者に「どう侵入すればいいか」を 教えているような状態です。
Laravel本番環境では、
APP_DEBUG=false は最重要設定です。
.env をGit管理しない理由
初心者の頃にやりがちなのが、
そのまま git add . してしまうパターン。
git add .env
これは本当に危険です。
.env には以下のような機密情報が含まれています。
- DBパスワード
- APIキー
- メール認証情報
- AWS認証情報
- Stripe秘密鍵
GitHubへ誤ってPushした瞬間、 インシデント化するケースも珍しくありません。
.gitignore に必ず追加する
.env
実務では「公開したあと消せばいい」は通用しません。 履歴に残るからです。
Laravel本番運用では config:cache が必須
Laravelは便利な反面、 設定読み込みが多くなるとパフォーマンスが落ちます。
そこで本番ではキャッシュ化を行います。
php artisan config:cache
php artisan route:cache
php artisan view:cache
キャッシュ化のメリット
- 設定読み込み高速化
- ルーティング高速化
- ビューコンパイル高速化
- 予期せぬ.env変更防止
特に config:cache は、
本番Laravel運用ではほぼ必須です。
.env変更後は再生成が必要
php artisan config:clear
php artisan config:cache
これを忘れると、 「設定変えたのに反映されない」 という沼にハマります。
public ディレクトリだけを公開する
Laravelでは、
Web公開されるべきなのは public/ のみです。
/var/www/app
├─ app/
├─ config/
├─ .env
└─ public/
危険なNG構成
- ルート全体公開
- .envへ直接アクセス可能
- storageが公開領域に存在
レンタルサーバで雑に設定すると、 .env流出事故は普通に起きます。
ApacheやNginx設定では、 DocumentRoot を必ず public に向けましょう。
Laravel本番環境のファイル権限設定
旅先でサーバ設定していると、 意外とハマるのが権限エラーです。
Laravelは storage や cache に 書き込み権限が必要になります。
chown -R www-data:www-data /var/www/app
chmod -R 755 /var/www/app
chmod -R 775 storage bootstrap/cache
権限設定の考え方
- storage は書き込み可能
- cache は書き込み可能
- その他は基本読み取り専用
777を使いたくなる気持ちはわかりますが、 本番では避けましょう。
Laravelのログ設計とエラーハンドリング
本番環境では、 「必要なログだけを残す」 という設計が大切です。
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
],
]
.env 側では以下を設定。
LOG_CHANNEL=stack
LOG_LEVEL=error
dailyログのメリット
- ログ肥大化防止
- 日別管理しやすい
- 障害解析しやすい
本番では、 debugログを大量出力しない設計が重要です。
秘密情報はベタ書きしない
これは実務で本当に重要です。
NG例
$password = "mypassword";
推奨
DB_PASSWORD=******
さらに大規模環境では、 以下のようなSecret管理サービスも利用されます。
- AWS Secrets Manager
- Azure Key Vault
- GCP Secret Manager
最近は「.envすら置かない」構成も増えています。
HTTPS強制はLaravel本番運用で必須
HTTPS未対応は、 今やSEOにも悪影響があります。
if ($this->app->environment('production')) {
\URL::forceScheme('https');
}
またはWebサーバ側で HTTP→HTTPSリダイレクトを設定します。
セキュリティだけでなく、 Google検索評価にも関わる重要ポイントです。
デバッグツールを本番から除外する
Laravel Debugbar や Telescope は便利ですが、 本番では危険になる場合があります。
composer remove barryvdh/laravel-debugbar
最低でも、
本番では APP_DEBUG=false を徹底しましょう。
実務で使われるLaravelデプロイ手順
最後に、 現場でもよく使われるデプロイフローを紹介します。
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan queue:restart
この流れをCI/CDへ組み込むことで、 かなり安全なLaravel本番運用になります。
Laravel本番環境でよくある事故パターン
| 事故 | 原因 |
|---|---|
| DB情報漏洩 | APP_DEBUG=true |
| 設定反映されない | config:cache |
| 画面真っ白 | キャッシュ不整合 |
| .env流出 | public配下配置 |
まとめ|Laravel本番運用は「安全設計」が最優先
Laravelは非常に強力なフレームワークですが、 本番運用では「便利さ」より 「安全性」と「再現性」が重要になります。
特に以下は毎回チェックしましょう。
- APP_DEBUG=false
- .envをGit管理しない
- public以外公開しない
- config:cache実行
- storage権限設定
- HTTPS強制
旅をすると、 Wi-Fi環境もサーバ環境も毎回違います。 だからこそ、 「どこでも安全に動く構成」を作れるエンジニアは強いです。
Laravel本番環境の設定は、 地味ですが確実に実力が出る領域。 ひとつずつ積み上げていきましょう。







0 件のコメント:
コメントを投稿