# VPS から Xserver へ Laravel を移行する(シンボリックリンクでソース隠蔽)

VPS で運用していた Laravel を Xserver レンタルサーバーに移行する際、public_html 直下にプロジェクトを置くと .envvendor/ が Web から参照されるリスクがある。本体はホーム直下の非公開エリアに置き、公開用には public だけをシンボリックリンクで見せる構成にすると、Xserver を安全にフル活用できる。

関連: レンタルサーバーなら xserver おすすめ理由 / xserver の PHP バージョンと SSH / Laravel 初期設定

# 前提

# 理想の「隠蔽型」ディレクトリ構造

完成形は次のイメージ。本体は公開エリア外に置き、公開されるのは public の中身だけにする。

/home/ユーザー名/
├── プロジェクト名/                    ← 本体(非公開)
│   ├── app/
│   ├── bootstrap/
│   ├── config/
│   ├── vendor/
│   ├── .env
│   └── public/                        ← 本当の document root
│       ├── index.php
│       ├── .htaccess
│       └── ...
│
└── メインドメイン/
    └── public_html/
        └── サブドメイン名/
            └── public_html             ← シンボリックリンク(実体は プロジェクト名/public)

例: メインが example.com で API を api.example.com にする場合

/home/ユーザー名/
├── api.example.com/          # プロジェクト本体
│   ├── app/
│   ├── vendor/
│   ├── .env
│   └── public/
└── example.com/
    └── public_html/
        └── api.example.com/
            └── public_html   # → /home/ユーザー名/api.example.com/public へのシンボリックリンク

# 移行手順(3 ステップ)

# Step 1: プロジェクト本体をホーム直下に配置

VPS から持ってくる方法は主に次のどちらか。

A. Git でクローン(推奨)

cd /home/ユーザー名/
git clone [リポジトリURL] プロジェクト名
cd プロジェクト名

B. ファイルをアップロードする場合

SFTP や rsync で /home/ユーザー名/プロジェクト名/ に Laravel 一式を配置する。このとき public_html の下には置かない

配置後、依存関係と .env を用意する。

cd /home/ユーザー名/プロジェクト名
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
# .env の DB_* 等を Xserver の環境に合わせて編集

Xserver の PHP が古い場合

SSH で使う PHP を 任意バージョンに切り替える必要がある。composer / php artisan はその PHP で実行される。

# Step 2: サブドメイン用の「実体フォルダ」を削除

Xserver でサブドメインを追加すると、public_html/サブドメイン名/public_html という実体ディレクトリが自動作成される。シンボリックリンクに差し替えるため、この public_html フォルダを削除する。

# パスを間違えないよう確認してから実行
rm -rf /home/ユーザー名/メインドメイン/public_html/サブドメイン名/public_html

例:

rm -rf /home/ユーザー名/example.com/public_html/api.example.com/public_html

# Step 3: public へのシンボリックリンクを作成

本体の public を、サブドメインの document root(public_html/サブドメイン名/public_html)に紐付ける。

ln -s /home/ユーザー名/プロジェクト名/public /home/ユーザー名/メインドメイン/public_html/サブドメイン名/public_html

例:

ln -s /home/ユーザー名/api.example.com/public /home/ユーザー名/example.com/public_html/api.example.com/public_html

これで https://api.example.com/ へのアクセスは、実体として /home/ユーザー名/api.example.com/public が読まれる。.envvendor/ は URL から辿れない。

# .htaccess の確認(403 / ルーティング不具合時)

シンボリックリンク先を Apache が正しく扱うため、FollowSymLinks が必要。Laravel の public/.htaccess に以下があるか確認し、なければ先頭付近に追加する。

# シンボリックリンクの参照を許可
Options +FollowSymLinks

# 既存の Laravel ルーティング
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

403 Forbidden や 404 が続く場合は、サーバー設定で AllowOverride が有効かも確認する(Xserver は多くのプランで有効)。

# 移行後のよくある作業

  • ストレージのシンボリックリンク: php artisan storage:link を実行し、public/storagestorage/app/public を張る。
  • キャッシュ: php artisan config:cache / route:cache / view:cache で本番用にキャッシュ。
  • 権限: storage/bootstrap/cache/ が Web サーバーから書けるか確認。

# この構成のメリット

ポイント 説明
セキュリティ .envvendor/ は document root 外のため、ブラウザから直接アクセスされない。
Git 運用 本体ディレクトリで git pull すれば公開側もすぐ反映。public_html を汚さない。
管理のしやすさ 公開されるのは「入り口」のシンボリックリンクだけなので、ドメインごとの役割が分かりやすい。

# まとめ

  1. プロジェクト本体を /home/ユーザー名/ 直下に配置(public_html の外)。
  2. サブドメイン用に自動作成された public_html/サブドメイン名/public_html を削除
  3. public へのシンボリックリンクpublic_html/サブドメイン名/public_html として作成。
  4. 必要なら public/.htaccessOptions +FollowSymLinks を付与。

これで VPS から Xserver へ、ソースを隠したまま Laravel を安全に移行できる。

2026-03-04

同じタグを持つ記事をピックアップしました。