PHP-FPM + Laravel + Nginx + Ubuntu 权限
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 public/private 密钥,我需要属于组 www-data
还是我必须是 sudo
或什么?在我的生产服务器中,我尝试使用 sudo
以某种方式设置所有内容,这样可以更轻松地完成上述所有操作,但这是最佳做法吗?
使 app/storage
对网络服务器可写:
我认为这是第二个也是对 Laravel 最重要的,因为除非这个有效 Laravel 不会 运行ning,我知道这个文件夹必须是可由网络服务器(nginx)写入,所以我需要将其设置为 sudo chown -R www-data:www-data app/storage
和 sudo chmod -R 664 app/storage
对吗?但不知何故这似乎并不总是有效,因为在我的开发过程中有时它会告诉视图的缓存不能写入 app/storage
文件夹,所以最后我必须将它设置为 777
或 775
如果我幸运的话。
Public 文件夹,或者我的资源所在的地方
这里我也有一些不一致,我在最后设置为777
,以确保我的所有文件都可以被nginx访问。有时 nginx 会告诉我资产文件夹中的某些图像似乎被禁止,如果我设置为 777
或更改它只会 return HTTP 200 group 到 www-data:www-data
,当我的图形设计师设计新图标时,我是否必须更改我从 Gimp、Photoshop 或从 Dropbox 下载或从我的电子邮件创建的每个图像的权限或组?
文件上传
所以在某个时候,人们将能够上传他们的个人资料图片,或者当我 post 博客时我可以上传图片,这意味着在某些时候文件上传脚本将将文件从/tmp
文件夹移动到我的public
文件夹,它可能只需要写入public
中的子目录或者有时需要根据某个[=创建一个文件夹33=] 并将文件移动到目录中,大多数时候我会得到一个错误,即目录似乎不可写或在脚本执行期间出现一些权限错误。这是否意味着 PHP 进程 也必须 运行 具有特定权限?还是说目录必须要有一定的权限?这个问题是和Nginx服务有关还是和PHP进程有关?
我有使用roumen/sitemap
或jlapp/swaggervel
等包的经验,他们似乎使用相同的FacadeFile
,但不知何故他们没有任何权限问题,我尝试复制他们的代码行为,但我遇到了上面的问题。
Queue、Artisan、其他基于命令行的执行脚本
最后,是基于命令行执行的脚本,它的行为是否与通过与网络服务器交互执行的脚本相同,例如上面的文件上传,或者我是否需要为其他不一致做准备?
谢谢,如果有人能给我解释一下。我想如果我弄明白了,我会创建一个博客 post 之类的,感谢大家! :D
我通常做的是将所有 files/folders 组更改为 sudo chgrp -R www-data laravel-folder
的 www-data。这样我仍然是所有者并且网络服务器具有组权限。
当 www-data 拥有组所有权时,sudo chmod -R g+w app/storage
允许网络服务器写入存储子文件夹。或者你可以做 sudo chmod -R 775 app/storage
。不要用777,没必要让所有人都写你的文件夹
对于所有新资产,我总是集体更改组所有权。或者,如果很多地方有新文件,就重新做sudo chgrp -R www-data laravel-folder
。一个命令,一切都有适当的组所有权。
无需更改 public
文件夹 (755) 的默认权限。 Nginx 不会在那里保存文件。
用户发送的所有文件都应位于storage
。您可以为头像创建一个子文件夹,为其他用户文件创建另一个子文件夹。这就是此文件夹被称为 storage
的原因(不言自明)。它可由网络服务器写入,因此 nginx 可以在那里创建 files/folders。
当你像我上面描述的那样调整权限/组所有权时,使用 artisan 或 CLI 命令应该没有问题。
我建议您阅读这篇 How to Install Laravel with an Nginx Web Server on Ubuntu 14.04 文章。
这个问题我之前也搜索过,但是好像没有地方解释的很透彻,大部分都是一些问题,比如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 public/private 密钥,我需要属于组www-data
还是我必须是sudo
或什么?在我的生产服务器中,我尝试使用sudo
以某种方式设置所有内容,这样可以更轻松地完成上述所有操作,但这是最佳做法吗?使
app/storage
对网络服务器可写:我认为这是第二个也是对 Laravel 最重要的,因为除非这个有效 Laravel 不会 运行ning,我知道这个文件夹必须是可由网络服务器(nginx)写入,所以我需要将其设置为
sudo chown -R www-data:www-data app/storage
和sudo chmod -R 664 app/storage
对吗?但不知何故这似乎并不总是有效,因为在我的开发过程中有时它会告诉视图的缓存不能写入app/storage
文件夹,所以最后我必须将它设置为777
或775
如果我幸运的话。Public 文件夹,或者我的资源所在的地方
这里我也有一些不一致,我在最后设置为
777
,以确保我的所有文件都可以被nginx访问。有时 nginx 会告诉我资产文件夹中的某些图像似乎被禁止,如果我设置为777
或更改它只会 return HTTP 200 group 到www-data:www-data
,当我的图形设计师设计新图标时,我是否必须更改我从 Gimp、Photoshop 或从 Dropbox 下载或从我的电子邮件创建的每个图像的权限或组?文件上传
所以在某个时候,人们将能够上传他们的个人资料图片,或者当我 post 博客时我可以上传图片,这意味着在某些时候文件上传脚本将将文件从
/tmp
文件夹移动到我的public
文件夹,它可能只需要写入public
中的子目录或者有时需要根据某个[=创建一个文件夹33=] 并将文件移动到目录中,大多数时候我会得到一个错误,即目录似乎不可写或在脚本执行期间出现一些权限错误。这是否意味着 PHP 进程 也必须 运行 具有特定权限?还是说目录必须要有一定的权限?这个问题是和Nginx服务有关还是和PHP进程有关?我有使用
roumen/sitemap
或jlapp/swaggervel
等包的经验,他们似乎使用相同的FacadeFile
,但不知何故他们没有任何权限问题,我尝试复制他们的代码行为,但我遇到了上面的问题。Queue、Artisan、其他基于命令行的执行脚本
最后,是基于命令行执行的脚本,它的行为是否与通过与网络服务器交互执行的脚本相同,例如上面的文件上传,或者我是否需要为其他不一致做准备?
谢谢,如果有人能给我解释一下。我想如果我弄明白了,我会创建一个博客 post 之类的,感谢大家! :D
我通常做的是将所有 files/folders 组更改为
sudo chgrp -R www-data laravel-folder
的 www-data。这样我仍然是所有者并且网络服务器具有组权限。当 www-data 拥有组所有权时,
sudo chmod -R g+w app/storage
允许网络服务器写入存储子文件夹。或者你可以做sudo chmod -R 775 app/storage
。不要用777,没必要让所有人都写你的文件夹对于所有新资产,我总是集体更改组所有权。或者,如果很多地方有新文件,就重新做
sudo chgrp -R www-data laravel-folder
。一个命令,一切都有适当的组所有权。 无需更改public
文件夹 (755) 的默认权限。 Nginx 不会在那里保存文件。用户发送的所有文件都应位于
storage
。您可以为头像创建一个子文件夹,为其他用户文件创建另一个子文件夹。这就是此文件夹被称为storage
的原因(不言自明)。它可由网络服务器写入,因此 nginx 可以在那里创建 files/folders。当你像我上面描述的那样调整权限/组所有权时,使用 artisan 或 CLI 命令应该没有问题。
我建议您阅读这篇 How to Install Laravel with an Nginx Web Server on Ubuntu 14.04 文章。