PHP-FPM + Laravel + Nginx + Ubuntu权限

时间:2015-02-08 08:32:03

标签: php ubuntu laravel nginx user-permissions

我之前尝试过搜索过这个问题,但似乎没有任何地方可以彻底解释,大多数问题都没有设置app/storage权限,所以webserver可以写文件,但我的问题似乎更大,更基本,我希望有人可以彻底解释如何设置,最好不需要设置777的权限。

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

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

    据我所知,Nginx设置为默认使用用户名www-data吗?这是否意味着我必须分配我的用户,例如kevinwww-data?当我初始化git时,使用composer创建项目,设置SSH公钥/私钥,我是否需要属于组www-data或者我必须是sudo或者什么?在我的生产服务器中,我尝试使用sudo设置所有内容,以便更容易完成上述所有操作,但这是最佳做法吗?

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

    我认为这是Laravel的第二个也是最重要的,因为除非这个工作Laravel不会运行,我的知识是这个文件夹必须是webserver(nginx)可写的,所以我需要将它设置为sudo chown -R www-data:www-data app/storagesudo chmod -R 664 app/storage对吗?但不知何故,这似乎并不总是有效,因为在我的开发过程中,有时它会告诉视图的缓存无法写入app/storage文件夹,所以最后我必须将它设置为{{ 1}}或777如果我很幸运。

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

    此处我也有一些不一致之处,我已将其设置在775的末尾,以确保 nginx 可以访问我的所有文件。有时 nginx 会告诉我,我的资产文件夹中的某些图片似乎被禁止,如果我设置为777或将组更改为777,则只返回HTTP 200 ,我是否必须更改我从Gimp,Photoshop创建的每个图像的权限或组,或者当我从图形设计师设计新图标时从Dropbox下载或从我的电子邮件中删除时?

  4. 文件上传

    所以在某个时间,人们可以上传例如他们的个人资料图片,或者当我发布博客时我可以上传图片,这意味着在某些时候文件上传脚本将从{移动文件{1}}文件夹到我的www-data:www-data文件夹,它可能只需要写入/tmp中的子目录,或者有时需要根据某个public创建一个文件夹并移动文件进入目录,大多数时候我会得到一个错误,该目录似乎不可写,或者在执行脚本期间有一些权限错误。这是否意味着 PHP进程也必须以某种权限运行?或者这是否意味着目录必须拥有一定的权限?此问题是否与 Nginx服务相关,还是与 PHP流程相关?

    我有使用publicid等软件包的经验,他们似乎使用相同的Facade roumen/sitemap,但不知何故他们没有任何权限问题,我尝试复制他们的代码行为,但我遇到了上面的问题。

  5. 队列,工匠,其他基于命令行的已执行脚本

    最后,是基于命令行的执行脚本,它的行为与从与webserver的交互执行的脚本相同,例如上面的文件上传,还是我需要为其他不一致做准备?

  6. 谢谢,如果有人能向我解释这个问题。我想如果我搞清楚,我会创建一个博客文章或其他东西,欣赏它们! :d

1 个答案:

答案 0 :(得分:10)

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

  2. 当www-data拥有群组所有权时,sudo chmod -R g+w app/storage允许网络服务器写入存储子文件夹。或者您也可以sudo chmod -R 775 app/storage。不要使用777,不需要允许每个人写入您的文件夹。

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

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

  5. 如上所述调整权限/组所有权时,artisan或CLI命令应该没有问题。

  6. 我建议你阅读这篇How to Install Laravel with an Nginx Web Server on Ubuntu 14.04文章。