Laravelデプロイチェックリスト

個人的に使用しているLaravelをデプロイする時のチェックリストです。

Laravel7.30.6を使うことが多いので、別バージョンを使っている場合はこの通りにはならないかもしれませんが、ご了承ください。

以下はそれぞれの詳細です。

logging.phpでログ出力時のパーミッションを0664に設定しているか

ログ出力時のパーミッションは0644に設定する。
デフォルトだと0644になるので所有者しか書き込めず権限エラーになるので、、

config/logging.php

'daily' => [
    'driver' => 'daily',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
    'days' => 14,
    // ここを追加
    'permission' => 0664, 
],

またstorage周りの権限も合わせて設定します。

// laravelグループの作成
$ groupadd laravel

// ユーザーの追加
$ gpasswd -a hogeuser laravel
$ gpasswd -a apache laravel

// storage周りのパーミッション設定
$ find ./ -type d -exec chmod 755 {} \;
$ find ./ -type f -exec chmod 644 {} \;

// 所有グループの変更
$ chown -R :laravel ./storage
$ chown -R :laravel ./bootstrap/cache

// 権限グループをグループに変更
$ chmod 2755 storage

ウェブとバッチのログを別で分けているか

ウェブとバッチのログが同じだと分かりづらいので分けます。

config/logging.php

'daily' => [
    'driver' => 'daily',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
    'days' => 14,
    'permission' => 0664, 
],
// dailyをコピーして作る
'batch' => [
    'driver' => 'daily',
    'path' => storage_path('logs/batch.log'),
    'level' => 'debug',
    'days' => 14,
    'permission' => 0664, 
],

app/Console/Commands/HogeCommand.php

use Log;

class HogeCommand extends Command
{
    ・・・
    public function __construct()
    {
        parent::__construct();
        // ログ出力方式をバッチにする
        Log::setDefaultDriver('batch');
    }
    ・・・
}

メールの文字化け対策を実施しているかどうか

デフォルトのままだとメールクライアントによっては日本語が文字化けするようなので、iso-2022-jp形式で送信できるようにします。

app/Providers/AppServiceProvider.php

    ・・・
public function register()
{
    // メールをiso-2022-jpに
    Swift::init(function () {
        Swift_DependencyContainer::getInstance()
            ->register('mime.qpheaderencoder')
            ->asAliasOf('mime.base64headerencoder');
        Swift_Preferences::getInstance()->setCharset('iso-2022-jp');
    });
}
    ・・・

ただこのコードはLaravel9からはメーラーがSwift Mailer ではなくSymfony Mailerに変更になったので使えないようなので注意が必要です。

キューワーカーを正常に動かすことができているか

supervisor等を使っているならインフラの確認。

使っていないならcronで動かすことになると思うので、下記コマンドがちゃんとKernel.phpに記載されているか確認する

app/Console/Kernel.php

・・・
protected function schedule(Schedule $schedule)
{
    ・・・
    //1分間隔でキューワーカーを起動。
    $schedule->command('queue:work --tries=1 --stop-when-empty')
        ->everyMinute()
        ->withoutOverlapping();
}
・・・

エラーページ(404など)は自前で実装されているか

デフォルトのエラーページだとユーザーが困ってしまうので、ちゃんと自前でエラーページを実装します。

エラーページは下記コマンドでbladeファイルが一発で作成されるので、下記コマンドをプロジェクトルートで実行した後にぽちぽち編集します。

$ php artisan vendor:publish --tag=laravel-errors

よく出るので、404,419,500エラーくらいは少なくとも実装したいところな気がします。

おわり

随時追加していきます!