我尝试在运行 CentOS 7 的 CentOS 7 上安装一个新的 laravel 项目 Apache/PHP 5.6/MariaDB.
/var/www
:
composer create-project laravel/laravel devil
chmod -R 777 devil/storage
chmod -R 777 devil/vendor
当我尝试从浏览器访问它时,似乎是刀片扩展 不工作。它一直显示空白页,没有任何错误。
我检查了我的 chrome 网络开发人员扩展程序上显示 500(内部服务器错误(的 HTTP 响应。
该应用程序仅在我根本不使用刀片模板(不使用 .blade.php扩展名和刀片语法(时才有效。
下面是文件夹结构
drwxr-xr-x. 10 adzar adzar 4096 Mar 25 04:06 app
-rwxr-xr-x. 1 adzar adzar 1635 Mar 25 04:06 artisan
drwxr-xr-x. 2 adzar adzar 39 Mar 25 04:06 bootstrap
-rw-r--r--. 1 adzar adzar 788 Mar 25 04:06 composer.json
-rw-r--r--. 1 adzar adzar 100509 Mar 25 04:06 composer.lock
drwxr-xr-x. 2 adzar adzar 4096 Mar 25 04:06 config
drwxr-xr-x. 4 adzar adzar 52 Mar 25 04:06 database
-rw-r--r--. 1 adzar adzar 503 Mar 25 04:06 gulpfile.js
-rw-r--r--. 1 adzar adzar 98 Mar 25 04:06 package.json
-rw-r--r--. 1 adzar adzar 87 Mar 25 04:06 phpspec.yml
-rw-r--r--. 1 adzar adzar 777 Mar 25 04:06 phpunit.xml
drwxr-xr-x. 4 adzar adzar 95 Mar 25 04:06 public
-rw-r--r--. 1 adzar adzar 1724 Mar 25 04:06 readme.md
drwxr-xr-x. 5 adzar adzar 42 Mar 25 04:06 resources
-rw-r--r--. 1 adzar adzar 560 Mar 25 04:06 server.php
drwxrwxrwx. 5 adzar adzar 60 Mar 25 04:06 storage
drwxr-xr-x. 2 adzar adzar 47 Mar 25 04:06 tests
drwxrwxrwx. 26 adzar adzar 4096 Apr 8 18:31 vendor
.env file
(不变(
APP_ENV=local
APP_DEBUG=false
APP_KEY=EOvUHTpMtavKDMx1GdkREtbves8PVEUb
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
我使用 IP 地址(100.255.XXX.XXX)
通过 apache 虚拟主机访问我的应用程序。以下是我的/etc/httpd/conf/httpd.conf
.
...
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName 100.255.XXX.XXX
...
<VirtualHost *:80>
ServerName 100.255.XXX.XXX
DocumentRoot /var/www/devil/public
<Directory /var/www/devil>
AllowOverride All
</Directory>
</VirtualHost>
请帮忙,谢谢。
,它的解决方案很脏,但尝试在所有具有重新出现的应用程序文件上chmod 0777(chmod也对所有子目录和文件进行chmod(。
来自 apache 日志的 PHP 错误我真的很容易理解(它只是说:我没有日志文件的权限(
我认为,您也禁用了错误报告,这就是为什么您在响应正文中看不到错误的原因
更新
经过数小时的尝试,我终于能够通过禁用 SELinux 来解决问题。
setenforce 0
但是,我仍然不知道为什么。
Laravel不支持SELinux,因此您需要禁用并且2个目录权限应为775存储和引导/缓存。
find storage -type d -exec chmod 777 {} ';
chmod 775 bootstrap/cache
将 SELinux 更改为禁用
sudo vi /etc/sysconfig/selinux
在 CentOS7 上享受 Laravel5.x
我认为没有必要在供应商目录上进行chmod
您可以使用此配置
chmod 755 -R/var/www/htmlchmod -R o+w/var/www/html/storage
还要安装 mysql-server 。 我在MariaDB上遇到错误
有一个详细的指南,你可以在 CentOS 5 上关注 Laravel 7.2
当然,Laravel可以在启用安全增强型Linux的情况下工作,您只需要正确设置即可。
Laravel将刀片模板"编译"为./storage/framework/views/*.php,Web用户需要将权限写入该目录,当然,启用SELinux,这意味着上下文的更改(httpd_sys_rw_content_t(。
这是我的安全设置脚本:
# This file is intended to run as root
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fi
# set this to your directory
LARAVELDIR=/var/www/html/cvprima
# just in case the log file does not exist yet
touch $LARAVELDIR/storage/logs/laravel.log
chcon -Rv --type=httpd_log_t $LARAVELDIR/storage/logs/laravel.log
chgrp www $LARAVELDIR/storage/logs $LARAVELDIR/storage/logs/*.log
chmod g+w $LARAVELDIR/storage/logs
# now for the ./storage/ directory
STORAGE=$LARAVELDIR/storage
for dir in $STORAGE/framework/cache $STORAGE/framework/sessions $STORAGE/framework/views $STORAGE/app/public $LARAVELDIR/bootstrap/cache ;do
chcon -Rv --type=httpd_sys_rw_content_t $dir 2>/dev/null 1>&2
# you _should_ actually never have .gitignore in these directories...
chcon -Rv --type=httpd_sys_content_t $dir/.gitignore 2>/dev/null 1>&2
chgrp www $dir $dir/* 2>/dev/null 1>&2
chmod -R g+w $dir $dir/* 2>/dev/null 1>&2
done
您可以做的更多事情(但要小心,因为这些是递归的(
# all your files need to be httpd_sys_content_t (including the ./vendor/* directory tree)
chcon -Rv --type=httpd_sys_content_t $LARAVELDIR
# You either need files to be o+r, or chgrp www and g+r so that your webserver can access them.
chgrp -R www $LARAVELDIR
chmod -R g+r $LARAVELDIR
find $LARAVELDIR -type d | xargs chmod -R g+rx
保护您的 .env 文件(使其成为 -rw-r-----. 1 prima www(
chgrp www $LARAVELDIR/.env
chmod 640 $LARAVELDIR/.env
我的用户称为"Prima",请相应地调整。
附言:如果您需要了解有关SELinux的更多信息,请在网络上搜索:"Cameron selinux for Just Mortals"有一个视频演示和一个pdf。
请不要以开放权限运行!