Laravel项目部署到线上需要注意的问题

发布时间 - 2021-02-23 00:00:00    点击率:

下面由Laravel教程栏目给大家介绍Laravel项目部署到线上需要注意的问题  ,希望对需要的朋友有所帮助!

准备部署 laravel 应用到生产环境时,却出现了以下一些问题,你在本地上基本不会出现问题,但是到线上很多问题都出来了。整理了一些问题与bug,希望在你部署laravel项目的时候,如果出现类似问题,可以用得到吧! 部署不出现任何问题,那就再再好不过了。

首先,我们再做调试的时候,请先开启php显示错误,以便做调试

vim /usr/local/php/etc/php.ini
修改
display_errors = Off
改为
display_errors = On

改完后记得要重启服务器。

1 目录权限问题

为了运行 Laravel,我们需要为一些项目目录配置权限.

Laravel 项目需要对目录 storage/, bootstrap/cache,  赋予读写权限

//赋予三个目录读写权限chmod -R 777 bootstrap/chmod -R 777 storage/

如果你用的是一键安装包lnmp,请注意,LNMP 一键安装包中含有.user.ini,权限会被拒绝。

需使用:

chattr -i /{目录}/.user.ini

并删除:

rm .user.ini


2 Nginx的配置文件的问题

假设你的nginx.conf文件的路径是放在这里:/usr/local/nginx/conf/nginx.conf文件,找到 server{}字段中

如下代码

#include enable-php.conf;

你的nginx里存不存在这个文件,请注释,因为这个会导致500错误。原因是:

引入了 php 配置,其中有句 try_files 开启就有报错.

#新增 支持laravel 优雅链接,在laravel 文档里有说明
location / {
    try_files $uri $uri/ /index.php?$query_string;}#新增 支持php 的配置
location ~ \.php$ {#不能有下面这句 try_files ,不然报错500# try_files $uri /index.php =404;fastcgi_split_path_info ^(.+\.php)(/.+)$;#这句注意 后面是.sock 不是127.0.0..1fastcgi_pass  unix:/tmp/php-cgi.sock;fastcgi_index index.php;include fastcgi_params;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}

附件:给一个laravel的nginx配置

server{
    listen 80;
    server_name 网站域名;
    index index.php index.html index.htm default.html default.htm default.php;
    root  /var/www/html/act/public;   //网站存放目录,laravel的入口文件在public里

    #include rewrite/none.conf;
    #error_page   404   /404.html;

    # Deny access to PHP files in specific directory
    #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

    #include enable-php-pathinfo.conf;
    #添加以下这句就好了
    location / {
       try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

    location ~ \.php$ {
         root /var/www/html/act/public;
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
    }#    if (!-e $request_filename){#         rewrite ^/(mo_bile|admin|physician|home|seller)/(.*)$ /$1/index.php?$2;#    }

    location ~ \.php$ {
          fastcgi_param PATH_INFO $request_uri;
    }


    access_log  /home/wwwlogs/hd.log;}


3 PHP扩展要记得开启

部署项目之前要先确保php.ini里的扩展已经开启,开启的扩展有:php_fileinfo, php_mbstring, php_openssl,这几个都是laravel需要的。

不管是修改了nginx还是php.ini,修改完后,请记得要重启nginx与php-fpm。

4 laravel项目在git上clone到线上可能会缺少一下核心库,开启php错误显示会看到类似以下的问题

Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/***/bootstrap/autoload.php) is not within the allowed path(s): (/home/wwwroot/***/public/:/tmp/:/proc/) in /home/wwwroot/***/public/index.php on line 22Warning: require(/home/wwwroot/***/bootstrap/autoload.php): failed to open stream: Operation 
not permitted in /home/wwwroot/***/public/index.php on line 22Fatal error: require(): Failed opening required 
'/home/wwwroot/***/public/../bootstrap/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/***/public/index.php on line 22

此时你需要composer 更新第三方 vendor 组件
在项目目录下执行composer update,请自行更新composer到最新版本。

如果在更新中出错,请网上查找相应的composer错误,这个很好解决的。

5 laravel从git上clone到线上目录出现app_key的错误的话的,请在.env文件里加app_key。

//生成key,在项目根目录下执行命令来获取laravel项目app_key
php artisan key:generate
//或者可以修改配置文件.env中的APP_KEY参数
APP_KEY=base64:akjIOLlieujKw0yEUbwjJdP5lPWHkk3uw39CnAhfdasfsaddfggghssda+

6 laravel上传到线上出现The cipher and / or key length are invalid 的

这个问题很多都是读取.env的时候为null造成的。

首先你应该检查configapp.php里是否有存在keycipher的配置

'key'             => env('APP_KEY'),
'cipher'          => 'AES-256-CBC',

有存在也要查找.env里是否有app_key。有存在的话,请操作:

php artisan config:cache

因为是env失效,所以接下来你要做的是清除缓存,重新来过,重要的一步就是要重新启动nginx,php-fpm

7 Laravel 中 seeder 执行失败

  • 当第一次执行完 php artisan db:seed 后,增加新的 seeder 文件时执行会报错。错误信息如下 [ReflectionException] Class ***TableSeeder does not exist

  • 确保新的 seeder 文件和全局 database seeder 是在同一个 seeder 目录下了,仍然会出现这个问题的原因是: 我们需要清理下之前执行生成的 classmap 信息。

  • 在控制台中执行 composer dump-autoload,然后再执行 php artisan db:seed

部署到线上的经常会出现的,我遇到的就这么些问题,也许你会遇到更多的问题,或许你不会遇到问题。或许上面我遇到的问题能给予你一些帮助吧!


# laravel  # php  # composer  # nginx  # bootstrap  # NULL  # class  # Length  # git  # database  # bug  # 线上  # 的是  # 都是  # 报错  # 这句  # 这个问题  # 重启  # 完后  # 一键  # 里加 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  长沙做网站要多少钱,长沙国安网络怎么样?  jquery插件bootstrapValidator表单验证详解  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  SQL查询语句优化的实用方法总结  iOS验证手机号的正则表达式  如何在阿里云ECS服务器部署织梦CMS网站?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何实现文件上传和存储?(本地与S3配置)  Android okhttputils现在进度显示实例代码  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何为不同团队 ID 动态生成多个非值班状态按钮  在线教育网站制作平台,山西立德教育官网?  EditPlus中的正则表达式 实战(4)  如何在腾讯云服务器快速搭建个人网站?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  浅谈redis在项目中的应用  昵图网官方站入口 昵图网素材图库官网入口  Laravel怎么上传文件_Laravel图片上传及存储配置  ,怎么在广州志愿者网站注册?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  javascript中闭包概念与用法深入理解  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何快速搭建高效WAP手机网站?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何获取PHP WAP自助建站系统源码?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  如何基于PHP生成高效IDC网络公司建站源码?  高端企业智能建站程序:SEO优化与响应式模板定制开发  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何快速建站并高效导出源代码?  手机网站制作与建设方案,手机网站如何建设?  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何自定义分页视图?(Pagination示例)  如何快速生成橙子建站落地页链接?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  免费网站制作appp,免费制作app哪个平台好?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】