我一直在使用
http://www.puphpet.com成功地为一些项目生成流氓木偶环境.那么这个星期,我得到了使用Laravel 4编写一个项目的原型.由于我不会是全职工程的人,所以我认为最好是为下一个做一个VM环境人可以克隆回购.没有太多的经验与Laravel 4我有一切运行在开发环境就好了.然后我尝试运行第一次迁移,这里的问题从应用程序/存储文件权限开始.
应用/存储必须由Web用户写入
很好,从同步的文件夹配置中取出id:vagrant,并设置所有者&组织到www数据如此:
config.vm.synced_folder "./www","/var/www",owner: "www-data",group: "www-data"
2.工匠只能从流氓箱内运行,才能访问数据库
罚款,流氓ssh,并从www文件夹运行工匠.
app / storage& app /数据库必须由vagrant用户写入才能使用迁移
Grrr,好的,将以下可怕的代码添加到流氓文件中(注意,尝试在Puppet中首先执行此操作,但没有使用):
config.vm.provision :shell,:inline => "usermod -a -G www-data vagrant"
app / storage&应用程序/数据库不能由组写入
哎呀!好的,我们来试试这个Puppet指令:
file { "/var/www/app/storage": source => "/var/www/app/storage/",mode => 0775,ensure => 'directory',owner => 'www-data',group => 'www-data',recurse => true }
不,不行.试图用Puppet exec {}指令做同样的事情,没有任何效果.似乎vagrant同步文件夹的权限由主机而不是guest虚拟机设置.
最后结束手动更改主机中文件夹的权限.有没有更简单的方法呢?我真的希望能够给下一个dev一个无忧的环境,他们可以从repo克隆,没有他们重新设置克隆后的一切.
UPDATE
我们已经知道,如果我们更改Apache运行用户,vagrant不会在重新加载时覆盖它.所以我们已经手动完成了,它比改变已同步的文件夹的权限更好,所有者.现在我们只是想了解如何在Puppet中手动进行更改.
解决方法
在Twitter上进行了一些讨论后,找出以下几点:
VirtualBox on vagrant有一个约束,不允许您从guest虚拟机操作系统内部设置已同步文件夹的权限. See this issue on github.
您可以从流氓文件中使用以下代码set the synced folder permissions:
config.vm.synced_folder ".","/vagrant",:mount_options => ["dmode=777","fmode=666"]
或者你可以change the Apache runtime user从这样的木偶清单流氓:
exec { "change_httpd_user": command => "sed -i 's/www-data/vagrant/g' /etc/apache2/envvars",onlyif => "/bin/grep -q 'www-data' '/etc/apache2/envvars'",notify => Service['apache2'],require => Package['apache2'],} file { "/var/lock/apache2": ensure => "directory",owner => "vagrant",group => "vagrant",require => Exec['change_httpd_user'],}
或以上任何组合