lnmp laravel 踩坑记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang_referee/article/details/82915367

        先说下笔者环境:kubuntu 18.04 ,lnmp(php7.2 ,mysql5.7 ,nginx 1.14),lnmp环境搭建是采用一键安装包编译过来的。lnmp环境搭建详见:https://lnmp.org/install.html,这里不再赘述,主要说下 搭建laravel 项目中遇到的一些坑。

    这里采用composer (安装好lnmp后自带composer)安装laravel 5.5(并在当前目录下创建test项目)

composer create-project laravel/laravel=5.5 test --prefer-dist

如果遇上迟迟没有下载,可以试试如下命令:

composer config -g repo.packagist composer https://packagist.laravel-china.org

上面命令是把composer 镜像设置为国内镜像

如果出现类似下图的错误:

则可以敲入一下命令:

composer config -g secure-http false

即全局禁用https协议去连接

再次执行上面安装命令:

这一部操作是很快的,然后你就会发现在当前目录下已经创建了一个test的项目(并且可以看到laravel版本为5.5.43)。

zhang@zhang-kubuntu-host:~/Data/project$ ls
dye_sfabric.sql  local_test_code.rar  test
zhang@zhang-kubuntu-host:~/Data/project$ ls
dye_sfabric.sql  local_test_code.rar  test
zhang@zhang-kubuntu-host:~/Data/project$ cd test
zhang@zhang-kubuntu-host:~/Data/project/test$ ls
app      bootstrap      composer.lock  database      phpunit.xml  readme.md  routes      storage  vendor
artisan  composer.json  config         package.json  public       resources  server.php  tests    webpack.mix.js
zhang@zhang-kubuntu-host:~/Data/project/test$ php artisan --version
Laravel Framework 5.5.43


这里说点题外话,在写这篇博客前,我配置的composer 镜像不是上面的地址,composer 安装laravel 用的命令也不是上面的命令。在写这篇文章的过程中,遇到了点意外,发现之前配置的composer镜像慢的要死,然后又重新配了下composer镜像(就是上面的镜像,不过话说现在的镜像速度比我之前配的要快的多),如果你在看这篇文章的时候,发现上面的操作行不通了,就不要再多尝试(也许你也会遇到类似的问题),而是应该去选择其它的镜像,不过这些都不是重点。

好了,既然laravel 安装好了,那么我们配置一个虚拟站点:

键入以下命令:

lnmp vhost add

然后根据自己的想法做相应的配置即可。

然后在Hosts文件中配置相应的域名即可。

键入:vim /etc/hosts

追加下面的内容

127.0.1.1       www.lt.com

添加后,不需要重启,会自动生效

好了,配置完退出后,等待个一分钟左右,在浏览器上访问刚配置的虚拟站点,发现不能正常访问:

这样一片空白,对开发者来说,很不友好,我们要知道哪里出问题了,并解决它,ok,打开php.ini 文件找到 display_errors 和 display_startup_errors ,这两个选项默认是关闭的,把它们开启即可(设置为On)。

这里介绍两种快速定位php.ini文件的方法:

root@zhang-kubuntu-host:/usr/local/nginx/conf# php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/php/etc
Loaded Configuration File => /usr/local/php/etc/php.ini
root@zhang-kubuntu-host:/usr/local/nginx/conf# locate php.ini
/home/wwwroot/sf.sm/php.ini
/home/wwwroot/sf.sm/vendor/doctrine/cache/tests/travis/php.ini
/usr/local/php/etc/php.ini

保存退出,然后重启phpfpm:

service php-fpm restart

然后再访问,发现已经能够显示出错误信息了:

Warning: require(): open_basedir restriction in effect. File(/home/zhang/Data/project/test/vendor/autoload.php) is not within the allowed path(s): (/home/zhang/Data/project/test/public/:/tmp/:/proc/) in /home/zhang/Data/project/test/public/index.php on line 24

Warning: require(/home/zhang/Data/project/test/vendor/autoload.php): failed to open stream: Operation not permitted in /home/zhang/Data/project/test/public/index.php on line 24

Fatal error: require(): Failed opening required '/home/zhang/Data/project/test/public/../vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/zhang/Data/project/test/public/index.php on line 24

这里再说明下:或许你看到的报错信息,不是这样的,如果是类似的报错信息:

  [Symfony\Component\Process\Exception\RuntimeException]                                   

  The Process class relies on proc_open, which is not available on your PHP installation.

那就是proc_open 函数报错,这是因为在新版php中禁用了,在php.ini中设置一下即可(记得重启php-fpm)。

ok ,下面就着手解决刚刚报错的问题:

报require(): open_basedir restriction in effect.的错,是因为要打开的目录不在php操作范围内,配置一下就好。这里直接告诉在哪里配置就Ok 了。

在nginx 配置目录中,有个 fastcgi.conf的配置文件,如果不知道该文件在哪里,可以使用

   locate fastcgi.conf

在 fastcgi_param PHP_ADMIN_VALUE 这里添加相应的目录即可,我这里暴力了点(直接添加了home)。

说明下:这里是解决问题的关键,我曾在网上寻找答案,看到很多人说的,在php的 open_basedir  中设置,然鹅这是不正确的,因为我试了好半天都没有成功,最最最关键的是open_basedir这个配置项,php默认是关闭的,最后无奈又重新建了一个项目,发现报错信息类似,只是open_basedir 目录不一样,当时就在思考,肯定是要配置nginx 而非php,后来就发现了fastcgi.conf(当然这个解决方案在lnmp.org中也有提到,只是之前没发现)。
 

然后呢,重启ngignx 

nginx -s reload    

再次在浏览器中访问下:

可以发现,报错信息变成了权限不允许,权限问题嘛,好解决,直接加权限即可。

chmod o+w logs

   至此,大功告成! 

   然鹅,革命尚未成功!如果你配置了路由,但访问时出现,404 Not Found,那么恭喜你,你遇到了和我一样的问题,但你不需要必应(我用必应多于百度)了,嘿嘿,这里给出解决方案(如果没遇到这个问题,下面的内容可以跳过)!

     在laravel (链接:https://laravel.com/docs/5.0/installation#pretty-urls)文档中有如下内容: 

     location / {
              try_files $uri $uri/ /index.php?$query_string;
     } 

  将此复制到www.lt.com.conf 文件中,并将原来的内容注释掉,即可!

  locate www.lt.com.conf    //定位www.lt.com.conf 的命令

注:www.lt.com.conf 是我们之前添加的虚拟站点名称的配置文件。

然后,再次nginx -s relaod,再次访问即可ok!

猜你喜欢

转载自blog.csdn.net/zhang_referee/article/details/82915367
今日推荐