监控系统实践第11天:配置Laravel8.5与开关网站方法

Posted 家铭didphp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监控系统实践第11天:配置Laravel8.5与开关网站方法相关的知识,希望对你有一定的参考价值。

监控系统实践第11天:配置Laravel8.5与开关网站方法

昨天部署了Laravel8.5的站点,可以正常访问了。

今天来稍微细说一下配置与维护的方法,相当于是对昨天的一个补充了。

如果不知道怎么使用Composer下载Laravel,记住今天的内容就够了。


补充强调Laravel的安装方法

之前是用Composer下载了Laravel 8.5的最新版本,当时知道最新版本是8.5.18,使用的命令是:

composer create-project --prefer-dist laravel/laravel=8.5.18

这个命令指定了版本,执行后,会在当前的文件夹内创建一个名为laravel的文件夹,同时会把Laravel 8.5.18的文件放进去。

有一点一定要注意,官方说通过Composer下载的Laravel框架文件,是有.env这个文件的,实际是没有的!


如果说我现在不知道最新的版本号,但是我就是想要最新版本,而且就要在之前的文件夹里下载,不想影响到之前创建的laravel文件夹,怎么操作呢?

这样操作:composer create-project laravel/laravel 文件夹名称 ,即原先的--prefer-dist laravel/laravel=8.5.18修改为laravel,最后面加上你想要的文件夹名称。

比如我现在不知道最新版本号是什么,我想把文件夹名称定为laravel_last,我输入这个即可:

composer create-project laravel/laravel laravel_last

记住,使用Composer下载的Laravel,是没有.env的,一样要去Laravelgithub上下载这个文件,文件地址为:https://raw.githubusercontent.com/laravel/laravel/8.x/.env.example

Linux 下使用 wget 软件下载这个:

wget https://raw.githubusercontent.com/laravel/laravel/8.x/.env.example

Windows 下直接浏览器打开这个网址,另存为文件就行。

下载完.env文件后,将其放到Laravel框架的根目录即可。


完整的配置Laravel框架

还记得昨天提到的需要修改Laravel文件权限的方法,才能让Laravel正常运行的方法吗?

记得的,你的记性真好!不记得,你最好不要翻回去看了,记不住最好了!

为什么这么说呢?因为昨天只是用宝塔进行了一个粗略的配置,下面要详细的介绍完整的配置方法了,而且是不用宝塔的。


现在来操作一把。

我的Laravel文件所在目录:/www/wwwroot/laravel.didphp.com

第一步,处理文件夹storage

我要确保框架的根目录下存在文件夹storage, 这个文件夹是存放框架产生的日志缓存文件的。

它与它的子文件夹非常重要,如果缺少,框架也是运行不起来的,会直接报错。

检查一下它与它的子文件夹是不是这样的层级关系,如果缺少,自建文件夹补上:

/app
/app/public
/framework
/framework/cache
/framework/cache/data
/framework/sessions
/framework/testing
/framework/views
/logs
  1. 因为之前从公司的 git 上拉下来的,习惯性的忽略了有日志的目录,缺少了这些文件夹,现在补上:
cd /www/wwwroot/laravel.didphp.com/
cd storage/
mkdir ./app
mkdir ./app/public
mkdir ./framework
mkdir ./framework/cache
mkdir ./framework/cache/data
mkdir ./framework/sessions
mkdir ./framework/testing
mkdir ./framework/views
mkdir ./logs

在这里插入图片描述


第二步,确保文件夹权限用户组是否为www,同时是否存在读写权限

整个网站目录,及网站目录下的子目录、子文件的权限,一定得属于用户组www下的用户www的。

为什么不是别的用户组和别的用户?因为宝塔会自动创建一个名为www的用户组,然后再创建一个名为www的用户,专门用来处理web服务的。

设置网站目录及其子目录、子文件为www:www权限:

chown -R www:www /www/wwwroot/laravel.didphp.com

执行后返回:

chown: changing ownership of ‘/www/wwwroot/laravel.didphp.com/public/.user.ini’: Operation not permitted

在这里插入图片描述
发现并不是很顺利,有个文件阻碍了它的顺利操作,这个文件是在用宝塔添加网站时,宝塔自动创建的文件:.user.ini

这个问题也不是很大,只是文件被锁定了而已,解锁就行:

chattr -i /www/wwwroot/laravel.didphp.com/public/.user.ini

解完锁,再来重新设置用户组权限:

chown -R www:www /www/wwwroot/laravel.didphp.com

在这里插入图片描述
刚才.user.ini被锁定,为了设置用户组权限,就把它解锁了。

可能有人不知道这个文件为什么是锁定的,也不知道解锁后有没有什么影响,不确定是不是要锁回去。

这个时候不要慌,不要急着给它锁回去,因为还需要给文件夹设置读写权限,这个时候锁回去了,等下又得再解锁。

刚才操作完了用户组权限,现在来继续来操作读写权限。

我这里先给网站目录及其子目录、子文件一个755的权限:

