無法在 CentOS 7 上安裝 Laravel 5


Cannot Install Laravel 5 on CentOS 7

我尝试在运行 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。

请不要以开放权限运行!