我已经克隆了一个laravel repo到我的CentOS 7盒子。当我尝试运行它时,我得到500错误,没有显示任何内容。
所以我查看了/var/log/httpd/error_log
,我发现我有一些权限错误:
[Mon May 16 11:39:32.996441 2016] [:error] [pid 2434] [client 104.156.67.195:39136] PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/var/www/html/MYSITE/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/html/MYSITE/bootstrap/cache/compiled.php:13701
Stack trace:
#0 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13635): Monolog\\Handler\\StreamHandler->write(Array)
#1 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13396): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
#2 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13494): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
#3 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13189): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
#4 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13160): Illuminate\\Log\\Writer->writeLog('error', Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
# in /var/www/html/MYSITE/bootstrap/cache/compiled.php on line 13701
我已经做了以下尝试来克服这些问题:
chmod -R 775 storage
chmod -R 775 vendor
chown -R apache:apache storage
所以它现在显示如下:
-rwxrwxr-x. 1 apache apache 2156 May 16 11:41 storage/logs/laravel.log
但那没用。
有趣的是,我之前错误地输入了一些artisan
命令,这些命令似乎将日志添加到日志文件中......
selinux
I found this answer,解决了我的问题。
通过使用命令关闭
selinux
证明这是问题setenforce 0
这应该允许写入,但是你已经关闭了服务器范围内增加的安全性。那很糟。转回SELinux
setenforce 1
然后最后使用SELinux允许使用此命令写入文件
chcon -R -t httpd_sys_rw_content_t storage
你要走了!
我需要对SELinux进行更多调整,而不仅仅是针对storage
。特别是config
dir可以在Laravel bootstrapping上解决这个问题。
如果你sudo setenforce permissive
它的工作原理,然后把它转回sudo setenforce enforcing
然后按照下面。
SELinux laravel设置:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/storage(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/bootstrap/cache(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/config(/.*)?"
restorecon -Rv /var/www/site/
在我的情况下,它是另一个unix用户,所以这个工作:
chown -R php-fpm:php-fpm storage
将此应用于整个项目。
chcon -R -t httpd_sys_rw_content_t project_folder