Vagrant+VirtualBoxであれば、共有フォルダーマウント時にオーナーやパーミッションが決まるはずです。LaravelはPHPなので、Apacheのモジュールとして動作させているのであればApacheのオーナーに依存します。共有フォルダーのオーナーやパーミッションはchown
やchmod
コマンドでは変更できません。
例えば下記のような環境の場合、
- 共有フォルダーオーナー:root
- Apacheのオーナー:apache
共有フォルダーではApacheからの書き込みは**その他(other)**扱いということになります。下記のように確認してみてください。
bash
1ls -alF 書き込みを行いたい共有フォルダーのパス
下記のようにディレクトリのパーミッションが755
で、オーナーがroot
の場合は、Apacheからは書き込みできません。このような場合は、共有フォルダーのマウント時の設定をきちんと行わなければなりません。
drwxr-xr-x n root root 書き込みを行いたい共有フォルダーディレクトリ
まず、VBoxGuestAdditionsを下記から使用しているバージョンに合わせてダウンロードしてVagrant内Linuxに移動しておきます(wgetやcurlなどでコマンドラインからダウンロードしても同じです)。
http://download.virtualbox.org/virtualbox/
そして、下記のようにVBoxGuestAdditionsインストールしておきます。
bash
1sudo yum -y install kernel-devel kernel-headers gcc gcc-c++
2sudo mkdir -p /media/VBoxGuestAdditions
3sudo mount -o loop,ro /ダウンロードパス/VBoxGuestAdditions_バージョン.iso /media/VBoxGuestAdditions
4sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run
5
6#上記完了したら
7sudo umount /media/VBoxGuestAdditions
8sudo rm -rf /media/VBoxGuestAdditions
手動マウントするのでVBoxGuestAdditionsデーモン(サービス)は停止しておきます。
bash
1sudo service vboxadd stop
2sudo service vboxadd-service stop
3sudo service vboxadd-x11 stop
4
5sudo chkconfig vboxadd off
6sudo chkconfig vboxadd-service off
7sudo chkconfig vboxadd-x11 off
下記はCentOS6での設定例です。
Apacheオーナーは48で、Vagrantグループは500でApacheとVagrantユーザー両方から書き込みができるようにしています。下記の設定をbootstrap.sh
などの起動用スクリプトに書いておきます。
bash
1mount -t vboxsf -o defaults,uid=48,gid=500,dmode=777,fmode=777 "VirtualBox側に設定した共有フォルダー名" Vagrant内のマウントフルパス
ユーザーのオーナーIDやグループIDを調べるには下記のようにします。
bash
1#オーナーID
2id -u ユーザー名
3
4#グループID
5id -g ユーザー名
Laravelだけで、nodeを使わない場合は、パーミッションを777にする必要はないのですが、いろいろ面倒なのでこう設定しておきます。