Laravelで本番環境にデプロイしつつ開発を進めていく方法

# Laravelのプロジェクトを作成
```
composer create-project laravel/laravel プロジェクト名
```
作ったディレクトリに移って、Laravel Breezeのインストール。
```
composer require laravel/breeze --dev
php artisan breeze:install
```
以下を尋ねられるので、bladeを選ぶ（お好み）。
```
  Which stack would you like to install?
  blade .......................................................................................................................................... 0  
  react .......................................................................................................................................... 1  
  vue ............................................................................................................................................ 2  
  api ............................................................................................................................................ 3  
```
ダークモードのサポートもお好みで。
```
  Would you like to install dark mode support? (yes/no) [no]
```
テスト環境もお好みで。
```
  Would you prefer Pest tests instead of PHPUnit? (yes/no) [no]
```
.envファイルを設定。
```.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=root
DB_PASSWORD=パスワード
```
migrateする。
```
php artisan migrate
```

# DaisyUIのインストール（お好みで）
```
npm i daisyui
```
tailwind.config.jsのpluginsの行を以下のように書き換える。
```tailwind.config.js
    plugins: [require('@tailwindcss/forms'), require("daisyui")],
```
これでDaisyUIのインストールは完了。welcome.blade.phpでDaisyUIを使えるようにするには
```PHP:welcome.blade.php
        <!-- Scripts -->
        @vite(['resources/css/app.css', 'resources/js/app.js'])
```
をheadタグ内に追加。

# ローカルで実行
ターミナルの一つで
```
php artisan serve
```
とする。また別のターミナルを開き、プロジェクトのディレクトリで
```
npm run dev
```
とする。http://127.0.0.1:8000/ にアクセスすると、以下のページが標示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730126/6f66aecd-87f9-d2bc-bd1d-36663eb61475.png)
右上にLoginとRegisterが出ていることを確認。RegisterしてLoginできるかも確認。

# Githubで管理

Githubで新しいリポジトリを作成する。公開鍵・秘密鍵の設定は割愛。
```
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:アカウント名/リポジトリ名.git
git push -u origin main
```
Githubにpushされていることを確認。

# virtualhostの設定
さくらのVPSでCentOSを使う想定で、さくらのドメインコントロールパネルに行き、このLaravelが動くサブドメインを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730126/1a6977a5-2efd-a2db-7f7a-f3352bd942b5.png)
2行目はメールサーバを立てるときに、Gmailに届かないことがあるので付けたレコード（[Gmailへのメール送信がエラーになって返ってくる現象でお困りのお客様へ](https://help.sakura.ad.jp/notification/n-2595/)）。メールサーバを立てる予定がないのなら書かなくていい。

このドメインをvirtualhostに記載する。
```
cd /etc/httpd/conf.d/
```
このディレクトリの中の、virtualhost.confに
```virtualhost.conf
<VirtualHost *:80>
        DocumentRoot /var/www/プロジェクト名/public
        ServerName サブドメイン名.ドメイン名
        <Directory "/var/www/プロジェクト名">
                Options All
                AllowOverride All
                Require all granted
        </Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =サブドメイン名.ドメイン名
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
```
を追加。

SSL対応するため、Let's encryptを設定する。詳しい設定方法は[はじめてのVPS 初期セットアップ⑥ ~SSLの設定~
](https://laraweb.net/environment/8362/)などを参照のこと。
コマンドラインから
```
certbot --apache -d サブドメイン名.ドメイン名
```
とすると、/etc/httpd/conf.d/virtualhost-le-ssl.confが作成される。
Apacheの再起動。
```
systemctl restart httpd
```
証明書の期限が切れる場合は[はじめてのVPS 追記 ~ SSL（Let's Encrypt）の更新エラー ~
](https://laraweb.net/environment/8938/)を参照。

# 本番環境にデプロイ
本番サーバにログインして、/var/wwwなどに移動してからリポジトリをクローンする。
```
cd /var/www/html
git clone git@github.com:アカウント名/リポジトリ名.git
```
composerやNode.jsのパッケージをインストール。
```
composer install
npm install
```
.envファイルを作成。
```
cp .env.example .env
```
APP_KEYを更新。
```
php artisan key:generate
```
.envファイルを変更。
```.env（変更箇所のみ）
APP_NAME=APPの名前に変更
APP_ENV=production
APP_DEBUG=false
APP_URL=本番サーバのURL

DB_DATABASE=データベース名
DB_USERNAME=DBのユーザ名
DB_PASSWORD=パスワード
```
migrateする。
```
php artisan migrate
```
本番環境やけどええんか？と聞いてくるが、迷うことなくyesとする。

これで晴れてURLにアクセスすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730126/57137cd9-7223-560b-cf9f-d2132b657066.png)
となる。なんでか調べるために、/var/log/httpd/error_logを見ると
PHP Fatal error:  Uncaught ErrorException: file_put_contents(/var/www//storage/framework/views/6a3544652d045b8452130d69fdcbd731f05d6d37.php)
: Failed to open stream: Permission denied in /var/www/***/vendor/larav
el/framework/src/Illuminate/Filesystem/Filesystem.php:190
というエラーが出る。storageのパーミッションに問題があるようなので、
```
chmod -R 777 storage/
```
とした。しかし今度はServer Error。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/730126/afc94303-3150-b35a-21d6-9aac169c142d.png)
storage/logs/laravel.logを見ると
Vite manifest not found at: /
var/www/radiology-db/public/build/manifest.json at /var/www//vendor/
laravel/framework/src/Illuminate/Foundation/Vite.php:684)

ぐぐったら、vite manifestがbuildされていないので、
```
npm run build
```
とすればよい。git pullしたときとかも、常にnpm run buildを1回走らせた方が良さそう。