LNMP平台搭建与应用 #yyds干货盘点#

Posted 江晓龙的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP平台搭建与应用 #yyds干货盘点#相关的知识,希望对你有一定的参考价值。

LNMP平台搭建与应用

1.LNMP架构概述

  • LNMP就是Linux+nginx+mysql+php,Linux作为服务器的操作系统、Nginx作为web服务器、PHP作为解析动态脚本语言、MySQL即为数据库
    • Linux作为服务器的操作系统
    • Nginx作为WebServer服务器
    • PHP作为动态解析服务,也不只是php还有python、perl
    • MySQL作为后端存储数据库服务
  • Nginx服务本身不能处理PHP请求,那么当用户发起PHP动态请求,PHP是这样处理的
    • 用户--->http协议--->nginx--->fastcgi协议--->php-fpm
    • 注意fastcgi是nginx连接php-fpm之间的协议
  • Nginx解析php的方法
    • 1.将PHP页面的解析请求通过代理方式转发给Apache进行处理
    • 将PHP页面的解析请求转发给php-fpm模块

1.1.LNMP架构图

图文解释:
客户端使用浏览器访问某页面,通过http协议请求到对应的web服务器,web服务器是Nginx,如果客户端请求的静态页面比如html,Nginx会自己处理然后将对应的页面内容发送给客户端

如果客户端请求的是动态页面例如PHP,因为网页大部分都是php写的,Nginx会把请求通过fastcgi协议转交给php进行处理,php会把解析的页面进行分析,如果页面信息包含数据库数据,php会与mysql建立tcp三次握手获取数据,数据获取后再转交给fastcgi协议,fastcgi协议再转交给Nginx服务,Nginx再通过http协议将页面呈现在浏览器上

1.2.Nginx与Fast_CGI详细工作流程

1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断会通过定义的location完成,例如图片、文件会去找ftp服务,php会去找php-fpm
3.判断用户请求的是否是静态页面,如果是静态页面Nginx会直接处理
4.判断用户请求的是否是动态页面,如果是动态页面,Nginx会将该请求交给fastcgi协议进行下发
5.fastcgi会将请求交给php-fpm管理进程,php-fpm管理进程接收到后调用具体的工作线程wrapper,类似于工单,每当工作来临时,php-fpm就会进行分配
6.wapper线程会调用php进行解析,如果只是解析代码,PHP解析完会自动返回
7.如果有查询数据库操作,则由php连接数据库(通过用户、密码、IP)进行连接然后发起查询操作
8.最终数据由mysql--->php--->php-fpm--->fastcgi--->nginx--->http--->user

2.安装LNMP架构

2.1.安装Nginx

