標題の通りです。非常に古風な悩みと言えばそうかもしれませんが……。
運用の関係でコンテナ環境にコンバートできず某和製VPSへ置くこととなった、Laravel 5世代サイトのサーバー移行案件が発生し、粛々と作業しているときのこと。
取り急ぎソースコードの移行・設定作業が一通り完了し、導通チェックを実施し始めたとき、Laravelの画面にて以下のエラーが発生しました。
The stream or file "storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied
このエラー自体は何度も見ているものなので、最初は「はいはい、storage/logs配下のパーミッション付ければいいんでしょ」くらいに思っていたのですが……。
いくらchmodを叩いても、chownを叩いてもエラーが収まらない。さてどうしたものか……。
ということで、ちょっと試行錯誤しましたという備忘録です。
環境
- CentOS 10
- Apache 2.4
- Laravel 5.6 on PHP 7.4
結論
SELinuxのせいでした。
余談ですが、「SELinux」という単語、片手で数えられない程度の年数ぶりに聞いた……。
AWSとサーバーレスに慣れると、インフラの知識は根こそぎ消えていきますね。シランケド。
試したこと
- 新しくユーザーを作成し、そこから該当のディレクトリのファイルをいじってみる
- これはうまくいった
- いっぽうで、
sudo -u apache
でファイル操作を試みるとPermission Deniedが出る - ということで、Apacheユーザー固有の事象と切り分け
- ↑の情報をもとに適当に30分くらいググってみると、以下解決方法に出会った
解決方法
↑
詳細はこちらを参照。
普通にSELinuxの設定をいじるか、思い切ってオフにするかどちらかです。
(今回のケースはそこそこな規模のproduction環境なので、仕方なく遠い記憶を引っ張り出しながらSELinuxの設定をいじりました……めんどくさかった……)
まとめ
CentOSをイチからいじったのは何年ぶりのことか。「運用」という二文字が重くのしかかる日々……。
古風なLAMP環境はかえってドキュメントが少なすぎて、そこそこ構築に困ります。