【问题标题】:Cannot Install Laravel 5 on CentOS 7无法在 CentOS 7 上安装 Laravel 5
【发布时间】:2015-04-08 13:06:25
【问题描述】:

我试图在 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 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>

请帮忙,谢谢。

【问题讨论】:

  • 响应正文中有任何错误消息吗?还要检查 apache 日志
  • 响应正文中没有消息。这是来自 apache pastebin.com/eh3MC1D7 的日志。它说权限在storage 文件夹被拒绝,但是我已经将权限设置为 777。
  • 您是否也设置了所有子文件夹的权限?
  • 我有一个非常相似的基础架构,我将它修复为 chmod 777 到 index.php 文件

标签: php laravel centos laravel-5 blade


【解决方案1】:

我知道,它是肮脏的解决方案,但尝试对所有具有重复性的应用程序文件进行 chmod 0777(对所有子目录和文件也进行 chmod)。

apache 日志中的 PHP 错误我很容易理解(它只是说:我没有记录文件的权限)

我认为,您还禁用了错误报告,这就是为什么您在响应正文中看不到错误

【讨论】:

    【解决方案2】:

    更新

    经过数小时的尝试,我终于能够通过禁用 SELinux 来解决问题。

    setenforce 0
    

    但是,我仍然不知道为什么。

    【讨论】:

      【解决方案3】:

      Laravel 不支持 SELinux,所以你需要禁用 2 个目录权限应该是 775 storage 和 bootstrap/cache。

      find storage -type d -exec chmod 777 {} \;
      chmod 775 bootstrap/cache
      

      将 SELinux 更改为禁用

      sudo vi /etc/sysconfig/selinux
      

      在 CentOS7 上享受 Laravel5.x

      【讨论】:

        【解决方案4】:

        我认为没有必要对供应商目录进行 chmod

        你可以使用这个配置

        chmod 755 -R /var/www/html chmod -R o+w /var/www/html/storage

        同时安装 mysql-server 。我在 mariadb 上遇到错误

        有详细指南可以关注laravel 5 on centos 7.2

        【讨论】:

          【解决方案5】:

          当然,Laravel 可以在启用了 Security Enhanced Linux 的情况下工作,您只需要正确设置即可。

          Laravel 将刀片模板“编译”到 ./storage/framework/views/*.php 并且网络用户需要对该目录的写入权限,当然,在启用 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 mere mortals”有视频演示文稿和 pdf。

          请不要在开放权限下运行!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-02-05
            • 1970-01-01
            • 2016-11-15
            • 2017-05-27
            • 2019-04-06
            • 2020-06-20
            • 1970-01-01
            • 2015-06-13
            相关资源
            最近更新 更多