使用官方提供的rpm包
[root@localhost ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx
baseurl=http://nginx.org/packages/centos/7/$basearch
enabled=1
gpgcheck=0

yum安装
[root@localhost ~]# yum -y install nginx

启动
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

扩展
1.仅下载rpm包不进行安装,如果想安装并下载那么就把--downloadonly去掉
[root@localhost ~]# yum -y install nginx --downloadonly --downloaddir=/soft
在使用rpm安装,可以留着等下次做实例的时候用
[root@localhost soft]# rpm -ivh nginx-1.16.1-1.el7.ngx.x86_64.rpm   

2.我们在官网系在了nginx的rpm包可能会存在依赖关系
[root@localhost ~]# yum -y localinstall nginx-1.16.1-1.el7.ngx.x86_64.rpm

2.2.安装MySQL

  • mysql有两个版本可以选择一个5.6一个是5.7我们都来做一遍
  • mysql所有功能都是修改配置文件实现的

2.2.1.安装MySQL5.7

1.下载MySQL官方扩展源
[root@localhost ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
也可以使用wget下载下来方便以后使用
[root@localhost ~]# wgt http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm

2.安装完mysqlrpm后会在/etc/yum.repos.d中生成两个文件
root@localhost ~]# ls /etc/yum.repos.d/my*
/etc/yum.repos.d/mysql-community.repo  /etc/yum.repos.d/mysql-community-source.repo

3.安装mysql5.7
把mysql5.7包下载下来,然后方便下次使用
首先配置yum,开启缓存,不然安装好后就会自动删除
[root@localhost conf.d]# vim /etc/yum.conf
keepcache=1

[root@localhost ~]# yum install mysql-community-server --downloaddir=/root/soft/ --downloadonly
在使用localinstall安装(也可以用rpm直接装)
[root@localhost soft]# yum -y localinstall mysql-community-server-5.7.29-1.el7.x86_64.rpm

4.启动
[root@localhost soft]# systemctl start mysqld
[root@localhost soft]# systemctl enable mysqld

5.由于mysql5.7默认配置了密码,需要在日志中过滤temporary password获取默认密码
[root@localhost soft]# grep  "temporary password" /var/log/mysqld.log 
2020-04-10T04:01:09.027390Z 1 [Note] A temporary password is generated for root@localhost: *2cNf4-Gh:oe

6.登录
[root@localhost ~]# mysql -u root -p*2cNf4-Gh:oe
[root@localhost ~]# mysql -uroot -p$(awk /temporary password/print $NF /var/log/mysqld.log) 

7.修改密码,密码必须是8位以上包含数字大小写字母
mysql> alter user root@localhost identified by 1234.COm;

2.2.2.安装MySQL5.6

1.下载MySQL官方扩展源
[root@localhost ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.6-community/el/7/x86_64/mysql-community-release-el7-5.noarch.rpm

2.安装完mysqlrpm后会在/etc/yum.repos.d中生成两个文件
root@localhost ~]# ls /etc/yum.repos.d/my*
/etc/yum.repos.d/mysql-community.repo  /etc/yum.repos.d/mysql-community-source.repo

3.安装mysql5.6
把mysql5.6包下载下来,然后方便下次使用(有条件的可以直接yum装)
首先配置yum,开启缓存,不然安装好后就会自动删除
[root@localhost conf.d]# vim /etc/yum.conf
keepcache=1

[root@localhost ~]# yum install mysql-community-server --downloaddir=/root/soft/ --downloadonly

[root@localhost ~]# ls soft/
mysql-community-client-5.6.47-2.el7.x86_64.rpm  mysql-community-libs-5.6.47-2.el7.x86_64.rpm    mysql-community-common-5.6.47-2.el7.x86_64.rpm  mysql-community-server-5.6.47-2.el7.x86_64.rpm

在使用localinstall安装
[root@localhost soft]# yum -y localinstall *.rpm
或者
[root@localhost soft]# yum -y localinstall mysql-community-server-5.7.29-1.el7.x86_64.rpm

如果网速不好则用rpm安装,安装顺序如下
[root@localhost soft]# rpm -ivh mysql-community-common-5.6.47-2.el7.x86_64.rpm
[root@localhost soft]# rpm -ivh mysql-community-libs-5.6.47-2.el7.x86_64.rpm
[root@localhost soft]# rpm -ivh mysql-community-client-5.6.47-2.el7.x86_64.rpm
[root@localhost soft]# rpm -ivh mysql-community-server-5.6.47-2.el7.x86_64.rpm

4.启动
[root@localhost soft]# systemctl start mysqld
[root@localhost soft]# systemctl enable mysqld

5.登录
[root@localhost ~]# mysql

6.修改密码
[root@localhost ~]# mysqladmin -u root password 123
Warning: Using a password on the command line interface can be insecure.    //这个提示表示密码太短
如果想改密码可以这样操作
[root@localhost ~]# mysqladmin -u root -p123 password 1234
上条没有没有加-p表示mysql没有密码因为是首次安装
下面这条加了-p表示指定之前的密码

7.其他服务器远程连接mysql
首先在mysql服务器执行:
mysql> grant all privileges on *.* to root@% identified by 123 with grant option;
mysql> flush privileges;

远程主机
mysql -uroot -p123 -h 192.168.81.210

2.3.安装PHP

  • 使用第三方扩展源安装php7.1
1.删除之前系统安装的php
[root@localhost php]# yum remove php-mysql-5.4 php php-fpm php-common

2.安装扩展源
[root@localhost php]# wget http://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[root@localhost php]# yum -y localinstall webtatic-release.rpm

3.安装php7.1
如果https访问不到那么久在安装之前把/etc/yum.repos.d/webtatic.repo,把里面的https改成http,例如:mirrorlist=http://mirror.webtatic.com/yum/el7/SRPMS/mirrorlist
把rpm包下载到指定目录,方便下次使用,共计25个包
首先配置yum,开启缓存,不然安装好后就会自动删除
[root@localhost conf.d]# vim /etc/yum.conf
keepcache=1

[root@localhost soft]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb --downloaddir=/root/soft/ --downloadonly
[root@localhost soft]# yum -y localinstall *.rpm

4.启动
[root@localhost soft]# systemctl start php-fpm
[root@localhost soft]# systemctl enable php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

5.查看端口,到此完成
[root@localhost soft]# ss -lnptu | grep nginx
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=7375,fd=12),("nginx",pid=7374,fd=12))
[root@localhost soft]# ss -lnptu | grep mysql
tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=20862,fd=10))
[root@localhost soft]# ss -lnptu | grep php
tcp    LISTEN     0      128    127.0.0.1:9000                  *:*                   users:(("php-fpm",pid=23602,fd=9),("php-fpm",pid=23601,fd=9),("php-fpm",pid=23600,fd=9),("php-fpm",pid=23599,fd=9),("php-fpm",pid=23598,fd=9),("php-fpm",pid=23595,fd=7))

没有网络的情况下,把所有的PHP的rpm包拷到服务器,执行php_install.sh即可

3.验证LNMP是否可用

3.1.Nginx解析php页面

  • 验证nginx是否能正常解析php动态请求,以及php程序是否正常连接数据库
  • 小技巧:location /中配置内容可以直接写在server中
