Laravel 8 storage/framework/cache/data/ee 文件夹将用户设置为 root:root 而不是 apache:apache 权限被拒绝

Posted

技术标签:

【中文标题】Laravel 8 storage/framework/cache/data/ee 文件夹将用户设置为 root:root 而不是 apache:apache 权限被拒绝【英文标题】:Laravel 8 storage/framework/cache/data/ee folder sets user as root:root rather than apache:apache permission denied 【发布时间】:2021-11-08 15:20:40 【问题描述】:

我有一个 Laravel 8 应用程序,在 Cent OS 8.4 虚拟机上运行。我正在使用 Tymondesigns 的 jwt-auth 包在我的项目中实现身份验证,它被用作 API。

当我在服务器上设置项目并部署它时,Laravel 中的 storage 文件夹作为 deployer 项目的一部分移动到 shared 目录,并且出于某种原因,尽管设置了权限storage 文件夹,我看到并非每个文件夹,特别是 ee 缓存文件夹都具有错误的权限,并且我收到了 JWT auth 包引发的权限被拒绝错误:

file_put_contents(/var/www/project-beacon-api/releases/37/storage/framework/cache/data/ee/67/ee673b1cd21b0cd9eca15c240d66269df17f9b3a):无法打开流:没有这样的文件或目录

我不明白为什么会出现此错误,并且只要我使用过 Laravel,将 storage 文件夹的权限设置为 755 / 775 从未起作用,并尝试打开网站总是抛出一个权限被拒绝。

我在权限配置中遗漏了什么,我需要运行什么来一劳永逸地解决这个问题?

它似乎总是ee 文件夹!

【问题讨论】:

确保 nginx/apache 服务器用户(www-data)拥有这些文件夹的权限并且是所有者。 【参考方案1】:

由于 laravel 缓存而发生错误 在运行此命令之前 转到项目中的 .env 文件,您会发现

CACHE_DRIVER = file

然后把缓存驱动改成这个

CACHE_DRIVER = array

在 Laravel 中使用缓存时,您应该考虑 3 个可能的“家族”:

临时/调试

数组

随时可用

文件 数据库 APC(自 php7 以来我不会相信这个)

专用

Redis

内存缓存

由于您可以轻松更换缓存驱动程序,因此您无需根据您的用例选择一个,而是更多地根据您的服务器需求/负载和可能性来选择。

例如,在您的开发机器上,我建议使用文件,因为这样您就不需要任何额外的软件来阻塞您的 PC,而且您可以获得快速清除缓存的能力,即使您做了一些非常糟糕的事情,比如破坏工匠命令。您需要做的就是删除 storage/framework 文件夹,然后您再次拥有一个新实例(确保之后从您的存储库重新生成 .gitignore 文件)

对于您的主服务器,您必须考虑您的可能性。如果您拥有其中一个免费托管网站,您几乎肯定无法安装任何新软件,因此您可以考虑使用文件或数据库。即使数据库可能比文件快,但在大多数情况下,它是您网站的最薄弱环节,并且尝试将更多数据推入该瓶颈不是一个好主意,这就是为什么我建议不要使用它的原因,而是坚持文件。

如果您有专用服务器,那么您绝对应该选择 Memcached 或 Redis。两者中的哪一个?这取决于很多因素,你可以在网上找到很多比较,随便找一个。我个人更喜欢 Redis,因为它能够持久化数据,但任何一个都是不错的解决方案

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。 这是在做什么?文件和数组的区别? 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 @RyanH 我已经更新了我的答案,你可以从那里阅读。【参考方案2】:

您需要拥有整个项目的所有权(用户:组)[使用ls -la 在您的项目根文件夹中查看所有权]

如果不正确,请使用 chown: sudo chown -R yourUserName:www-data /path/to/project

如果所有权没问题,只需将存储文件夹的权限设置为:sudo chmod -R 775 storage/ 这样您就可以拥有写入权限

【讨论】:

以上是关于Laravel 8 storage/framework/cache/data/ee 文件夹将用户设置为 root:root 而不是 apache:apache 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何将 App\Exceptions 从 laravel 7 升级到 laravel 8

在 Laravel 8 中安装 Laravel/ui 的问题

Laravel 8 工厂的多重关系

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证

从 Laravel 5.7.4 升级到 Laravel 8 的危险

如何为 8.x 版本更新 Laravel 安装程序?