通过Laravel开发的程序在本地测试通过了,后续将会在服务器上同步测试并上线,下面是我的上线部署过程。
通过 阿里云 的ECS服务器来测试,因为快到618了,所以我就按量付费,并且只是一个线上测试版,所以临时用一下很方便,考虑到Laravel 9 使用了PHP8,我就直接买了一台 2核 2G的ECS,0.13元/小时,流量 0.8元/G (本身帐户里有足够用的流量包,所以流量基本不考虑成本)。
我使用的是 https://lnmp.org/install.html 用了多年,还算稳定,对于命令与配置不熟悉的小伙伴,可以考虑使用宝塔。
a.Nginx 默认自动安装最新的稳定版。
b.数据库 MySQL 8.x 考虑到要使用一些数据库的新特性,新版本能满足我。
c.PHP 8.x Laravel指定要求。
d.Install Jemalloc 内存管理扩展(有一定的优化效果)
除了上面的基本环境环境安装,我还使用了PHP加速与Redis缓存方案,安装方法如下:
a.开启opcache
./addons.sh install opcache
b.安装Redis
./addons.sh install redis
上面命令需要在LNMP相关目录下运行。
LNMP提供了增加网站的命令:
lnmp vhost add
根据提示一步一步操作就可以了,但我更喜欢手动配置网站,因为我不喜欢上面命令生成的user.ini 文件,需要通过下面的方式 才能删除:
chattr -i /网站目录/.user.ini
chattr +i /网站目录/.user.ini
rm -f /网站目录/.user.ini
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等。
如果你已通过上面的命令增加了虚拟主机,可以通过 /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程序后,我们还需要做一些优化的收尾工作;
将 config/app.php 里的 APP_DEBUG 项设置为false,可以直接改,也可以在.env文章里修改。
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即可。
在config目录下可以看到各种配置文件,我们可以通过下面的命令将这些文件合并在一起以减少磁盘IO:
php artisan config:cache
同上,将路由合并为一个文件:
php artisan route:cache
php artisan view:cache
在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
《【Laravel实战】APP上线部署流程及设置与优化等》的网友评论(0)