質問: ``` file_put_contents(/vagrant/application/storage/framework/views/252f45d4c3a4aff1aa75fadba76c0266613e3b56.php): failed to open stream: Permission denied ``` 現在、Laravel5.4をVagrant上で立ち上げたApacheサーバー上で動作させようとしています。 最初は、/var/www/html以下で無事立ち上げることができたのですが、開発環境としては適切ではないので共有フォルダにDocumentRootを設定して、再度権限を設定したのですが、上記のようなエラーが発生してしまい、表示ができません。 どなたか解決方法をご存知の方はいらっしゃいませんでしょうか? よろしくお願い致します。
回答: Vagrant+VirtualBoxであれば、共有フォルダーマウント時にオーナーやパーミッションが決まるはずです。LaravelはPHPなので、Apacheのモジュールとして動作させているのであればApacheのオーナーに依存します。共有フォルダーのオーナーやパーミッションは`chown`や`chmod`コマンドでは変更できません。 例えば下記のような環境の場合、 * 共有フォルダーオーナー:root * Apacheのオーナー:apache 共有フォルダーではApacheからの書き込みは**その他(other)**扱いということになります。下記のように確認してみてください。 ``` ls -alF 書き込みを行いたい共有フォルダーのパス ``` 下記のようにディレクトリのパーミッションが`755`で、オーナーが`root`の場合は、Apacheからは書き込みできません。このような場合は、共有フォルダーのマウント時の設定をきちんと行わなければなりません。 ``` drwxr-xr-x n root root 書き込みを行いたい共有フォルダーディレクトリ ``` まず、**VBoxGuestAdditions**を下記から使用しているバージョンに合わせてダウンロードしてVagrant内Linuxに移動しておきます(wgetやcurlなどでコマンドラインからダウンロードしても同じです)。 そして、下記のように**VBoxGuestAdditions**インストールしておきます。 ``` sudo yum -y install kernel-devel kernel-headers gcc gcc-c++ sudo mkdir -p /media/VBoxGuestAdditions sudo mount -o loop,ro /ダウンロードパス/VBoxGuestAdditions_バージョン.iso /media/VBoxGuestAdditions sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run #上記完了したら sudo umount /media/VBoxGuestAdditions sudo rm -rf /media/VBoxGuestAdditions ``` 手動マウントするので**VBoxGuestAdditions**デーモン(サービス)は停止しておきます。 ``` sudo service vboxadd stop sudo service vboxadd-service stop sudo service vboxadd-x11 stop sudo chkconfig vboxadd off sudo chkconfig vboxadd-service off sudo chkconfig vboxadd-x11 off ``` 下記はCentOS6での設定例です。 Apacheオーナーは**48**で、Vagrantグループは**500**でApacheとVagrantユーザー両方から書き込みができるようにしています。下記の設定を`bootstrap.sh`などの起動用スクリプトに書いておきます。 ``` mount -t vboxsf -o defaults,uid=48,gid=500,dmode=777,fmode=777 "VirtualBox側に設定した共有フォルダー名" Vagrant内のマウントフルパス ``` ユーザーのオーナーIDやグループIDを調べるには下記のようにします。 ``` #オーナーID id -u ユーザー名 #グループID id -g ユーザー名 ``` Laravelだけで、nodeを使わない場合は、パーミッションを777にする必要はないのですが、いろいろ面倒なのでこう設定しておきます。