繁体   English   中英

无法在CentOS 7上安装Laravel 5

[英]Cannot Install Laravel 5 on CentOS 7

我试图在运行Apache / PHP 5.6 / MariaDB的CentOS 7上安装一个新的laravel项目。

/var/www

composer create-project laravel/laravel devil
chmod -R 777 devil/storage
chmod -R 777 devil/vendor

当我尝试从浏览器访问它时,刀片扩展似乎无法正常工作。 它一直显示空白页,没有任何错误。

我检查了Chrome Web开发人员扩展上显示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还要所有子目录和文件)。

来自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 / html chmod -R o + w / var / www / html / storage

还要安装mysql-server。 我在mariadb上遇到错误

有详细的指南,您可以在centos 7.2上关注laravel 5

当然,Laravel可以与启用了Security Enhanced 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”,请相应地进行调整。

ps:如果您需要更多有关SELinux的信息,请在网上搜索:“ cameron selinux for mortmorts”,其中有视频演示和pdf。

请不要以开放权限运行!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM