Adr*_*ian 14 file-permissions puppet vagrant laravel laravel-4
我成功地使用http://www.puphpet.com为许多项目生成了vagrant + puppet环境.然后本周我的任务是使用Laravel 4为一个项目编写一个原型.由于我不打算成为那个全职工作项目的人,我认为最好为下一个项目创建一个VM环境.人只能克隆回购.没有太多使用Laravel 4的经验我在开发环境中运行得很好.然后我尝试运行第一次迁移,这里的问题从app/storage文件权限开始.
1. app/storage必须可由Web用户写入
好的,从同步文件夹配置中取出id:vagrant并将所有者和组设置为www-data,如下所示:
config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
Run Code Online (Sandbox Code Playgroud)
2.工匠只能从流浪者箱内运行才能进入DB
很好,vagrant ssh并从www文件夹运行工匠.
3. app/storage&app/database必须由vagrant用户写入才能使用迁移
Grrr,好的,将以下可怕的代码添加到vagrant文件中(注意,首先尝试在Puppet中执行此操作并且不执行此操作):
config.vm.provision :shell, :inline =>
"usermod -a -G www-data vagrant"
Run Code Online (Sandbox Code Playgroud)
4. app/storage&app/database不能被组写入
哎呀!好吧,让我们试试这个Puppet指令:
file { "/var/www/app/storage":
source => "/var/www/app/storage/",
mode => 0775,
ensure => 'directory',
owner => 'www-data',
group => 'www-data',
recurse => true
}
Run Code Online (Sandbox Code Playgroud)
不,不行.试图用Puppet exec {}指令做同样的事情没有效果.似乎vagrant synced文件夹的权限由主机设置,而不是guest.
最后,最终手动更改主机中文件夹的权限.有没有更简单的方法来做到这一点?我真的希望能够为下一个开发人员提供一个无忧无虑的环境,他们可以从回购中克隆,而不是让他们在克隆后重新设置一切.
UPDATE
我们已经发现,如果我们更改Apache运行用户,vagrant不会在重新加载时覆盖它.所以我们手动完成了它,它比更改同步文件夹的权限和所有者更好.现在我们只想弄清楚如何在Puppet中手动进行更改.
Adr*_*ian 19
在Twitter上进行一些讨论之后,想出了以下内容:
VirtualBox上存在一个限制,它不允许您从来宾操作系统内部为同步文件夹设置权限.在github上看到这个问题.
您可以使用以下代码从vagrant文件设置同步文件夹权限:
config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"]
Run Code Online (Sandbox Code Playgroud)
或者您可以将Apache运行时用户从puppet清单更改为vagrant,如下所示:
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'],
}
Run Code Online (Sandbox Code Playgroud)
或以上的任何组合
我在设置中没有使用pupphet,我想出了两个解决方案:
(1)在我的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
Run Code Online (Sandbox Code Playgroud)
(2)我的VagrantFile:
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"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6918 次 |
| 最近记录: |