Laravelエラー対応:storageディレクトリの「Permission denied」

Laravel

エラー内容

Laravelをインストールし、ブラウザでアクセスしようとすると、以下のようなエラーが発生しました。

The stream or file "~/laravel/storage/logs/laravel.log" could not be opened in append mode: failed to open stream: Permission denied

※「〜」の部分は/からのディレクトリパスが入ります。

原因はstorageディレクトリに書き込もうとしたユーザに書き込み権限がなかっためでした。

本エラーが発生したLaravelは、Docker上で環境構築していました。
LaravelをインストールするcomposerコマンドはDockerコンテナ内のrootユーザで実行されるため、Webサーバのユーザ(今回はwww-data)が書き込むことができない、という状況でした。

対応方法

1.rootユーザ以外にも書き込み権限を付与する
2.書き込むユーザを所有者にする
のいずれかの方法が考えられます。

1の場合は、下記コマンドでパーミッション変更できます。

# chmod 777 ./storage

2の場合は、下記コマンドで所有者変更で対応できます。

# chown www-data:www-data ./storage/ -R

※今回は所有者をwww-dataにしていますが、自分の環境に合わせてユーザ名は変更してください。