暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Lnmp-架构搭建

佐伊猫玖 2020-09-19
416

12LNMP

第一章 LNMP架构概述

1.1 什么是LNMP

LNMP 是一套技术的组合, L=Linux、 N=Nginx、 M=MySQL、 P=PHP

1.2 LNMP架构是如何工作的

首先 Nginx 服务是不能处理动态请求,那么当用户发起动态请求时, Nginx 又是如何进行处理的。
当用户发起 http 请求,请求会被 Nginx 处理,如果是静态资源请求 Nginx 则直接返回,如果是动态请求 Nginx 则通过 fastcgi 协议转交给后端的 PHP 程序处理,具体如下图所示

1.3 Nginx与Fast-CGI工作流程

image.png

比喻:
Nginx: 拉货的货车
FastCGI: 高速公路
php-fpm: 每个路道的收费站
wrapper: 搬货的师傅
systemctl start php-fpm: 管理整个高速工作所有的收费站

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安装部署

2.0 创建www统一用户


 [root@web01 ~]# groupadd www -g 666
 [root@web01 ~]# useradd www -s /sbin/nologin -M -u 666 -g 666
 [root@web01 ~]# id www
 uid=666(www) gid=666(www) =666(www)

2.1 使用官方仓库安装nginx


 [root@web01 ~]# cat /etc/yum.repos.d/nginx.repo 
 [nginx-stable]
 name=nginx stable repo
 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=1
 gpgkey=https://nginx.org/keys/nginx_signing.key
 
 [nginx-mainline]
 name=nginx mainline repo
 baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
 gpgcheck=1
 enabled=0
 gpgkey=https://nginx.org/keys/nginx_signing.key
 
 

2.2 启动Nginx并加入开机自启动

安装

 [root@web01 ~]# yum install nginx -y


 [root@web01 ~]# systemctl start nginx
 [root@web01 ~]# systemctl enable nginx

2.3 使用第三方拓展源安装php7.1


 [root@web01 ~]# yum remove php-mysql-5.4 php php-fpm php-common
 [root@web01 ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 [root@web01 ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 
  rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 [root@web01 ~]# 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

2.4 配置php-fpm用户与nginx用户保持一致

 [root@web07 /]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
 [root@web07 /]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
 [root@web07 /]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

2.5 启动php-fpm并加入开机自启动

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

2.6 安装Mariadb数据库

 [root@web01 ~]# yum install mariadb-server mariadb -y

2.7 启动Mariadb数据库并加入开机自启动

 [root@web01 ~]# systemctl start mariadb
 [root@web01 ~]# systemctl enable mariadb

2.8 配置Mariadb账号密码

 [root@web01 ~]# mysqladmin password '12345'
 [root@web01 ~]# mysql -uroot -poldboy123

2.9 mysql基础命令

 #查看当前mysql有哪些用户
 MariaDB [(none)]> select user,host from mysql.user;
 +------+-----------+
 | user | host      |
 +------+-----------+
 | root | 127.0.0.1 |
 | root | ::1       |
 |      | localhost |
 | root | localhost |
 |      | web01     |
 | root | web01     |
 +------+-----------+

登录mysql

 [root@web01 ~]# mysql -uroot -p12345
 

   修改密码

 mysqladmin  password mysun

使用指定IP登录

 [root@web01 ~]# mysql -uroot -poldboy123 -h127.0.0.1

查询当前数据库有哪些用户

 select user,host from mysql.user;
 查询   mysql库里的user表里的    user和host字段的内容

创建一个数据库

 create database  "名字"

删除一个数据库

 drop database  wordpress;
 

查看当前有哪些数据库

 MariaDB [(none)]> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | mysql              |
 | performance_schema |
 | test               |
 +--------------------+

安全初始化

[root@web07 code/wordpress] # mysql_secure_installation 

主要的目录选着

[root@web07 code/wordpress] # mysql_setpermission 
Password for user  to connect to MySQL: 

查看库里面有哪些表

MariaDB [(none)]> show tables from mysql;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |

查看表里有哪些字段

MariaDB [mysql]> desc user;

授权

[root@db01 ~]# mysql -uroot -p'oldboy123'
> grant all privileges on *.* to 'all'@'%' identified by 'oldboy123';
> flush privileges; #刷新权限
>exit;
MariaDB [(none)]> grant all privileges on *.* to 'xiaoming'@'localhost' identified by 'xiaoming123';

退出

exit

第三章 LNMP环境配置

3.1 Fastcgi语法

设置 fastcgi 服务器的地址,该地址可以指定为域名或 IP 地址,以及端口


Syntax: fastcgi_pass address;
Default: —
Context: location, if in location
#语法示例
fastcgi_pass localhost:9000;
fastcgi_pass unix:/tmp/fastcgi.socket;

设置 fastcgi 默认的首页文件,需要结合 fastcgi_param 一起设置


Syntax: fastcgi_index name;
Default: —
Context: http, server, location

通过 fastcgi_param 设置变量,并将设置的变量传递到后端的 fastcgi 服务器


Syntax: fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location
#语法示例
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME code$fastcgi_script_name;

3.2 最终Nginx连接FastCGI服务器配置如下

创建目录/code

[root@web01 ~]# cat etc/nginx/conf.d/php.conf
server {
    server_name www.oldboy.com;
    listen 80;
    root code;
    index index.php index.html;
    client_max_body_size 100m; 
    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;
    }
}

3.3 在/code目录下创建info.php文件并访问测试


[root@web01 ~]# mkdir code
[root@web01 ~]# chown -R www:www code/
[root@web01 ~]# cat code/info.php
<?php
    phpinfo();
?>

3.4 检查nginx语法并重启


[root@web01 ~]# nginx -t
nginx: the configuration file etc/nginx/nginx.conf syntax is ok
nginx: configuration file etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx

3.5 绑定hosts然后在浏览器访问

http://www.oldboy.com/info.php


3.6 测试php和数据库访问是否正常


[root@web01 ~]# cat code/mysql.php 
<?php
    $servername = "localhost";
    $username = "root";
    $password = "oldboy123";
     创建连接
    $conn = mysqli_connect($servername, $username, $password);
      检测连接
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "php 连接 MySQL 数据库成功";
?>

3.6 通过浏览器访问数据库页面

第四章 部署博客Wordpress

4.1 配置Nginx虚拟主机站点


[root@web01 ~]# cat etc/nginx/conf.d/wordpress.conf    
server {
    listen 80;
    server_name blog.oldboy.com;
    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;
    }
}

