第9章 LNMP架构的搭建

9.1 什么是LNMP

9.1.1 LNMP的组成

  • L                linux
  • N                nginx:实现静态的服务处理
  • M                mysql/mariadb:实现数据的共享的存储
  • P                php:实现动态的服务处理

9.2 LNMP的架构原理

9.2.1 LNMP图示讲解

9.2.2 文字进行讲解

  • 用户将动态请求发送给web服务器,web服务器中的服务nginx没有办法进行处理
  • nginx会通过fastcgi_pass通过接口fastcgi将数据发送给php服务中的php-fpm来进行处理
  • php会查看是否可以处理,如果可以则进行处理,并且将信息处理成nginx可以识别的html代码
  • php如果不可以进行处理,会将信息解释成数据库可以识别的语言发送给数据库,让数据库进行处理

9.3 实现web和php的连接

9.3.1 安装php服务

9.3.1.1 解决yum软件包的冲突问题

yum remove php-mysql php php-fpm php-common

9.3.1.2 准备yum软件扩展的信息

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

9.3.1.3 开始安装php服务

yum install -y 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

9.3.2 编辑配置文件

[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf

server {

listen 80;

server_name blog.oldboy.com;

client_max_body_size 10m;

location / {

root /html/blog;

index index.html index.htm;

}

location ~ \.php$ {

root /html/blog;

fastcgi_pass 127.0.0.1:9000;                9000是php-fpm的端口

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;                解析变量

}

}

  • $document_root:                            指定你要找寻的站点目录
  • $fastcgi_script_name                        指定你要找的站点目录资源

9.3.3 创建站点目录,并且创建要测试的资源信息

mkdir -p /html/blog/                创建站点目录

 

touch test_phpinfo.php                创建资源信息

<?php

phpinfo();

?>

9.3.4 修改成php服务可以存储的用户

[root@web01 conf.d] # vim /etc/php-fpm.d/www.conf

1 ; Start a new pool named 'www'.

2 [www]

3

4 ; Unix user/group of processes

5 ; Note: The user is mandatory. If the group is not set, the default user's group

6 ; will be used.

7 ; RPM: apache Choosed to be able to access some dir as httpd

8 user = www

9 ; RPM: Keep a group allowed to write in log dir.

10 group = www

9.3.5 启动php-fpm服务

systemctl start php-fpm.service

systemctl enable php-fpm.service

 

9.3.6 查看是否连接成功

9.4 实现php和mysql的连接

9.4.1 安装mysql

9.4.1.1 mysql服务的安装

yum install mariadb-server mariadb -y

9.4.1.2 启动mysql服务

systemctl start mariadb.service

systemctl enable mariadb.service

9.4.2 连接mysql

9.4.2.1 进入mysql

[root@web01 ~] # mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 191

Server version: 5.5.64-MariaDB MariaDB Server

 

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

MariaDB [(none)]>                看见这个信息就是进入了mysql

9.4.2.2 mysql的一些基本操作

show databases;                                        查看数据库

use mysql                                            使用某个数据库

show tables                                            查看表的信息

create database 数据库                                    创建数据库

drop database 数据库                                    删除数据库

select user,host from mysql.user;                            查看某个表的信息

delete from mysql.user where name=xx                        删除指定的name数据

mysqladmin -uroot password 'oldboy123'                    设置root的密码

mysqldump -uroot -poldboy123 -A > /tmp/aa.sql                将所有的数据库进行备份

mysql -uroot -poldboy123 < /tmp/aa,sql                        将库还原到数据库里面

9.4.3 数据库启动失败的几个原因

查看tmp目录是不是1777权限

查看配置文件是不是在/etc/my.cnf

9.4.4 创建站点目录和资源信息

cd /html/blog                切换站点目录

 

vim test_mysql.php            编辑测试文件

<?php

$servername = "localhost";

$username = "root";

$password = "oldboy123";

//$link_id=mysql_connect('主机名','用户','密码');

//mysql -u用户 -p密码 -h 主机

$conn = mysqli_connect($servername, $username, $password);

if ($conn) {

echo "mysql successful by root !\n";

}else{

die("Connection failed: " . mysqli_connect_error());

}

?>

9.4.5 查看是否成功

9.5 实现搭建动态的网站

9.5.1 申请域名信息

9.5.2 网站需要的代码包

https://cn.wordpress.org/download/            wordpress(blog)

9.5.3 编辑配置文件

[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf

server {

listen 80;

server_name blog.oldboy.com;

client_max_body_size 10m;

location / {

root /html/blog;

index index.php index.html index.htm;

}

location ~ \.php$ {

root /html/blog;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

9.5.4 创建站点目录和将代码文件放入里面

[root@web01 conf.d] # cd /html/blog/

 

[root@web01 blog] # ll

total 204

-rw-r--r-- 1 www www 420 Dec 1 2017 index.php

-rw-r--r-- 1 www www 19935 Oct 15 17:06 license.txt

-rw-r--r-- 1 www www 7005 Oct 15 17:07 readme.html

-rw-r--r-- 1 root root 428 Nov 11 23:25 test_mysql.php

-rw-r--r-- 1 www www 6919 Jan 12 2019 wp-activate.php

drwxr-xr-x 9 www www 4096 Oct 15 17:00 wp-admin

-rw-r--r-- 1 www www 369 Dec 1 2017 wp-blog-header.php

-rw-r--r-- 1 www www 2283 Jan 21 2019 wp-comments-post.php

-rw-r--r-- 1 www www 2973 Nov 12 11:13 wp-config.php

-rw-r--r-- 1 www www 2776 Oct 15 17:07 wp-config-sample.php

drwxr-xr-x 6 www www 84 Nov 12 10:57 wp-content

-rw-r--r-- 1 www www 3847 Jan 9 2019 wp-cron.php

drwxr-xr-x 20 www www 8192 Oct 15 17:07 wp-includes

-rw-r--r-- 1 www www 2502 Jan 16 2019 wp-links-opml.php

-rw-r--r-- 1 www www 3306 Dec 1 2017 wp-load.php

-rw-r--r-- 1 www www 39551 Jun 10 21:34 wp-login.php

[root@web01 blog] #

9.5.5 第一次连接的测试

9.5.5.1 现在就开始

9.5.5.2 发现需要进行数据库连接,首先进入数据库连接

9.5.6 创建数据库用户权限

9.5.6.1 创建数据库

create database wordpress

9.5.6.2 创建并授权用户信息,并且添加密码

grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';

9.5.7 再次连接

9.5.7.1 数据库连接成功以后,在次点击提交查看状况

9.5.7.2 真实的代码文件

[root@web01 blog] # cat wp-config.php

<?php

/**

* WordPress基础配置文件。

*

* 这个文件被安装程序用于自动生成wp-config.php配置文件,

* 您可以不使用网站,您需要手动复制这个文件,

* 并重命名为"wp-config.php",然后填入相关信息。

*

* 本文件包含以下配置选项:

*

* * MySQL设置

* * 密钥

* * 数据库表名前缀

* * ABSPATH

*

* @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php

*

* @package WordPress

*/

 

// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //

/** WordPress数据库的名称 */

define( 'DB_NAME', 'wordpress' );

 

/** MySQL数据库用户名 */

define( 'DB_USER', 'wordpress' );

 

/** MySQL数据库密码 */

define( 'DB_PASSWORD', 'oldboy123' );

 

/** MySQL主机 */

define( 'DB_HOST', '172.16.1.51' );

 

/** 创建数据表时默认的文字编码 */

define( 'DB_CHARSET', 'utf8mb4' );

 

/** 数据库整理类型。如不确定请勿更改 */

define( 'DB_COLLATE', '' );

 

/**#@+

* 身份认证密钥与盐。

*

* 修改为任意独一无二的字串!

* 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密钥生成服务}

* 任何修改都会导致所有cookies失效,所有用户将必须重新登录。

*

* @since 2.6.0

*/

define( 'AUTH_KEY', ' oZ$<2[Ngf&r0UZ9(a.iz,LNROA~ON$|S>R+94r#BFk3Hvz*9oVj:F.7*KL5qJ6Q' );

define( 'SECURE_AUTH_KEY', '!/:02gSG&sb-w61U@f#%+erC://`O,qFe]lXGfXc<rjt@Z%Ev~^rR}{7o<rY%G%e' );

define( 'LOGGED_IN_KEY', '+>),x;J0>9:I|rN,/=vSd3V0z%sTE~W2l*D!fj/jR_|f5jIV3C&?FgrhT8CiYm/M' );

define( 'NONCE_KEY', 'Y8$FE|UT(?`76Uy:@EHi5gJ&U<uyQl,]kq/0^u40%t/d^ >`>7rz~Tp7Ue]8vgSd' );

define( 'AUTH_SALT', 'pI)Pe30w)9k>w~vn7c?C:S1A5Q#Y1<J@OBI*clB7ilK:vx9[r3o3erh/pw3||<Lh' );

define( 'SECURE_AUTH_SALT', 'zA!%g1`8&yH`d|M,ix:h)R_x1x-^^=fP*QI+C_$MWtqPA9u=D<!KlYZ,kh 3JPp6' );

define( 'LOGGED_IN_SALT', 'z- OgDNXu6DOxX}|0VPae.gbK(XqIV*:mM# =b]UP%f`2U|S]0dK$]NN]MM0[*N9' );

define( 'NONCE_SALT', 'H|bg,FwOJ|yqtkHN:4EtJ*_$+bnUM67/Ny<#mLjfbOZl7:gW&^Q<ELSs64?rMR1q' );

 

/**#@-*/

 

/**

* WordPress数据表前缀。

*

* 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置

* 不同的数据表前缀。前缀名只能为数字、字母加下划线。

*/

$table_prefix = 'wp_';

 

/**

* 开发者专用:WordPress调试模式。

*

* 将这个值改为true,WordPress将显示所有用于开发的提示。

* 强烈建议插件开发者在开发环境中启用WP_DEBUG。

*

* 要获取其他能用于调试的信息,请访问Codex。

*

* @link https://codex.wordpress.org/Debugging_in_WordPress

*/

define('WP_DEBUG', false);

 

/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */

 

/** WordPress目录的绝对路径。 */

if ( ! defined( 'ABSPATH' ) ) {

    define( 'ABSPATH', dirname( __FILE__ ) . '/' );

}

 

/** 设置WordPress变量和包含文件。 */

require_once( ABSPATH . 'wp-settings.php' );

 

[root@web01 blog] #

9.5.7.3 上一步点击现在就安装(下一步安装wordpress)

9.5.8 搭建成功

9.6.1 图片上传失败

9.6.1.1 失败的问题

问题的原因:这种上传不上去是因为客户将数据给了web服务器,会进行身份的转换,由于是动态的请求需要将信息抛给php处理,php在存储的时候由于自己本身的属主和属组是apache,而用户上传的数据是root权限是没有办法进行存储的

9.6.1.1.1 第一种解决办法,给站点目录及其存储数据的目录加入写入权限

chmod o+x /html/blog/wp-content

9.6.1.1.2 第二种解决办法,给站点目录设置成apache属主

chown -R apache. /html/blog/

9.6.1.1.3 第三种解决办法,将动态服务php的属组和静态服务nginx的属组权限一致

2    [www]

3    

4    ; Unix user/group of processes

5    ; Note: The user is mandatory. If the group is not set, the default user's group

6    ; will be used.

7    ; RPM: apache Choosed to be able to access some dir as httpd

8    user = www                    将属主修改成www

9    ; RPM: Keep a group allowed to write in log dir.

10    group = www                    将属组修改成www

 

9.6.2 大于1M的主题上传失败

9.6.2.1 失败的问题

9.6.2.1.1 解决问题

[root@web01 conf.d] # cat /etc/nginx/conf.d/blog.conf

server {

listen 80;

server_name blog.oldboy.com;

client_max_body_size 10m;                     设置大小为10M

location / {

root /html/blog;

index index.php index.html index.htm;

}

location ~ \.php$ {

root /html/blog;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

9.6.2.1.2 查看是否成功

9.6.3 大于2M的图片上传失败

9.6.3.1 失败的问题

9.6.3.1.1 解决问题

vim /etc/php.ini

779 upload_max_filesize = 10M                指定最大上传文件大小限制

656 post_max_size = 10M                    请求主体最大尺寸

802 max_execution_time = 300                执行上传数据操作最大执行时间

9.6.3.1.2 查看是否成功

9.7 实现数据库的迁移

9.7.1 数据库迁移的意义

  • 实现了数据的共享存储和一致性
  • 磁盘空间的限制性

9.7.2 数据库迁移的步骤

9.7.2.1 在数据库服务器安装mariadb服务,并且将root用户的密码设置成oldboy123

yum install -y mariadb mariadb-server                安装数据库

systemctl start mariadb.service                    启动数据库

mysqladmin -uroot password 'oldboy123'            设置密码

 

9.7.2.2 在本地web服务器将数据库的信息进行备份,并且保存在tmp目录下面,并且发送到数据库服务器上

mysqldump -uroot -poldboy123 -A >/tmp/mysql_backup.sql            备份数据库

 

rsync -avz /tmp/mysql_backup.sql 172.16.1.51:/tmp                将数据进行传输

9.7.2.3 在数据库服务器将远程传送过来的数据还原到数据库里面

mysql -uroot -poldboy123 < /tmp/mysql_backup.sql

9.7.2.4 实现远程数据库可以进行连接

9.7.2.4.1 修改用户连接的信息,允许172.16.1.0网段可以进行连接

mysql -uroot -p123456 -e "grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';"

9.7.2.4.2 修改代码信息进行连接

[root@web01 ~] # cat /html/blog/wp-config.php

<?php

 

define( 'DB_NAME', 'wordpress' );

 

/** MySQL数据库用户名 */

define( 'DB_USER', 'wordpress' );

 

/** MySQL数据库密码 */

define( 'DB_PASSWORD', 'oldboy123' );

 

/** MySQL主机 */

define( 'DB_HOST', '172.16.1.51' );            改成远程的数据库服务器内网IP

9.7.3 常见的数据库迁移以后的问题

9.7.3.1 网站数据库连接不上排错问题

1) 检查连接数据库代码文件配置是否正确

mysql -uwordpress -poldboy123 -h172.16.1.51

2) 修改数据库用户信息

方法一: 允许用户使用 wordpres@'web01' 连接

grant all on wordpress.* to 'wordpress'@'web01' identified by 'oldboy123';

方法二: 关闭数据库反向解析操作(跳过反向解析过程)    

delete from mysql.user where user='wordpress' and host='web01'; 删除表信息

flush privileges;

vim /etc/my.cnf

[mysqld]

skip-name-resolve

重启数据库服务

 

9.8 实现web和存储服务的连接

9.8.1 存储目录确定

9.8.1.1 复制图片的地址找到你要存储的目录路径

9.8.1.2 找到存储的路径

9.8.1.3 存储目录确定

[root@web01 yum.repos.d] # cd /html/blog/wp-content/uploads                    已经找见

You have new mail in /var/spool/mail/root

[root@web01 uploads] # ll

total 0

drwxr-xr-x 3 www www 16 Nov 17 22:04 2019

[root@web01 uploads] #

9.8.2 将存储目录里面的数据迁移出来

[root@web01 uploads] # mv /html/blog/wp-content/uploads/* /tmp

9.8.3 确认存储服务部署完毕

[root@web01 uploads] # showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data/zhihu 172.16.1.0/24

/data/blog 172.16.1.0/24

/data/bbs 172.16.1.0/24

[root@web01 uploads] #

9.8.4 web服务进行挂载操作

[root@web01 uploads] # mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads

9.8.5 还原以前的数据

[root@web01 uploads] # mv /tmp/* /html/blog/wp-content/uploads/

LNMP架构的搭建的更多相关文章

  1. Linux:LNMP架构的搭建

    LNMP架构的搭建 centos6.8-i686 MySQL PHP Nginx 搭建前先安装一些必要的rpm和php组件(全新系统) yum install -y wget gcc vim* lib ...

  2. LNMP架构基础搭建

    LNMP架构+wordpress博客 环境: centos6.7 2.6.32-573.el6.x86_64 nginx-1.6.3 mysql-5.5.49 php-5.3.27 wordpress ...

  3. s28 LNMP架构服务搭建

    nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...

  4. LNMP架构之搭建wordpress博客网站

    系统环境版本 [root@db02 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@db02 ~]# uname -a Lin ...

  5. 企业级LNMP架构搭建实例(基于Centos6.x)

    1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNM ...

  6. LNMP架构下Discuz论坛的搭建

    在上一节中,我们对lnmp架构下的mysql.php.nginx进行源码的安装,并设置了相关的安装参数.现在我们将在上一节的基础上,把三者联系起来进行一个论坛的部署. 一.首先进行Discuz(社区论 ...

  7. puppet自动化搭建lnmp架构

    puppet自动化安装lnmp架构 3nginx的搭建 mkdir -p /etc/puppet/modules/nginx/{manifests,files} vim /etc/puppet/mod ...

  8. 部署企业LNMP架构搭建bbs

    部署企业LNMP架构 1===============部署Nginx 2===============安装及部署Mysql数据库 3===============安装PHP解析环境 4======== ...

  9. 基于LNMP架构搭建wordpress博客之安装架构说明

    架构情况 架构情况:基于LNMP架构搭建wordpress系统 软件包版本说明: 系统要求 :  CentOS-6.9-x86_64-bin-DVD1.iso PHP版本  :  php-7.2.29 ...

随机推荐

  1. 深入理解计算机系统 第二章 信息的表示和处理 Part2 第二遍

    <深入理解计算机系统> 第三版 第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 29 ~ 34 页) 第一遍对应笔记链接 https://www.cnblogs.com/s ...

  2. 【Linux系列】Centos 7安装以及网络配置(一)

    目的 本文主要介绍以下两点: 一. 如何在Oracle VM VirtualBox安装centos(已有VirtualBox) 二. 如何在内网里实现虚拟机访问外网.物理主机以及物理主机访问虚拟机 一 ...

  3. PHP代码安全有必要了解下

    攻击者通过构造恶意SQL命令发送到数据库,如果程序未对用户输入的 SQL命令执行判断过滤,那么生成的SQL语句可能会绕过安全性检查,插入其他用于修改后端数据库的语句,并可能执行系统命令,从而对系统造成 ...

  4. Hadoop压缩的图文教程

    近期由于Hadoop集群机器硬盘资源紧张,有需求让把 Hadoop 集群上的历史数据进行下压缩,开始从网上查找的都是关于各种压缩机制的对比,很少有关于怎么压缩的教程(我没找到..),再此特记录下本次压 ...

  5. pat 1077 Kuchiguse(20 分) (字典树)

    1077 Kuchiguse(20 分) The Japanese language is notorious for its sentence ending particles. Personal ...

  6. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  7. 1142 CREATE VIEW command denied to user 'blog'@'XXX.XXX.XXX.XXX' for table 'Articles'

    创建视图时,报如上的1142错误,是数据库权限设置的问题. 进入mysql的root用户,赋予所有权限即可: mysql>grant all privileges on blogDB.* to ...

  8. 关闭Eslint检查

    Eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格.不过有点过于严格,通常缩减不同也会报错... 这会影响工作效率啊,最好就是在创建项目的时候不要ESlint(选择No ...

  9. d3.js 地铁轨道交通项目实战

    上一章说了如何制作一个线路图,当然上一章是手写的JSON数据,当然手写的json数据有非常多的好处,例如可以应对客户的各种BT需求,但是大多数情况下我们都是使用地铁公司现成的JSON文件,话不多说我们 ...

  10. 《面试官之你说我听》:简明的图解Redis RDB持久化、AOF持久化

    欢迎关注文章这一系列,一起学习 <提升能力,涨薪可待篇> <面试知识,工作可待篇> <实战演练,拒绝996篇> 如果此文对你有帮助.喜欢的话,那就点个赞呗,点个关注 ...