個人的に使用しているLaravelをデプロイする時のチェックリストです。
Laravel7.30.6を使うことが多いので、別バージョンを使っている場合はこの通りにはならないかもしれませんが、ご了承ください。
- .envのAPP_ENV、APP_DEBUG等に間違いがないか
- cronでスケジューラーを定期実行できているか
- logをdailyにしているか
- logging.phpでログ出力時のパーミッションを0664に設定しているか
- ウェブとバッチのログを別で分けているか
- キューワーカーを正常に動かすことができているか
- マルチ認証の場合、認証ユーザーごとに正しくリダイレクト先を指定できているか
- メールは正常に動作しているか
- storageにシンボリックリンクが貼られているのか
- エラーページ(404など)は自前で実装されているか
- メールの文字化け対策を実施しているかどうか
以下はそれぞれの詳細です。
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エラーくらいは少なくとも実装したいところな気がします。
おわり
随時追加していきます!