成功最有效的方法就是向有经验的人学习!

LNMP网站架构

LNMP架构概述

LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统,Nginx作为Web服务器、PHP作为解析动态脚本语言、MySQL即为数据库。

Linux作为服务器的操作系统。
Nginx作为WebServer服务器。
PHP 作为动态解析服务(php)。
MySQL作为后端存储数据库服务。

Nginx服务本身不能处理PHP的请求,那么当用户发起PHP动态请求, Nginx又是如何进行处理的。
用户–>http协议–>Nginx–>fastcgi协议–>php-fpm
注意: fatcgi是nginx连接php-fpm之间的协议。

file

Nginx与Fast-CGI详细工作流程如下:

file

1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断是有Location进行完成
3.判断用户请求的是静态页面,Nginx直接进行处理
4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议下发
5.fastgi会将请求交给php-fpm管理进程, php-fpm管理进程接收到后会调用具体的工作线程warrap
6.warrap线程会调用php进行解析,如果只是解析代码php直接返回
7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)然后发起查询的操作
8.最终数据由mysql->php->php-fpm->fastcgi->nginx->http->user

安装LNMP架构

yum install nginx1.14 php7.1 mysql5.7

1.安装Nginx

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

#2.执行yum安装
[root@nginx ~]# yum install nginx -y

#3.启动并加入开机自启动
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl enable nginx

2.使用第三方扩展epel源安装php7.1

#1.移除旧版php
[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common
您暂时无权查看此隐藏内容!
#5.启动php-fpm管理进程, 并加入开机自启 [root@nginx ~]# systemctl start php-fpm [root@nginx ~]# systemctl enable php-fpm

4.安装MySQL5.7版本数据库

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

#2.安装mysql5.7, 文件过大可能会导致下载缓慢
[root@nginx ~]# yum install mysql-community-server -y

#3.启动数据库, 并加入开机自启动
[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld

#4.由于mysql5.7默认配置了默认密码, 需要过滤temporary password关键字查看对应登陆数据库密码
[root@nginx ~]# grep "temporary password" /var/log/mysqld.log

#5.登陆mysql数据库[password中填写上一步过滤的密码]
[root@web02 ~]# mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log)

#6.重新修改数据库密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'cgl123';

5.验证Nginx是否能正常解析php动态请求,以及php程序能否正常连接数据库

[root@nginx ~]# cat /etc/nginx/conf.d/php.conf 
server {
        server_name www.gl.sh.cn;
        listen 80;
        root /code;
        index index.php index.html;

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

6.新增info.php, 测试php解析是否工作正常

[root@nginx ~]# cat /code/info.php
<?php
        phpinfo();
?>

7.测试php是否能连接mysql数据库服务[无论是本地数据库还是远程数据库,测试方式一致]

[root@nginx ~]# cat /code/mysqli.php
       <?php
        $servername = "localhost";
        $username = "root";
        $password = "cgl123";

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

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

检测LNMP架构

1.通过浏览器访问info.php文件, 如出现下图则表示nginx与php能正常工作

file

2.访问mysqli.php验证php-mysqli模块是否正常工作

file

3.总结LNMP架构访问流程

file

部署博客产品Wordpress

1.配置Nginx虚拟主机站点,域名为blog.gl.sh.cn

#1.nginx具体配置信息
[root@nginx ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
    listen 80;
    server_name blog.gl.sh.cn;
    root /code/wordpress;
    index index.php index.html;

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

2.重启nginx服务

[root@nginx ~]# systemctl restart nginx

3.下载wordpress产品,部署wordress并授权

#1.获取wordpress代码
[root@nginx ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

#2.解压网站源码文件,拷贝至对应站点目录,并授权站点目录
[root@nginx ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz
[root@nginx ~]# cp -r wordpress /code/
[root@nginx ~]# chown -R www.www /code/wordpress/

4.由于wordpress产品需要依赖数据库, 所以需要手动建立数据库

#1.登陆数据库
[root@http-server ~]# mysql -uroot -pcgl123

#2.创建wordpress数据库
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> exit

5.通过浏览器访问wordpress, 并部署该产品

file

部署知乎产品Wecenter

1.配置Nginx虚拟主机站点,域名为zhw.gl.sh.cn

#1.nginx具体配置信息
[root@http-server ~]# cat /etc/nginx/conf.d/zh.conf
server {
    listen 80;
    server_name zhw.gl.sh.cn;
    root /code/zh;
    index index.php index.html;

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

#2.重启nginx服务
[root@http-server ~]# systemctl restart nginx

2.下载Wecenter产品,部署Wecenter并授权

[root@web02 ~]# wget http://ahdx.down.chinaz.com/201605/WeCenter_v3.2.1.zip
[root@web02 ~]# unzip WeCenter_v3.1.9.zip 
[root@web02 ~]# mv UPLOAD/ /code/zh
[root@web02 ~]# chown -R www.www /code/zh/

3.由于wecenter产品需要依赖数据库, 所以需要手动建立数据库

#1.登陆数据库
[root@http-server ~]# mysql -uroot -pcgl123

#2.创建wordpress数据库
MariaDB [(none)]> create database zh;
MariaDB [(none)]> exit

3.通过浏览器访问网站
file

部署网校产品Edusohu

1.配置Nginx虚拟主机站点,域名为eduw.gl.sh.cn

#1.nginx具体配置信息
[root@http-server ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
    listen 80;
    server_name eduw.gl.sh.cn;
    root /code/edu;
    index index.php index.html;

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

#2.重启nginx服务
[root@http-server ~]# systemctl restart nginx

2.下载edusohu产品,部署edusohu并授权

//获取wordpress代码
[root@http-server ~]# cd /soft/src/
[root@http-server /soft/src]# wget http://download.edusoho.com/edusoho-8.2.17.tar.gz

//解压软件网站源码文件, 并授权站点目录,不然会导致无法安装
[root@http-server /soft/src]# tar xf edusoho-8.2.17.tar.gz
[root@http-server /soft/src]# cp -r edusoho /code/edu
[root@http-server ~]# chown -R www.www /code/edu/
[root@http-server ~]# chmod -R  777  /code/edu/{app,web}

//由于edusohu会自动创建数据库, 所以无需创建数据库

3.通过浏览器访问网站
file

迁移数据至独立服务器

拆分LNMP的数据库到独立的数据库服务器步骤

老服务器操作

1) 指定导出对应的数据库文件。(cgl123是数据库密码)

[root@web02 ~]# mysqldump -uroot -p'cgl123' --all-databases --single-transaction > `date +%F%H`-mysql-all.sql

2) 拷贝备份数据库文件至新的数据库服务器上

[root@web02 zh]# scp 2018-08-0909-mysql-all.sql  root@10.0.0.51:~

新服务器操作

1) 导入数据库

[root@db01 ~]# mysql -uroot -p'cgl123' < 2018-08-0909-mysql-all.sql 

2) 登录数据库

[root@db01 ~]# mysql -uroot -pcgl123

3) 检查数据库是否所有的库都被成功导入

mysql> show databases;

4) 在新数据库上授权, 允许所有网段, 通过all账户连接数据库

#授权所有权限   grant all privileges
#授权所有库所有表 *.* 
#将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
#授权该用户登录的密码 identified by

MariaDB [(none)]> grant all on  *.* to all@'%' identified by 'cgl123';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

5) 修改Wordpress产品代码连接数据库的配置文件

[root@web01 ~]# vim /code/wordpress/wp-config.php
# 数据库名称
define('DB_NAME', 'wordpress');
# 数据库用户
define('DB_USER', 'all');
# 数据库密码
define('DB_PASSWORD', 'cgl123');
# 数据库地址
define('DB_HOST', '172.16.1.51');

6) 修改wecenter产品代码连接数据库的配置文件