4.2 重启nginx


[root@web01 ~]# systemctl restart nginx

4.3 下载解压wordpress到代码目录


[root@web01 ~]# mkdir code
[root@web01 ~]# cd code/
[root@web01 code]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
[root@web01 code]# tar xf wordpress-4.9.4-zh_CN.tar.gz 
[root@web01 code]# chown -R www:www code/wordpress

4.4 创建wordpress数据库


[root@web01 code]# mysql -uroot -poldboy123
> create database wordpress;
> exit

4.5 浏览器访问wordpress并部署







第五章 部署问答网站Wecenter

5.1 配置Nginx虚拟站点


[root@web01 ~]# cat /etc/nginx/conf.d/wecenter.conf 
server {
    listen 80;
    server_name zh.oldboy.com;
    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;
    }
}

5.2 下载解压wecenter并授权


[root@web01 ~]# mkdir /code/zh -p
[root@web01 ~]# cd /opt/
[root@web01 /opt]# rz
[root@web01 /opt]# ls
WeCenter_3-3-2.zip
[root@web01 /opt]# unzip WeCenter_3-3-2.zip -d /code/zh/
[root@web01 /opt]# chown -R www:www /code/

5.3 创建wecenter数据库


[root@web01 ~]# mysql -uroot -poldboy123
> create database zh;
> exit;

5.4 浏览器访问




5.5 清除首页安装文件

配置文件大小

Nginx配置文件上传

/etc/nginx/conf.d/blog.oldboy.com
client_max_body_size 100m;    #Nginx默认上次的文件大小1m 修改成100m;

PHP配置文件上传

/etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M


PHP什么情况下重启
在php自身配置文件更改的情况下 需要重启
php的代码有更改的情况下 不需要重启php-fpm


[root@web01 ~]# rm -rf /code/zh/install

第六章 拆分数据库

6.1 为什么要进行数据库的拆分

由于单台服务器运行 LNMP 架构会导致网站访问缓慢,当内存被吃满时,很容易导致系统出现 oom,从而 kill 掉MySQL 数据库,所以需要将 web 和数据库进行独立部署

