最近做了个简单Laravel应用(版本5.5),这里记录在部署到服务器时,遇到文件权限不够问题。
为了php进程和nginx进程权限出现问题,故共同使用nginx账号。
在部署Laravel时首先更改文件权限
chown nginx:nginx -R laravel-app
这时其实文件权限已经够了。
但是刷新访问依然报文件权限错误
Error in exception handler: The stream or file "/var/www/laravel-app/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel-app/bootstrap/compiled.php:8423
好吧,给storage和bootstrap/cache775权限
sudo -u nginx chown -R 775 storage
sudo -u nginx chown -R 775 bootstrap/cache
这下总行了吧。
刷新继续文件权限错误,难道是缓存问题??
清一下缓存和包自动发现
sudo -u nginx php artisan package:discover
sudo -u nginx php artisan config:clear
sudo -u nginx php artisan cache:clear
结果还是没有权限,很是纳闷呢。
查了半天发现原来是 SELinux 搞的鬼,linux系统为 centos 7.6
SELinux 共有三种模式如下:
Enforcing:强制模式,依据设定来限制档案资源存取。 Permissive:宽容模式,不限制档案资源存取,但仍会依据设定检查并记录相关讯息。 Disabled:停用模式,SELinux 已被停用。 默认为强制模式。
看下SELinux状态,设置宽容模式。
sestatus setenforce Permissive 或者 sudo setenforce 0 问题解决。
参考资料: