LNMP架构的搭建

Posted liangyuxing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LNMP架构的搭建相关的知识,希望对你有一定的参考价值。

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 实现webphp的连接

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;????????????????9000php-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 实现phpmysql的连接

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 ! ";

}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调试模式。

*

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

* 强烈建议插件开发者在开发环境中启用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架构的搭建的主要内容,如果未能解决你的问题,请参考以下文章

LNMP架构搭建与优化

lnmp 架构搭建

详述Linux系统中搭建LNMP架构+Discuz论坛

puppet 搭建lnmp架构

Linux:LNMP架构的搭建

基于centos 7搭建LNMP架构