1.配置server
[root@localhost conf.d]# vim php.conf
server 
        listen 80;
        server_name phptest.com;
        root /web/phptest;
        index index.php index.html;

        location ~ \\.php$ 
                root /web/phptest;
                fastcgi_pass 127.0.0.1:9000;            //fastcgi调用php-fpm
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;       //$document_root表示/etc/nginx也就是nginx安装目录
                include fastcgi_params;             //引入fastcgi脚本,这个include表示上级目录也可以写绝对路径

        


2.写入php页面
[root@localhost conf.d]# vim /web/phptest/index.php
<?php
    phpinfo();
?>

3.重载nginx
[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx

3.2.PHP连接MySQL

直接在站点目录下面写一个php文件即可,不需要重载
[root@bogon phptest]# vim mysqltest.php
<?php 
    $servername = "localhost";
    $username = "root";
    $password = "123";

    //创建链接
    $conn = mysqli_connect($servername, $username, $password);

    //检测连接
    if (!$conn) 
        die("Connection failed: " . mysqli_connect_error());
    
    echo "连接成功"

?>

3.3.扩展方式加主机头访问

  • 不写全网站根目录即可
server 
        listen 80;
        server_name php.com;

        location / 
                root /web;
                index index.php;
        

        location ~ \\.php$ 
                root /web;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        

4.部署WordPress博客站点

4.1.配置WordPress站点

[root@localhost conf.d]# vim wordpress.conf
#wordpress
server 
        listen 80;
        server_name jiangxl.wordpress.com;

        location / 
                root /web/wordpress;
                index index.php index.html;
        

        location ~ \\.php$ 
                root /web/wordpress;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILRNAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        


[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx

4.2.部署WordPress源码

wget https://cn.wordpress.org/wordpress-4.9.4-zh——CN.tar.gz

由于网站登录失败,因此我从第三方下载了wordpress-5.2.3-zh_CN.zip,上传到/web目录
解包
[root@bogon web]# mkdir /web
[root@bogon web]# cd /web
[root@bogon web]# unzip wordpress-5.2.3-zh_CN.zip
  • 到此WordPress站点可以访问到安装界面

4.3.配置MySQL

  • wordpress会用到后台数据库,因为博客肯定是需要上传文章附件等等,不配置数据库页面显示如下

  • 需要手动创建数据库,开始配置mysql
[root@localhost conf.d]# mysql -uroot -p123
mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> exit

4.4.配置网站属主

  • 默认nginx的所属用户时nginx,nginx用户对/web/wordpress没有写入权限,因此会无法生成wp-config.php文件,因此我们需要修改网站属主

  • nginx也要修改程序用户,让通过nginx访问页面的用户具有写权限
  • 同样php-fpm也要修改程序用户,让通过访问php页面的用户具有写权限
  • 小技巧,搞架构记得程序所属用户设置成一样的,开始配置
[root@localhost conf.d]# groupadd -g 888 www
[root@localhost conf.d]# useradd -u 888 -g 888 www
[root@localhost conf.d]# chown -R www.www /web/wordpress

修改nginx所属用户
[root@localhost conf.d]# sed -ri /^user/c user www; ../nginx.conf
重载让日志生效
[root@localhost conf.d]# systemctl reload nginx

修改php-fpm所属用户
www.conf是他的模板文件,主配置文件是php-fpm.conf、php.ini
[root@localhost conf.d]# sed -ri /^user/c user = www /etc/php-fpm.d/www.conf
[root@localhost conf.d]# sed -ri /^group/c group = www /etc/php-fpm.d/www.conf
重启让日志生效
[root@localhost conf.d]# systemctl restart php-fpm

4.5.页面安装

4.5.1.开始安装

4.5.2.填写数据库信息

4.5.3.确认安装

  • 这一步就生成了wp-config.php文件


4.5.4.配置后台

4.5.5.安装完成

5.部署wecenter知乎系统

5.1.配置wecenter站点

[root@localhost conf.d]# vim wecenter.conf
#wecenter
server 
        listen 80;
        server_name jxl.wecenter.com;
        root /web/wecenter;
        index index.php index.html;

        location ~ \\.php$ 
        root /web/wecenter;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        



[root@localhost conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost conf.d]# systemctl reload nginx

5.2.部署wecenter源码

[root@jxl web]# unzip -d wecenter WeCenter_3-3-4.zip
[root@jxl web]# chown -R www:www /web/

5.3.配置数据库

创建wecenter数据库就行
[root@localhost web]# mysql -uroot -p123
mysql> create database wecenter;
Query OK, 1 row affected (0.00 sec)

mysql> exit
Bye

5.4.页面安装

5.4.1.服务器环境检测

6.4.2.配置数据库

6.4.3.添加后台管理员

6.4.4.安装完成

6.4.5.网站首页

6.4.6.登录后台

点击登录按钮

以上是关于LNMP平台搭建与应用 #yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章

⭐万字长篇超详细的图解Tomcat中间件方方面面储备知识⭐ #yyds干货盘点#

#yyds干货盘点# 基于STM32+ESP8266+华为云IoT设计的智能门锁

#yyds干货盘点#Vite开发环境搭建

#yyds干货盘点#小谈C#异常

#yyds干货盘点#Hystrix

#yyds干货盘点#iOS 15 中的前端开发快捷方式