6.2 数据库拆分后解决了什么问题

1.缓解 web 网站的压力
2.增强数据库读写性能
3.提高用户访问的速度

6.3 数据库拆分架构演变过程

6.4 数据库拆分环境搭建


web01 172.16.1.7    nginx+php
db01    172.16.1.51  mysql

6.5 数据库拆分详细步骤

6.5.1 web01上备份数据库并拷贝到db01上

备份 web01 上的数据库,oldboy123 是数据库密码

[root@web01 ~]# mysqldump -uroot -p'oldboy123' -A --single-transaction > mysql-all.sql

将 web01 上备份的数据库拷贝至 db01 服务器上

[root@web01 ~]# scp mysql-all.sql 10.0.1.51:/tmp

6.5.2 db01恢复数据库

将 web01 服务器上推送的数据库备份文件恢复至 db01 服务器新数据库中

[root@db01 ~]# yum install mariadb mariadb-server -y
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# mysqladmin password 'oldboy123'
[root@db01 ~]# mysql -uroot -p'oldboy123' < /tmp/mysql-all.sql
[root@db01 ~]# mysql -uroot -p'oldboy123' -e "show databases;"
重启数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| zh                 |
+--------------------+

6.6.3 db01数据库进行授权

在新数据库上授权, 允许所有网段, 通过 all 账户连接并操作该数据库
授权所有权限 grant all privileges
授权所有库所有表 .
将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
授权该用户登录的密码 identified by


[root@db01 ~]# mysql -uroot -p'oldboy123'
> grant all privileges on *.* to 'all'@'%' identified by 'oldboy123';
> flush privileges; #刷新权限
>exit;

测试使用IP地址能不能登陆

授权打印

MariaDB [(none)]> show grants for root@127.0.0.1;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@127.0.0.1                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY PASSWORD '*00A51F3F48415C7D4E8908980D443C29C69B60C9' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY "12345"



[root@db01 ~]# mysql -uall -p'oldboy123' -h 10.0.1.51
> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
| zh                 |
+--------------------+

6.6.4 web01修改代码连接到新数据库

客户端

修改wordpress

[root@web01 ~]# vim /code/wordpress/wp-config.php
/** MySQL数据库用户名 */
define('DB_USER', 'all');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'oldboy123');
/** MySQL主机 */
define('DB_HOST', '172.16.1.51');

修改wecenter


[root@web01 ~]# vim /code/zh/system/config/database.php
  'host' => '172.16.1.51',
  'username' => 'all',
  'password' => 'oldboy123',
  'dbname' => 'zh',

停止web01上的数据库


[root@web01 ~]# systemctl stop mariadb.service 

6.6.5 测试访问

此时如果打开网页没有问题则表明数据库拆分完成


6.6拆分NFS

扩展多台web服务器
主机名称应用环境外网地址内网地址
web01 nginx+php 10.0.0.7 172.16.1.7
web02 nginx+php 10.0.0.8 172.16.1.8
db01 mysql 10.0.0.51 172.16.1.51

1-nfs服务端安装

[root@nfs ~]# yum -y install nfs-utils

2-.创建用户

[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -s /sbin/nologin -M www

3-NFS上操作 配置nfs  目录规划

1)配置文件配置
	[root@nfs ~]# cat /etc/exports
	/data/blog      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)
	/data/edu       172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

4-创建并授权目录属主属组

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

5-启动nfs

[root@nfs ~]# systemctl restart nfs

6.61-web端操作

1-安装nfs

yum -y install nfs-utils
showmount -e 172.16.1.31

2.-把所有的图片推送到NFS共享目录/data/blog下

可先备份一份在推送

rsync -avrgpo --delete /code/wordpress/wp-content/uploads/* 172.16.1.7:/data/blog
NFS上操作 重新对/data目录进行递归授权 属主属组必须为www
[root@nfs ~]# chown -R www.www /data

3-WEB01服务器上进行挂载

mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/

4.开机自动挂载 WEB01

172.16.1.31:/data/blog   /code/wordpress/wp-content/uploads/      nfs     defaults        0 0

5.解决NFS单点故障 脚本 和backup做实时同步 sersync+inotify+rsync

备注:注意备份,当web1安装好了.直接安装软件拷贝文件



文章转载自佐伊猫玖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论