75142913在线留言
【Laravel实战】APP上线部署流程及设置与优化等_PHP技术_网络人

【Laravel实战】APP上线部署流程及设置与优化等

Kwok 发表于:2022-05-25 09:25:46 点击:121 评论: 0

通过Laravel开发的程序在本地测试通过了,后续将会在服务器上同步测试并上线,下面是我的上线部署过程。

一、安装服务器环境

通过 阿里云 的ECS服务器来测试,因为快到618了,所以我就按量付费,并且只是一个线上测试版,所以临时用一下很方便,考虑到Laravel 9 使用了PHP8,我就直接买了一台 2核 2G的ECS,0.13元/小时,流量 0.8元/G (本身帐户里有足够用的流量包,所以流量基本不考虑成本)。

1、安装LNMP基本环境

我使用的是 https://lnmp.org/install.html 用了多年,还算稳定,对于命令与配置不熟悉的小伙伴,可以考虑使用宝塔。

a.Nginx 默认自动安装最新的稳定版。

b.数据库 MySQL 8.x 考虑到要使用一些数据库的新特性,新版本能满足我。

c.PHP 8.x Laravel指定要求。

d.Install Jemalloc 内存管理扩展(有一定的优化效果)

2、推荐扩展

除了上面的基本环境环境安装,我还使用了PHP加速与Redis缓存方案,安装方法如下:

a.开启opcache

./addons.sh install opcache

b.安装Redis

./addons.sh install redis 

上面命令需要在LNMP相关目录下运行。

二、通过命令配置网站

LNMP提供了增加网站的命令:

lnmp vhost add 

根据提示一步一步操作就可以了,但我更喜欢手动配置网站,因为我不喜欢上面命令生成的user.ini 文件,需要通过下面的方式 才能删除:

1、先取消锁定才能修改与删除

chattr -i /网站目录/.user.ini

2、重新锁定保护

chattr +i /网站目录/.user.ini

3、删除保护文件

rm -f /网站目录/.user.ini

4、上传网站并给予权限

chown www:www -R /网站目录 

三、手动配置网站

手动配置可以更好的理解Nginx的运行与配置机制,在出现问题的时候我们可以更快的排除。在配置之前我们需要了解安装后配置文件的功能与所在位置: 

LNMP配置文件存放目录:/usr/local/nginx/conf 存放了我们需要配置的相关文件目录。

LNMP默认网站配置文件:/usr/local/nginx/conf/nginx.conf 这是主要配置文件,一般情况下我们不需要修改。

