Laravelをエックスサーバーにデプロイする方法|共用サーバーで公開する手順を初心者向けにやさしく解説
はじめに
「個人開発で作ったLaravelアプリを、ついに公開したい」
「でもAWSやVPSは難しそう……使い慣れたエックスサーバーにそのまま載せられないの?」
「やってみたら画面が真っ白/500エラーになって、原因がわからない」
こんな壁にぶつかっている人は多いのではないでしょうか。
エックスサーバーは月額1,000円前後で使える共用レンタルサーバーで、WordPressなら数クリックで公開できます。ところがLaravelのようなPHPフレームワークになると、共用サーバーならではの制約があり、「いつものデプロイ手順」がそのままでは通用しません。デプロイというのは、開発したプロジェクトをサーバーに公開することです。
この記事では、Laravelをエックスサーバーに公開する手順を、初めての人でも迷わないように順番に解説します。「なぜその作業が必要なのか」までセットで説明するので、コマンドをただ写すのではなく、仕組みを理解しながら進められます。読み終えるころには、自分のアプリを安全に本番公開できるようになっているはずです。
なぜ「普通のデプロイ」と違うのか
まず、つまずきの原因になる共用サーバーならではの制約を押さえておきましょう。ここを理解しておくと、後の手順がすっと腹落ちします。
- サーバー上で
git pullやcomposerを自由に使いにくく、npm(フロントのビルド)は基本的に使えない queue:workのような常駐プロセス(ずっと動き続けるプログラム)を立てられない- Laravel本体を「公開フォルダの外」に置く必要がある(
.envやソースコードをインターネットに晒さないため)
この制約があるため、本記事では 「手元(ローカル)でビルドして、できあがったものをサーバーへ送り込む」 という方式をとります。具体的には rsync(ファイルを差分だけ効率よく転送するコマンド)を使ってアップロードします。
💡 ざっくり全体像:① 手元でフロントをビルド → ② rsync で本体と公開ファイルをサーバーへ転送 → ③ サーバーにSSHでログインして、DB反映やキャッシュ生成などの仕上げ、という3ステップです。
ステップ0:ディレクトリ構成を決める(最重要)
つまずきの大半は、この「どこに何を置くか」で決まります。最初にここをしっかり理解しておきましょう。
ポイントはひとつだけ。インターネットに見せていいのは public/ の中身だけ。Laravel本体(.env やソースコード)は、Web公開フォルダの外側に置きます。こうしないと、設定ファイルやパスワードが外部から見えてしまう危険があるからです。
~/laravel/<ドメイン>/ ← Laravel本体(非公開エリア)
app/ routes/ vendor/ .env ...
public/build/ ← ビルド済みのCSS/JS
~/<ドメイン>/public_html/<ドメイン>/ ← Web公開ルート(docroot)
index.php ← 本体を絶対パスで読むよう書き換える
build → 本体の public/build へのシンボリックリンク
storage → 本体の storage/app/public へのシンボリックリンク「シンボリックリンク」とは、別の場所にあるフォルダへの“ショートカット”のことです。公開フォルダ側には実体を置かず、本体側のフォルダを指し示すだけにすることで、二重管理を防ぎます。
そして公開フォルダの index.php は、Laravel本体の絶対パス(例:/home/xxxxx/laravel/<ドメイン>)を読みにいくよう書き換えます。標準の index.php は「ひとつ上の階層に本体がある」前提なので、配置が変わるここを直す必要があります。
ステップ1:サーバー側の事前準備(最初に一度だけ)
エックスサーバーのサーバーパネルで、次の4つを準備します。一度やればOKの初期設定です。
- SSHを有効化し、公開鍵を登録する
接続コマンドはssh -p 10022 アカウント@サーバー.xsrv.jp(ポート番号10022がエックスサーバーの特徴です) - MySQLデータベースを作成する
DB・ユーザー・権限を作り、DB名/ユーザー名/パスワード/ホスト名を控えておきます(後で.envに書きます) - ドメインを追加し、無料独自SSLを有効化する(HTTPSで公開するため)
- PHPバージョンをアプリの要件に合わせる(例:Laravel 11なら PHP 8.3 など)
【エックスサーバーのアフィリエイトリンクをここに貼る】
※「これからエックスサーバーを契約する人はこちら」の導線として設置
エックスサーバーがどんなサーバーで何が得意なのかをまず知りたい人は、エックスサーバーっていいの?初心者向けに徹底解説! もあわせてどうぞ。
ステップ2:初回デプロイ
ここからが本番です。「手元での作業」→「サーバーでの仕上げ」の順に進めます。
① 手元(ローカル)での作業
まず、フロント(CSS/JavaScript)をビルドします。サーバーにnpmが無いので、完成品をこちらで作ってから送るのがポイントです。
npm run build次に、Laravel本体を rsync でサーバーへ転送します。環境に依存するファイルや不要なファイルは必ず除外します(これを怠るのが、後述するトラブルの最大の原因です)。
rsync -az -e 'ssh -p 10022' \
--exclude .git \
--exclude node_modules \
--exclude tests \
--exclude .env --exclude '.env.*' \
--exclude 'bootstrap/cache/*' \
--exclude 'public/hot' \
--exclude 'storage/logs/*.log' \
src/ アカウント@サーバー:laravel/<ドメイン>/除外している主なものと、その理由はこちらです。
除外するもの | なぜ送ってはいけないか |
|---|---|
| 本番とローカルで中身が違う。上書きすると本番設定が壊れる |
| 開発環境のパッケージキャッシュが混入し、本番で500エラーの原因になる |
| Vite開発サーバーの“目印”ファイル。本番に送ると画面が真っ白になる |
| 本番に不要。転送が重くなるだけ |
最後に、公開してよい public/ の中身を、Web公開ルートへ転送します。
rsync -az --delete -e 'ssh -p 10022' --exclude 'hot' \
src/public/ アカウント@サーバー:<ドメイン>/public_html/<ドメイン>/② サーバー側での仕上げ(SSHでログインして実行)
SSHでサーバーに接続し、本体フォルダへ移動してから作業します。
cd ~/laravel/<ドメイン>
# .env を作成(APP_URL / DB_* / MAIL_* などを本番の値に設定)
php artisan key:generate # アプリ固有の暗号化キーを生成
php artisan migrate --force # データベースのテーブルを作成
php artisan db:seed --force # 初期データ(管理者・初期設定など)を投入 ※必要な場合のみ
php artisan storage:link # 画像などを表示するためのリンクを作成
# 本番用にキャッシュを生成して高速化
php artisan config:cache
php artisan route:cache
php artisan view:cacheここまで終えたら、ブラウザで https://<ドメイン> にアクセスして、アプリが表示されるか確認しましょう。--force は「本番環境で確認なしに実行する」ための指定です(本番では確認プロンプトが省略されるため必要になります)。
ステップ3:2回目以降のデプロイ
一度公開できれば、次回からはとてもシンプルです。基本は「ビルドして送る → DBとキャッシュを更新するだけ」です。
# 手元:ビルドして rsync(初回と同じ)
npm run build
rsync ... 本体
rsync ... public
# サーバー:DBとキャッシュだけ更新
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache例外は次の2つだけ覚えておけば十分です。
- composerの依存が変わったときだけ、サーバーで
composer install --no-dev --optimize-autoloaderを実行(--no-devで開発用パッケージを除外するのが重要) - 新しい環境変数が増えたときだけ、サーバーの
.envに追記
よくあるハマりどころと対処法
共用サーバーへのLaravelデプロイで遭遇しがちなトラブルを、症状ごとにまとめました。困ったらまずこの表を確認してください。
症状 | 原因 | 対処 |
|---|---|---|
画面が真っ白/HTMLが | ローカルの | サーバーで |
500:Target class [translator] does not exist など | 開発環境の | サーバーで |
500 Internal Server Error | パーミッション(権限)または |
|
No application encryption key |
| サーバーで |
CSS/JSが反映されない | ビルド済み資産またはシンボリックリンクの不備 |
|
画像が表示されない | storageへのリンク未作成 |
|
キュー(非同期処理)が動かない | 共用サーバーは常駐プロセスを立てられない |
|
本番公開前のセキュリティチェックリスト
公開前に、最低限ここだけは確認しておきましょう。
APP_DEBUG=false/APP_ENV=productionになっている- 決済を使う場合は本番キーに切り替えている(テスト用キーのままにしない)
- 独自SSL(HTTPS)が有効になっている
- Laravel本体・
.envが公開フォルダの外側にある storage/・bootstrap/cache/のパーミッションが775以下- OPcache(PHPの高速化機能)を有効化している
まとめ
Laravelをエックスサーバーにデプロイする流れを、あらためて振り返ります。
- 共用サーバーの制約を理解する:npmが使えない・常駐プロセス不可・本体は公開フォルダの外
- 方式は「ローカルでビルド → rsyncで送る」の一択
- ディレクトリ構成がすべての土台:公開するのは
public/だけ - 2回目以降はビルド+DB/キャッシュ更新だけでとてもシンプル
- トラブルの多くは「送ってはいけないファイルを送った」のが原因:
.env・bootstrap/cache・public/hotの除外を忘れない
最初の1回さえ乗り越えれば、あとは同じ手順の繰り返しです。共用サーバーでも、ポイントさえ押さえればLaravelアプリはしっかり動かせます。あなたの個人開発アプリを、ぜひ世界に公開してみてください。
関連記事
👉 エックスサーバーっていいの?初心者向けに徹底解説!
👉 個人開発・副業に最適なサーバー完全ガイド|共用・VPS・クラウドを目的別に徹底比較
👉 Laravel Sail入門|開発環境をシンプルに整える基本ステップ
👉 Laravel × Vue.js × Inertia.jsで構築するモダンWebアプリのすすめ
👉 Laravelプロジェクトでテストコードを書く重要性とは?