[英]PHP-FPM + Laravel + Nginx + Ubuntu permission
我之前尝试过搜索这个问题,但似乎没有任何地方可以彻底解释,大多数情况下只有app/storage
权限等问题尚未设置,所以webserver可以写文件,但我的问题似乎更大,更基本,我希望有人能够彻底解释如何设置,最好不需要设置777
权限。
所以我的堆栈是Ubuntu 14.04 , PHP 5.6和PHP-FPM,因为我使用nginx 1.4.6并且使用Laravel 4.2作为框架,ow和另外一个我使用Git作为我的版本控制工具。 那么,允许以下内容的必要步骤是什么?
设置初始项目,Git和Nginx:
据我所知,Nginx设置为使用用户名www-data
作为默认值吗? 这是否意味着我必须将我的用户如kevin
分配到组www-data
? 当我初始化git时,使用composer创建项目,设置SSH公钥/私钥,我是否需要属于组www-data
或者我必须是sudo
还是什么? 在我的生产服务器中,我尝试使用sudo
设置所有内容,以便更容易完成上述所有操作,但这是最佳做法吗?
使网络服务器的app/storage
可写:
我认为这是Laravel的第二个也是最重要的,因为除非这个工作Laravel不会运行,我的知识是这个文件夹必须可以被webserver(nginx)写入,所以我需要将它设置为sudo chown -R www-data:www-data app/storage
和sudo chmod -R 664 app/storage
对吗? 但不知怎的,这似乎并不是一直有效,因为在我的开发过程中有时它会告诉视图的缓存无法写入app/storage
文件夹,所以最后我必须将它设置为777
或775
我很幸运。
公共文件夹或我的资产的位置
这里我也有一些不一致的地方,我最后将它设置为777
以确保nginx可以访问我的所有文件。 有时nginx会告诉我,我的资产文件夹中的某些图像似乎被禁止,如果我设置为777
或将组更改为www-data:www-data
,它将只返回HTTP 200 www-data:www-data
,我是否必须更改权限或我从Gimp,Photoshop创建的每个图像,或者当我从Dropbox下载时,或者当我的平面设计师设计新图标时从我的电子邮件中创建的图像?
上传文件
所以在某个时间,人们将能够上传例如他们的个人资料图片,或者当我发布博客时我可以上传图片,这意味着在某些时候文件上传脚本会将文件从/tmp
文件夹移动到我的public
文件夹,它可能只需要在public
写入一个子目录,或者有时它需要根据某个id
创建一个文件夹并将文件移动到目录中,大多数时候我会得到一个错误,该目录似乎没有在执行脚本期间是可写的或某些权限错误。 这是否意味着PHP进程也必须以某种权限运行? 或者这是否意味着目录必须拥有一定的权限? 此问题是否与Nginx服务有关,还是与PHP进程有关 ?
我有使用roumen/sitemap
或jlapp/swaggervel
等软件包的经验,他们似乎使用相同的Facade File
,但不知何故他们没有任何权限问题,我尝试复制他们的代码行为但我遇到了问题以上。
Queue,Artisan,其他基于命令行的执行脚本
最后,是基于命令行的执行脚本,它的行为与从与Web服务器的交互执行的脚本相同,例如上面的文件上载,还是我需要为其他不一致做准备?
谢谢,如果有人可以向我解释。 我想如果我搞清楚,我会创建一个博客文章或其他东西,欣赏它们! :d
我通常做的是使用sudo chgrp -R www-data laravel-folder
将所有文件/文件夹组更改为www-data。 这样我仍然是所有者,网络服务器具有组权限。
当www-data拥有组所有权时, sudo chmod -R g+w app/storage
允许webserver写入存储子文件夹。 或者你也可以做sudo chmod -R 775 app/storage
。 不要使用777,不需要允许每个人写入您的文件夹。
对于所有新资产,我总是集体改变集团所有权。 或者,如果许多地方都有新文件,请再次执行sudo chgrp -R www-data laravel-folder
。 一个命令和一切都有适当的组所有权。 有没有需要改变的默认权限public
文件夹(755)。 Nginx不会在那里保存文件。
用户发送的所有文件都应位于storage
。 您可以为头像创建一个子文件夹,为其他用户文件创建另一个子文件夹。 这就是为什么这个文件夹被称为storage
(不言自明)。 它可以由webserver写入,因此nginx可以在那里创建文件/文件夹。
如上所述调整权限/组所有权时,artisan或CLI命令应该没有问题。
我建议你阅读本文如何在Ubuntu 14.04上使用Nginx Web服务器安装Laravel 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.