LNMP平台搭建与应用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: LNMP平台搭建与应用1.LNMP架构概述LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统、Nginx作为web服务器、PHP作为解析动态脚本语言、MySQL即为数据库Linux作为服务器的操作系统Nginx作为WebServer服务器PHP作为动态解析服务,也不只是php还有python、perlMySQL作为后端存储数据库服务Nginx服务本身不能处理PHP请求,那么当用户发起PHP动态请求,PHP是这样处理的用户—>http协议—>nginx—>fastcgi协议—>php-fpm

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架构图

image.png

图文解释:
客户端使用浏览器访问某页面,通过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详细工作流程image.png

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

image.png

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 "连接成功"
?>

image.png

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站点可以访问到安装界面image.png

4.3.配置MySQL

  • wordpress会用到后台数据库,因为博客肯定是需要上传文章附件等等,不配置数据库页面显示如下
    image.png
  • 需要手动创建数据库,开始配置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文件,因此我们需要修改网站属主image.png
  • 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.开始安装

image.png

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.服务器环境检测

image.png

6.4.2.配置数据库

6.4.3.添加后台管理员

6.4.4.安装完成

6.4.5.网站首页

6.4.6.登录后台

点击登录按钮

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
关系型数据库 应用服务中间件 nginx
Docker搭建LNMP运行Wordpress平台 上
Docker搭建LNMP运行Wordpress平台
186 0
|
关系型数据库 MySQL PHP
Docker搭建LNMP运行Wordpress平台 下
Docker搭建LNMP运行Wordpress平台
119 0
|
负载均衡 监控 关系型数据库
搭建LNMP平台实现负载均衡与高可用
搭建LNMP平台实现负载均衡与高可用
194 0
|
关系型数据库 MySQL 应用服务中间件
LNMP平台服务简介、部署及应用
LNMP平台服务简介、部署及应用
178 0
LNMP平台服务简介、部署及应用
|
存储 关系型数据库 MySQL
LNMP平台拆分
LNMP平台拆分 1.LNMP工作原理
190 0
LNMP平台拆分
|
应用服务中间件 PHP 数据库
|
关系型数据库 应用服务中间件 PHP
|
Web App开发 存储 关系型数据库
|
Web App开发 关系型数据库 应用服务中间件
|
关系型数据库 应用服务中间件 测试技术