Laravel 4对带有木偶的流浪者盒子的权限

Laravel 4对带有木偶的流浪者盒子的权限,laravel,laravel-4,file-permissions,vagrant,puppet,Laravel,Laravel 4,File Permissions,Vagrant,Puppet,我已经成功地使用它为许多项目生成了vagrant+puppet环境。本周,我接到了使用Laravel4为一个项目编写原型的任务。因为我不会是一个全职从事这个项目的人,所以我想最好为它创建一个虚拟机环境,让下一个人可以直接为repo克隆。由于没有太多使用Laravel4的经验,我在开发环境中运行的一切都很好。然后我尝试运行第一次迁移,这里的问题开始于app/storage文件权限 1。应用程序/存储必须可由web用户写入 很好,从同步文件夹设置中取出id:vagrant,并将所有者和组设置为www

我已经成功地使用它为许多项目生成了vagrant+puppet环境。本周,我接到了使用Laravel4为一个项目编写原型的任务。因为我不会是一个全职从事这个项目的人,所以我想最好为它创建一个虚拟机环境,让下一个人可以直接为repo克隆。由于没有太多使用Laravel4的经验,我在开发环境中运行的一切都很好。然后我尝试运行第一次迁移,这里的问题开始于
app/storage
文件权限

1。应用程序/存储必须可由web用户写入

很好,从同步文件夹设置中取出id:vagrant,并将所有者和组设置为www数据,如下所示:

 config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
2。Artisan只能从流浪者箱内部运行,才能访问DB

很好,
vagrant ssh
并从www文件夹运行artisan

3。为了使用迁移,流浪用户必须能够写入应用程序/存储和应用程序/数据库

Grrr,ok,向vagrant文件添加了以下糟糕的代码(注意,首先尝试在Puppet中执行此操作,但没有花费时间):

4。应用程序/存储和应用程序/数据库不可由组写入

啊!!!好的,让我们试试这个傀儡指令:

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 Synched文件夹的权限似乎是由主机设置的,而不是由来宾设置的

最后手动更改了主机中文件夹的权限。有没有更简单的方法?我真的希望能够给下一个开发人员一个无忧的环境,他们可以从repo克隆,而不是让他们在克隆后重新设置一切

更新


我们已经发现,如果我们更改Apache运行用户,vagrant不会在重新加载时覆盖它。因此,我们已经手动完成了这项工作,它比更改同步文件夹的权限和所有者效果更好。现在,我们只是想弄清楚如何在Puppet中手动进行更改。

在Twitter上进行了一些讨论后,我们得出了以下结论:

VirtualBox对vagrant有一个限制,不允许您从来宾操作系统内部设置同步文件夹的权限

您可以使用以下代码从vagrant文件中删除:

config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"]
或者你也可以像这样从木偶清单中流浪:

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'],
}

或者以上的任何组合

我的设置中没有使用Puppett,我提出了两种解决方案:

(1) 在my bootstrap.sh文件中:

sudo sed -i 's/APACHE_RUN_USER=.*/APACHE_RUN_USER=vagrant/g' /etc/apache2/envvars
sudo sed -i 's/APACHE_RUN_GROUP=.*/APACHE_RUN_GROUP=www-data/g' /etc/apache2/envvars
(2) 我是我的流浪汉档案:

config.vm.synced_folder "./", "/vagrant", id: "vagrant-root" , :owner => "vagrant", :group => "www-data"

config.vm.synced_folder "./app/storage", "/vagrant/app/storage", id: "vagrant-storage",
    :owner => "vagrant",
    :group => "www-data",
    :mount_options => ["dmode=775","fmode=664"]

config.vm.synced_folder "./public", "/vagrant/public", id: "vagrant-public",
    :owner => "vagrant",
    :group => "www-data",
    :mount_options => ["dmode=775","fmode=664"]

看一下流浪汉文档的这一部分

我和你处境相同,因此:#2。您不能使用xip.io地址(因此测试.10.10.10.10.xip.io)设置您的环境,然后授予root用户(或您的laravel安装所连接的用户)远程权限吗?然后,在主机上运行artisan db命令时,它应该能够找到mysql框并登录。。有道理?注意:我还必须取消绑定mysql:sudo nano/etc/mysql/my.cnf;跳过外部锁定;绑定地址保存并重新加载。希望这有帮助!是的,我们将尝试一下&看看进展如何。谢谢你的提示。最终这是一个更改权限的问题。不过,我仍然可以使用您的建议来远程访问数据库。谢谢您的分享,很高兴看到在没有puppet的情况下如何实现。以及如何更改文件夹的所有者/组。嘿@MattSetter,让我知道进展如何。我已经有一段时间没有太多的电话使用它了&不知道流浪汉或木偶是否改变了事情。我无法使用它。不确定是因为缺乏经验还是时间。但是我在puppet的config.yaml和vagrant文件中设置了权限和所有权。谢谢你的信息,谢谢你的询问。
config.vm.synced_folder "./", "/vagrant", id: "vagrant-root" , :owner => "vagrant", :group => "www-data"

config.vm.synced_folder "./app/storage", "/vagrant/app/storage", id: "vagrant-storage",
    :owner => "vagrant",
    :group => "www-data",
    :mount_options => ["dmode=775","fmode=664"]

config.vm.synced_folder "./public", "/vagrant/public", id: "vagrant-public",
    :owner => "vagrant",
    :group => "www-data",
    :mount_options => ["dmode=775","fmode=664"]