ホストがOSX,ゲストがCentOS7でやっています。
Vagrantの共有フォルダ(Synced Folders)はこれが無かったらVagrant使ってねーよってぐらい便利です。
Vagrantfile
に下記の感じで書くだけですし。
config.vm.synced_folder "/var/www/hogehoge", "/var/www/hogehoge", create:true
apacheの設定でEnableSendfile
をoffにしていないとファイルを更新しても反映されないので注意。apacheのhttpd.confにネットワーク越しにマウントしているときはoffにしてねと書いてあります。
さて、これで共有フォルダをapache経由で表示できる様になりましたが、上記設定だと共有ファイルのownerが全部vagrantになってしまいます。その為、apacheから共有フォルダに書き込めません。パーミッションを0777に変更しようとしても変更出来ません。そこでファイルに書き込めるように以下の設定をします。
config.vm.synced_folder "/var/www/hogehoge", "/var/www/hogehoge", create:true,owner:"apache",group:"apache"
こうすると、共有フォルダ内のownerが全てapacheになって書き込めるようになります。
さて、そうすると今度は別の問題が出てきてしまいました。バッチ処理でファイルを書き込むときにapacheユーザーでないと書き込めません。なので、結局nfsでつなぐことに。macだとnfsでつなぐのちょこっと設定するだけなので簡単です。
config.vm.synced_folder "/var/www/hogehoge", "/var/www/hogehoge", :nfs => true
こんな感じでファイルは全てuid 501になります。
cat /etc/exports
# VAGRANT-BEGIN: 501 c44222be-6460-4c1a-a320-b3423ef74144
"/private/var/www/hogehoge" 192.168.12.12 -alldirs -mapall=501:20
# VAGRANT-END: 501 c44222be-6460-4c1a-a320-b3423ef74144
これで色々OKだったのですが、PHPのセッションファイルがファイルを600で作るので作った後に書き込めないというw
最終手段でゲスト上のapacheユーザーのuidを/etc/passwd
を書き換えて501にしちゃいました。
パーミッションだけを変えるなんかいい方法あるんだろうか・・・。