LNMP虚拟主机目录:/usr/local/nginx/conf/vhost 我们需要在此目录下增加配置文件,因为上面的nginx.conf有一句:include vhost/*.conf;

LNMP伪静态目录:/usr/local/nginx/conf/rewrite 存放了一些常见程序例子,我们可以直接引用。

LNMP证书目录:/usr/local/nginx/conf/ssl 我们的证书统一放到此目录下,方便管理。

LNMP配置案例:/usr/local/nginx/conf/example 一些配置的例子,如果你对Nginx手动配置非常熟悉可以删除此目录(可以打开依次阅读一下,可以学到一些不错的参数)。

了解了LNMP配置相关信息后,下面我们开始手动来配置一个支持Laravel运行的虚拟主机,并支持加密SSL与开启HTTP2等。

1、增加虚拟主机

如果你已通过上面的命令增加了虚拟主机,可以通过 /usr/local/nginx/conf/vhost 找到以域名命名的相关文档。还未使用命令增加主机的情况下,我们先通过SFTP连接到服务器,打开 /usr/local/nginx/conf/example 目录,下载一份 enable-ssl-example.conf 以你的域名重新命名,如:meishiq.com.conf 并通过专业的编辑软件打开,如VSCODE,写入下面的内容:

server
        {
        listen 80;#监听80端口(http)
        if ($ssl_protocol = ""){ return 301 https://$host$request_uri; }#301 重定向到HTTPS
        if ($host == meishiq.com) {return 301 $scheme://www.meishiq.com$request_uri;}#301 重定向到www域名下
        listen 443 ssl http2;#监听 443端口(https)并开启 HTTP2
        #listen [::]:443 ssl http2; #监听IPV6
        server_name     meishiq.com www.meishiq.com m.meishiq.com;#绑定的域名
        index index.php;#索引文件
        root  /home/wwwroot/meishiq.com/public;#绑定在public目录

        ssl_certificate ssl/meishiq.com.crt;#证书路径
        ssl_certificate_key ssl/meishiq.com.key;#证书key路径
        ssl_session_timeout 10m;#客户端连接可以复用的有效时间
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;#证书支持的版本
        ssl_prefer_server_ciphers on;#开启服务端根据证书支持选择加密版本(支持TLSv1 TLSv1.1老版本)
        ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
		ssl_buffer_size 1400;#缓冲大小
		add_header Strict-Transport-Security max-age=15768000;#增加http头
		ssl_stapling on;#启用 OCSP(实时查询单个证书的合法性)
		ssl_stapling_verify on;#确认
        ssl_session_cache builtin:1000 shared:SSL:10m;#缓存时间设置
        add_header X-Frame-Options "SAMEORIGIN";#同域名页面的 frame 中嵌套。
        add_header X-Content-Type-Options "nosniff";#检查 js、css的 MIME 类型(不符合将阻止)
        charset utf-8;#编码
        include enable-php.conf;#开启PHP
        #使Laravel路由生效
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        error_page 404 500 501 502 503 504 /index.php;#指定错误页
        #配置图片缓存为30天
        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }
         #配置js、css 缓存为12小时
        location ~ .*.(js|css)?$
        {
            expires      12h;
        }
        #关闭favicon.ico 日志与错误页
        location = /favicon.ico {
            access_log off; 
            log_not_found off;
         }
        #关闭robots.txt 日志与错误页
        location = /robots.txt { 
            access_log off; 
            log_not_found off;
         }
        access_log  off;#关闭所有日志记录如要开启需要指定日志存放路径
}

需要根据情况与注释,将上面的相关域名信息、证书路径等,修改为你自己的,并去申请证书,放到对应的目录后,执行下面的命令以重启Nginx服务:

/etc/init.d/nginx restart

或者重启LNMP服务:

lnmp restart

现在正常情况下输入你的域名,就可以访问网站了,如果发生错误,或者网站为空白,可以通过下方面排查:

a、检查 user.ini 与 防止跨站设置:

/usr/local/nginx/conf/fastcgi.conf 里面的fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 在该行行前添加 # 或删除改行,需要重启nginx。 

b、检查 是否目录有相关www的权限,可以通过命令设置:

chown www:www -R /home/wwwroot/meishiq.com

c、检查Laravel的配置,并查看相关的日志记录。

四、Laravel 上线后要做的优化工作

布置好服务器环境与上传了Laravel程序后,我们还需要做一些优化的收尾工作;

1、设置线上模式:

将 config/app.php 里的 APP_DEBUG 项设置为false,可以直接改,也可以在.env文章里修改。

2、优化自动加载:

composer install --optimize-autoloader --no-dev

出现错误:The Process class relies on proc_open, which is not available on your PHP installation.     

出现错误:Fatal error: Uncaught Error: Call to undefined function SymfonyComponentProcessproc_get_status() in phar:///usr/local/bin/composer/vendor/symfony/process/Process.php:1345

这是因为 proc_open与proc_get_status这两个函数不太安全,在php.ini里被禁用了。打开你的php.ini文件,搜索:disable_functions 并找到这2个函数。删除后重启php即可。

3、优化配置加载:

在config目录下可以看到各种配置文件,我们可以通过下面的命令将这些文件合并在一起以减少磁盘IO:

php artisan config:cache

4、优化路由加载

同上,将路由合并为一个文件:

php artisan route:cache

5、预编译模板

php artisan view:cache

6、创建连接符号

在Laravel里,我们默认将上传的文件存放到了:/meishiq.com/storage/app/public 目录下,因为不是 直接在:/meishiq.com/public 目录,我们通过网址是不能访问到附件里的文件的,在类Linux下,我们可以通过命令创建一个连接符号(类似Windows的快捷方式),所有Laravel提供了这个命令:

php artisan storage:link

可以快速的创建一个 https://www.meishiq.com/storage/ok.png 连接符号到我们的附件目录,而且这个文件也可支持重命名的哦!

运行命令如果报错:Call to undefined function IlluminateFilesystemsymlink()  请在php.ini里删除symlink禁用函数(上面有介绍)。

除了上面推荐使用artisan 命令可创建连接符号以外,我们还可以使用Linux原生命令:

 ln -s /home/wwwroot/meishiq.com/storage/app/public /home/wwwroot/meishiq.com/public/storage

实现上面同样的效果。请将文件路径替换成自己实际情况~

 

除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/225
标签:上线部署Kwok最后编辑于:2022-06-07 10:07:55
0
感谢打赏!

《【Laravel实战】APP上线部署流程及设置与优化等》的网友评论(0)

本站推荐阅读

热门点击文章