PHP-FPM + Laravel + Nginx + Ubuntu permission


PHP-FPM + Laravel + Nginx + Ubuntu permission

我以前试过搜索这个问题,但似乎没有地方能彻底解释清楚,大多只是app/storage权限等问题没有设置,所以Web服务器可以写文件,但我的问题似乎更大、更根本,我希望有人能彻底解释应该如何设置,优选地不需要对CCD_ 2设置许可。

因此,我的堆栈是Ubuntu 14.04PHP 5.6PHP-FPM,因为我使用nginx 1.4.6以及Laravel 4.2作为框架,我还使用Git来作为我的版本控制工具。那么,允许以下操作的必要步骤是什么:

  1. 设置初始项目、Git和Nginx:

    据我所知,Nginx被设置为使用用户名www-data作为默认权限?这是否意味着我必须将我的用户(例如kevin)分配给组www-data?当我初始化git,使用composer创建项目,设置SSH公钥/私钥时,我需要属于组www-data还是必须是sudo?在我的生产服务器中,我尝试使用sudo来设置所有内容,不知何故,它使完成上述所有操作变得更容易,但这是最佳实践吗?

  2. 使app/storage可写入Web服务器:

    我认为这对Laravel来说是第二个也是最重要的,因为除非这项工作有效,否则Laravel不会运行,我知道这个文件夹必须是Web服务器(nginx)可写的,所以我需要将其设置为sudo chown -R www-data:www-data app/storagesudo chmod -R 664 app/storage,对吗?但不知何故,这似乎并不总是有效的,因为在我的开发过程中,有时它会告诉我视图的缓存无法写入app/storage文件夹,所以如果幸运的话,最后我必须将其设置为777775

  3. 公用文件夹,或我的资产所在地

    这里我也有一些不一致之处,我在777的末尾设置了它,以确保nginx可以访问我的所有文件。有时nginx会告诉我,我的资产文件夹中的某些图像似乎被禁止,如果我设置为777或将组更改为www-data:www-data,它只会返回HTTP 200。当我的平面设计师设计新图标时,我是否必须更改从Gimp、Photoshop或从Dropbox或电子邮件下载的每个图像的权限或组?

  4. 文件上传

    因此,在某个时候,人们将能够上传他们的个人资料图片,或者当我发布博客时,我可以上传图片,这意味着在某个时刻,文件上传脚本会将文件从/tmp文件夹移动到我的public文件夹,它可能只需要写入7770中的一个子目录,或者有时需要基于某个id创建一个文件夹并将文件移动到该目录中,大多数时候我会在脚本执行过程中遇到目录似乎不可写的错误或某些权限错误。这是否意味着PHP进程也必须在具有特定权限的情况下运行?或者这意味着目录必须具有特定的权限?这个问题是与Nginx服务有关,还是与PHP进程相关?

    我有使用roumen/sitemapjlapp/swaggervel等包的经验,它们似乎使用相同的Facade File,但不知何故,它们在权限方面没有任何问题,我试图复制它们的代码行为,但我遇到了上面的问题。

  5. 队列、Artisan、其他基于命令行的执行脚本

    最后,是基于命令行执行的脚本吗?这与与通过与Web服务器交互执行的脚本(如上面的文件上传)的行为相同吗?还是我需要为其他不一致做好准备?

谢谢你,如果有人能向我解释这一点。我想如果我想明白了,我会写一篇博客或其他什么,谢谢大家!:D

  1. 我通常会用sudo chgrp -R www-data laravel-folder将所有文件/文件夹组更改为www数据。这样,我仍然是所有者,并且Web服务器具有组权限。

  2. 当www数据具有组所有权时,sudo chmod -R g+w app/storage允许Web服务器写入存储子文件夹。或者你也可以做sudo chmod -R 775 app/storage。不要使用777,没有必要允许每个人都写入您的文件夹。

  3. 对于所有新资产,我总是集体更改集团所有权。或者,如果许多地方都有新文件,请再次执行sudo chgrp -R www-data laravel-folder。一个命令,所有东西都有适当的集体所有权。无需更改public文件夹(755)的默认权限。Nginx不会在那里保存文件。

  4. 用户发送的所有文件都应位于storage中。您可以为化身创建一个子文件夹,为其他用户文件创建另一个子文件夹。这就是为什么这个文件夹被称为storage(不言自明)。它是可由Web服务器编写的,因此nginx可以在那里创建文件/文件夹。

  5. 当您像我上面描述的那样调整权限/组所有权时,artisan或CLI命令应该没有问题。

我建议你阅读这篇如何在Ubuntu 14.04上用Nginx Web服务器安装Laravel的文章。