由于有很多遗留项目,所以在引入laravel时候就没有使用homestead,而是直接使用已有的vagrant环境。
部署后发现有各种权限问题,在网上也没有发现靠谱的方法。后来还是找到了相对复杂一些,但一劳永逸的方法。
首先vagrant会自动将我们映射的文件夹所有的文件权限设置为 vagrant:vagrant,即使我在vagrant中如何将文件夹内的所有内容chmod 777或775,都无济于事。
很自然地,既然无法修改文件的用户组,就考虑将fpm的用户组修改为vagrant:
sudo vi /etc/php/7.2/fpm/pool.d/www.conf
将原来的:
user = www-data
group = www-data
修改为:
user = vagrant
group = vagrant
即可。
另一种方法原理相同,修改Vagrantfile文件:
config.vm.synced_folder “.”, “/vagrant/”,owner: “www-data”, group: “www-data”
也就是直接修改同步文件夹的owner和group为www-data。
注意:第二种方法由于改变了工作目录的默认用户组(vagrant -> www-data),在执行composer相关命令时会出现问题,由于vagrant默认的登录用户是vagrant,此时执行composer的也是vagrant用户,同样会出现permission denied的问题。这么看来还是第一种办法更好一些。
PS. 如果修改了/etc/php/7.2/fpm/pool.d/www.conf 中的 listen.owner = vagrant listen.group = vagrant,那么需要/etc/nginx/nginx.conf中的user为vagrant,否则nginx默认的用户www-data会没有权限连接fpm。并且,由于我的error.log和access.log配置在项目文件夹内,而这个文件是nginx创建的,所以也要配置nginx.conf的user为vagrant。
PS. 有的人也建议在vagrant环境中将vagrant用户加入www-data组,试了一下貌似也不行。至少还需要将文件夹内容设置为665以上。