【Laravel】エックスサーバー(メインドメイン)でデプロイ手順

# 前提
・この手順は、XserverのメインドメインへLaravelアプリを公開する場合を基本

# 0. 準備

https://www.udemy.com/course/laravelxserver/

上記の講座の以下内容を済ませておく。

| セッション2 | セッション3 | セッション4 |
|:-----------|:------------|:-------------|
| SSHによるサーバーへの接続 | アプリ実行中に利用されるPHPの設定 | Gitの設定 |
|  | コンソール上で利用されるPHPの設定 | composerのバージョンアップ |
|  | データベース(MySQL)の作成 |  |


# 1. SSHによるサーバーへの接続(SSH接続)
「XXX.key」ファイルがある階層で行う
```
pwd
→ /Users/(ユーザー名)/Laravel/Xserver
```
→ Xserverの後に「/XXX.key」がある状態
![スクリーンショット 2025-04-15 15.39.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/77ca9b9c-6c61-459c-93c7-a415d5f4ae3d.png)

↓

```
ssh -i XXX.key (サーバーID)@(サーバー情報).xserver.jp -p 10022
↓
自身で設定した(パスフレーズ)を入力
```


# 2. Xserverを初期化(1回目に色々設定をいじり、メインドメインへのデプロイ2回目以降の場合)
エックスサーバーのサーバーパネル「ログイン」→「ドメイン設定」で行う。
まずは「初期化」をクリック
![スクリーンショット 2025-04-15 15.49.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/1317f456-6638-4d09-899e-f5fb5ded8405.png)

↓

「ドメイン設定の初期化」をクリック → 「確認画面へ進む」をクリック → 「実行する」
![スクリーンショット 2025-04-15 15.52.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/d50ee7cd-f9fd-4b83-a2a9-09db686d3607.png)


# 3. Git clone
```ssh
# 階層移動
cd /home/(ユーザー名)/(メインドメイン)

# clone(githubの画像のようにコピーしたのをペーストすればOK)
git clone git@XXX
```
![スクリーンショット 2025-04-15 15.57.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/9a97603f-73db-4c42-8312-34bb0acc9e99.png)


# 4. public/index.php, .htaccess をルートへコピー
Laravelアプリをサーバーのルートドメイン（https://example.com）で直接アクセスできるようにするための作業
```
cd /home/akkun1114/akkun1114.com/

cp collections/public/index.php public_html/
cp collections/public/.htaccess public_html/
```
Laravelとしては
/collections/public/index.php にアクセスしてほしいけど、
サーバーとしては
/public_html/index.php にしかアクセスできない。
だから、
cp collections/public/index.php public_html/でLaravelをここから起動させる。
そして、
cp collections/public/.htaccess public_html/でURLをいい感じに制御する。


# 5. index.php を修正
```
cd /home/akkun1114/akkun1114.com/public_html

# index.phpがあるか確認
ll -a

vi index.php
```
↓
```
# 編集モード
i

↓

# 編集前
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
# 編集後
require '/home/akkun1114/akkun1114.com/collections/vendor/autoload.php';
$app = require_once '/home/akkun1114/akkun1114.com/collections/bootstrap/app.php';

↓

# 保存、終了
esc
:wq
```


# 6. envの設定
https://www.udemy.com/course/laravelxserver/

セッション4：Laravelの導入：3:10~の箇所(コピーから)


# 7. Composer install
```
cd /home/akkun1114/akkun1114.com/collections
# 本番用
composer install --no-dev --optimize-autoloader
```


# 8. Laravelコマンド実行
```
php artisan key:generate
php artisan storage:link

# 画像圧縮の場合
composer require intervention/image
```


# 9. npm 系コマンド
```
npm install
npm run build
```


# 10. データベース初期化
```
php artisan migrate:fresh --seed

# 2回目以降行う場合で画像を削除したい場合(以下URLを参照)
php artisan storage:clear-collection-images
php artisan migrate:fresh --seed
```
https://qiita.com/honaki/items/3418c1bcac437fe846c4


# 11. Vite build ファイルをルートへコピー
Laravel + Vite でビルドされたアセットファイル（CSS・JSなど）をサーバーの公開領域に配置するための操作
※ npm run build を実行した後に行う
```
cp -r public/build /home/akkun1114/akkun1114.com/public_html/
```


# 12. storage シンボリックリンク作成
Laravelで保存した画像などのファイルをWebブラウザからアクセス可能にするための操作
```
cd /home/akkun1114/akkun1114.com/public_html
ln -s /home/akkun1114/akkun1114.com/collections/storage/app/public storage
# ↑ この操作は、↓ リンク(=ショートカット)を作成する
# /home/akkun1114/akkun1114.com/public_html/storage → /home/akkun1114/akkun1114.com/collections/storage/app/public
```


# 13. index.html の削除
```
cd /home/akkun1114/akkun1114.com/public_html

rm index.html
# あとで使う場合は、名前を変更
# mv index.html index.html.bak
```


# 参考：ディレクトリ構成

![スクリーンショット 2025-04-16 10.17.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726068/95b00e23-01ba-4247-9549-99154856cb9b.png)