chmod -R 755 /www/wwwroot/laravel.didphp.com/

再来给存放日志缓存文件的目录storage以及它的各个子文件夹一个777权限,不然到时候文件写不进去,影响网站运行:

chmod -R 777 /www/wwwroot/laravel.didphp.com/storage/

实际上,还有一个文件和一个文件夹是需要给权限的,只是通常它们都是有权限的,所以官网文档里没有特意的提到,这里我提出来,只是预防偶然发生的文件没权限的问题发生。

它们就是根目录下的文件.env以及文件夹config

有时候,单纯的使用Laravel框架自带的命令,或者第三方类库的命令会有文件读写涉及到这两个地方,为了以防万一,也要给它们权限:

chmod -R 777 /www/wwwroot/laravel.didphp.com/.env
chmod -R 777 /www/wwwroot/laravel.didphp.com/config/

最后我们把一开始影响设置权限的.user.ini锁回去:

chattr +i /www/wwwroot/laravel.didphp.com/public/.user.ini

在这里插入图片描述
好了,到这里就把文件的权限都设置了,看看最终的文件权限效果图:
在这里插入图片描述


第三步,生成Laravel框架密钥
Laravel框架为了有更高的安全性,会要求用户生成一个密钥,如果密钥为空,网站是不能运行的。

这个密钥要执行的前提是,根目录的.env必须有可写的权限。

事先已经给.env赋予过777的完全读写权限,所以这里不用担心,直接到框架的根目录,执行生成密钥的命令即可:

php artisan key:generate

当出现Application key set successfully.时,代表生成成功。
在这里插入图片描述


第四步:通过宝塔运行网站
不管你的Laravel文件放在哪里,不管你用什么域名,也不管你是用nginx还是Apache,要跑Laravel,运行目录一定要指向框架根目录下的文件夹:public
在这里插入图片描述


如果你用的是 Nginx,网站配置文件的server {}段中,有一段

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

比如我的就是Nginx配置文件就是

server
{
    listen 80;
    server_name laravel.didphp.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/laravel.didphp.com/public;
    
    location / {  
	    try_files $uri $uri/ /index.php$is_args$query_string;  
    }  
    
    #禁止访问的文件或目录
    location ~ ^/(\\.user.ini|\\.htaccess|\\.git|\\.svn|\\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \\.well-known{
        allow all;
    }
    
    location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    
    location ~ .*\\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
    access_log  /www/wwwlogs/laravel.didphp.com.log;
    error_log  /www/wwwlogs/laravel.didphp.com.error.log;
}

如果你用的是 Apache,在运行目录public下新建一个.htaccess文件,内容填这些就可以了:

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

其它的配置
还有一些其它的配置,比如时区、开发模式等,今天就不一一讲解了,因为这些跟Laravel的命令:php artisan config:cache以及方法env()config()存在一些关系,如果一开始就讲了,容易误导人。


开关网站的方法

所谓开关网站,无非就是开启与关闭网站。

官网文档叫这个为维护模式,开启维护模式就是开启网站,关闭维护模式就是关闭网站的意思。

不是我故意叫得这么高端,是中文社区的文档是这么翻译的。

开启维护模式后,使用框架编写的web端将不可访问,cli脚本不受影响。


开启维护模式,也就是关闭网站的命令是:

php artisan down

执行成功后,返回内容:Application is now in maintenance mode.
在这里插入图片描述
同时网站返回HTTP 503的错误页面
在这里插入图片描述
关闭网站后,用户无法正常访问网站,这个时候可以做一些维护之类的工作了。


关闭启维护模式,也就是开启网站的命令是:

php artisan up

执行成功后,返回内容:Application is now live.在这里插入图片描述


记得开启与关闭维护模式的命令,都需要到框架根目录下执行。
在这里插入图片描述


最后小结

如果全部按今天这个操作,整个Laravel框架是可以完美运行的。

还有最后的维护模式实际不止那些。比如我不想返回503也是可以的,维护模式是可以指定返回的HTTP状态码的。

比如我想返回404

php artisan down --status=404

实际也不止这些,除了可以返回指定的状态码,还可以跳转到指定的URL上,指定的页面上,碍于时间关系,这里就不一一列举了。

以上的阐述只对有基础的朋友有作用,如果对以上的知识点有质疑或者不懂的可以在下方留言。

以上是关于监控系统实践第11天:配置Laravel8.5与开关网站方法的主要内容,如果未能解决你的问题,请参考以下文章

监控系统实践第10天:用宝塔部署Laravel8.5框架的站点

监控系统实践第9天:使用Composer下载Laravel8.5

监控系统实践第15天:5天上手Laravel8.5之HTTP请求篇(4/5)

监控系统实践第15天:5天上手Laravel8.5之HTTP请求篇(4/5)

监控系统实践第13天:5天上手Laravel8.5之中间件篇(2/5)

监控系统实践第14天:5天上手Laravel8.5之控制器篇(3/5)