システムオペレータの週末

運用おつ。開発しようよ!

laravel5のインストールで、ファイルパーミッションエラー

半年以上ぶりの更新が、さっきまで5時間くらいハマった内容です。

今後、ハマらないようにメモ。
やったこともないPHPでいきなりlaravelなんていうフレームワークのしかも最新版だったから情報がなかった。

経緯

ハマるまでの流れは、laravel5のドキュメントに沿って laravelのインストールを進めていたところだった。

// composerでlaravel5をインストール
$ composer global require "laravel/installer=~1.1"

// laravelプロジェクトを展開するディレクトリへ移動
$ cd /var/www

// wwwディレクトリ下にlaravelというプロジェクトを作成する。
$ laravel new laravel

最後に、apacheのルートディレクトリを変更し、.htaccessを有効にする。

$ sudo vi /etc/httpd/conf/httpd.conf

// ドキュメントルートを/var/www/laravel/publicへ変更
DocumentRoot "/var/www/laravel/public"

// Directoryも同じように変更
// AllowOverride All でhtaccessを有効化。
<Directory "/var/www/laravel/public">
    AllowOverride All
    Require all granted
</Directory>

ここまでは問題なくいった。

HTTP 500 - 内部サーバー エラー

ドキュメントの指示に従い、storagebootstrap/cacheディレクトリ配下をすべてパーミッションを読書き可能に変更。 ユーザはhttpdのユーザを指定。今回はapache

// laravelディレクトリ下の所有者・所有グループをapacheに変更。
$ sudo chown -R apache:apache /var/www/laravel

// storageディレクトリのパーミッションを775へ変更。
$ sudo chmod -R 775 /var/www/laravel/storage

// bootstrap/cacheディレクトリのパーミッションを775へ変更。
$ sudo chmod -R 775 /var/www/laravel/bootstrap/cache

とりあえずここまできたらブラウザから稼働確認できそうだったので、http://localhost:80で確認。

HTTP 500 - 内部サーバー エラー

なんでだ!

パーミッションを777にしてみたり、所有ユーザ変えてみたり、apacheの設定変えてみたりいろいろしてみたけど、駄目だった。。。。

apache エラーログ

ここまで3時間ほど経ったと思う。

神にすがる思いでapacheのエラーログに何か吐いてないか確認。

~
PHP Fatal error:
 Uncaught exception 'UnexpectedValueException' with message
 'The stream or file "/var/www/laravel/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied'

/var/www/laravel/storage/logs/laravel.logが書き込めません。パーミッションがありまあせん。みたいなエラー吐いてた。

パーミッション設定してるよ。。。。。

~~

で、いろいろ調べた結果、ここのコマンド実行したらイケた。

Laravel5 gives Blank Page with 500 status code on Apache fedora22

chcon -R -t httpd_sys_rw_content_t /var/www/laravel/storage
chcon -R -t httpd_sys_rw_content_t /var/www/laravel/bootstrap/cache

何してるかって、selinuxのファイルコンテキストを書き換えてるんですね。httpd_sys_rw_content_tに。

ファイルコンテキストには目つけたけど、httpd_sys_rw_content_tじゃないとだめっていうのにたどり着くまで何時間もかかってしまった。。

しんどい。。。

chconは一時的にファイルコンテキストを変更するコマンドなので、恒久的に変更する場合はsemessageコマンドとか使ったほうがいいかもね。

もし同じところで躓いている人いれば、助けになればと思います。。。。

以上!