[root@web01 zh]#  grep -iR "cgl123"|grep -v cache
system/config/database.php:  'password' => 'cgl123',
[root@web01 zh]# vim /code/zh/system/config/database.php
'host' => '172.16.1.51',
'username' => 'all',
'password' => 'cgl123',
'dbname' => 'zh',

7) 修改edusoho产品代码连接数据库的配置文件

[root@web01 edu]#  grep -iR "cgl123"|grep -v cache
app/config/parameters.yml:    database_password: 'cgl123'

[root@web01 edu]# vim /code/edu/app/config/parameters.yml 
parameters:
    database_driver: pdo_mysql
    database_host: 172.16.1.51
    database_port: 3306
    database_name: edu
    database_user: all
    database_password: 'cgl123'

#必须清理缓存
[root@web01 edu]# rm -rf /code/edu/app/cache/*

迁移图片至独立服务器

file

nfs-server服务端操作

1) 配置nfs共享的目录

[root@nfs01 ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

2) 创建对应共享的目录

[root@nfs01 ~]# mkdir /data/{blog,edu,zh} -p
[root@nfs01 ~]# chown -R www.www /data/
[root@nfs01 ~]# systemctl restart nfs-server

web01端操作

1) WEB客户端验证NFS是否安装成功

您暂时无权查看此隐藏内容!

2) 获取Wordpress产品的附件和图片存放的位置

浏览器->右键->检查->Network->选择按钮->点击一下图片
3) 备份web服务器上的Wordpress图片和附件

[root@web01 wp-content]# cd /code/wordpress/wp-content
[root@web01 wp-content]# cp uploads/ uploads_bak/

4) 客户端执行挂载操作[Wordpress]

[root@web01 wp-content]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/
[root@web01 wp-content]# cp -rp uploads_bak/* uploads/

5) 将挂载信息加入开机自启

您暂时无权查看此隐藏内容!

web02端操作

1.挂载nfs存储

[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/

2) 将挂载信息加入开机自启

您暂时无权查看此隐藏内容!

扩展相同的Web服务器

快速的扩展一台相同的web服务器, 数据库一模一样,图片、附件都一样, 准备一台新的服务器10.0.0.9

1.创建www用户

[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 www

2.安装LNP

[root@web03 ~]# scp -rp root@172.16.1.7:/etc/yum.repos.d/* /etc/yum.repos.d/
[root@web03 ~]# scp -rp root@172.16.1.7:/etc/pki/rpm-gpg/* /etc/pki/rpm-gpg/

[root@web03 ~]# yum install nginx -y
[root@web03 ~]# 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

3.将web01的nginx配置文件导入到web03

[root@web03 ~]# scp -rp root@172.16.1.7:/etc/nginx/* /etc/nginx/

4.将web01的php配置文件导入到web03

[root@web03 ~]# scp -rp root@172.16.1.7:/etc/php-fpm.d/* /etc/php-fpm.d/

5.将web01的产品代码导到web03,在web1上线进行打包操作

[root@web01 ~]# tar czf code.tar.gz /oldboy_code4/

#在web3上面拉取web1打包好的内容
[root@web03 ~]# scp root@172.16.1.7:/root/code.tar.gz ~

#在web3上面解压即可
[root@web03 ~]# tar xf code.tar.gz -C /

6.启动相关的服务

[root@web03 ~]# systemctl start nginx php-fpm 
[root@web03 ~]# systemctl enable nginx php-fpm

7.在web02上进行挂载

您暂时无权查看此隐藏内容!
# 所有的挂载都应该加入开机自启动
内容查看本文隐藏内容查看需要消耗5土豆币,请先
土豆币按需购买,不退换,请考虑清楚后购买。
赞(0) 打赏
未经允许不得转载:陈桂林博客 » LNMP网站架构
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册